diff --git a/README.md b/README.md index f45f9cfb..b0ec5893 100644 --- a/README.md +++ b/README.md @@ -451,6 +451,31 @@ Extended Permissions mode on device must be enabled in some of the projects to a +## Community Samples + + + + + + + +
+ + spectacles-2-unitree + +

Spectacles to Unitree Teleoperation

+

+ + + +

+

Simulate or remote control a humanoid robot by copying your hand movements

+
+ + + +
+ ## Support If you have any questions or need assistance, please don't hesitate to reach out. Our community is here to help, and you can connect with us and ask for support [here](https://www.reddit.com/r/Spectacles/). We look forward to hearing from you and are excited to assist you on your journey! diff --git a/Spectacles-2-Unitree/.devcontainer/Dockerfile b/Spectacles-2-Unitree/.devcontainer/Dockerfile new file mode 100644 index 00000000..e877d6a0 --- /dev/null +++ b/Spectacles-2-Unitree/.devcontainer/Dockerfile @@ -0,0 +1,96 @@ +FROM ubuntu:noble AS dev + +LABEL org.opencontainers.image.description="Spectacles-2-Unitree dev container" + +ARG UV_VERSION=0.6.2 + +ENV CYCLONEDDS_HOME=/usr/local \ + DEBIAN_FRONTEND=noninteractive \ + PATH="/opt/conda/bin:${PATH}" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + apt-transport-https \ + curl \ + gnupg \ + # Needed for some Python dependencies that want the full non-headless version of OpenCV. + libgl1 \ + libglib2.0-0 \ + lsb-release \ + python3.12 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +RUN . /etc/lsb-release \ + # Git LFS + && curl -fsSL https://packagecloud.io/github/git-lfs/gpgkey \ + | gpg --dearmor -o /etc/apt/keyrings/github_git-lfs-archive-keyring.gpg \ + && curl -fsSL "https://packagecloud.io/install/repositories/github/git-lfs/config_file.list?os=${DISTRIB_ID}&dist=${DISTRIB_CODENAME}" > /etc/apt/sources.list.d/github_git-lfs.list \ + # GitHub CLI + && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg -o /usr/share/keyrings/githubcli.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list \ + # Docker + && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list + +# Additional dev packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + docker-buildx-plugin \ + docker-ce-cli \ + gcc-aarch64-linux-gnu \ + gh \ + git \ + git-lfs \ + htop \ + iputils-ping \ + jq \ + less \ + linux-tools-common \ + linux-tools-generic \ + micro \ + net-tools \ + openssl \ + pipx \ + python3-pip \ + ssh \ + unzip \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install act +RUN --mount=type=cache,target=/root/.cache/act \ + curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/nektos/act/master/install.sh | bash + +# Install uv +RUN pipx ensurepath && pipx install "uv==$UV_VERSION" + +# Install conda +RUN curl -fsSL https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-aarch64.sh -o /tmp/miniforge.sh \ + && chmod +x /tmp/miniforge.sh \ + && /tmp/miniforge.sh -b -p /opt/conda \ + && rm /tmp/miniforge.sh + +# Build CycloneDDS +RUN git clone https://github.com/eclipse-cyclonedds/cyclonedds /tmp/cyclonedds \ + && cd /tmp/cyclonedds \ + # The unitree-sdk2py depends on CycloneDDS 0.10.2 + && git checkout 0.10.2 \ + && mkdir build && cd build \ + && cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. \ + && cmake --build . --target install \ + && cd / && rm -rf /tmp/cyclonedds + +SHELL ["/bin/bash", "-c"] + +COPY unitree-client/environment.yml environment.yml + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda env create -f environment.yml \ + && conda clean -afy + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda activate unitree-client \ + && pip install --no-cache-dir \ + meshcat@git+https://github.com/TastyDucks/meshcat-python.git \ + unitree_sdk2py@git+https://github.com/TastyDucks/unitree_sdk2_python.git \ + cyclonedds==0.10.2 \ No newline at end of file diff --git a/Spectacles-2-Unitree/.devcontainer/devcontainer.json b/Spectacles-2-Unitree/.devcontainer/devcontainer.json new file mode 100644 index 00000000..49953d73 --- /dev/null +++ b/Spectacles-2-Unitree/.devcontainer/devcontainer.json @@ -0,0 +1,24 @@ +// For format details, see https://aka.ms/devcontainer.json. +{ + "name": "Spectacles-2-Unitree dev", + "build": { + "dockerfile": "Dockerfile", + "context": "..", + "options": [ + "--platform=linux/arm64" + ] + }, + "mounts": [ + { + "source": "/var/run/docker.sock", + "target": "/var/run/docker.sock", + "type": "bind" + } + ], + "runArgs": [ + "--platform=linux/arm64" + ], + "forwardPorts": [ + 8080 + ] +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/.gitattributes b/Spectacles-2-Unitree/.gitattributes new file mode 100644 index 00000000..b5606a96 --- /dev/null +++ b/Spectacles-2-Unitree/.gitattributes @@ -0,0 +1,105 @@ +# Shipped by Lens Studio +*.esproj text linguist-language=yaml + +Assets/**/* filter=lfs diff=lfs merge=lfs -text + +Assets/**/*.css !filter !diff !merge text +Assets/**/*.glsl !filter !diff !merge text +Assets/**/*.js !filter !diff !merge text +Assets/**/*.json !filter !diff !merge text +Assets/**/*.lensanim !filter !diff !merge text +Assets/**/*.md !filter !diff !merge text +Assets/**/*.rtf !filter !diff !merge text +Assets/**/*.svg !filter !diff !merge text +Assets/**/*.t3d !filter !diff !merge text +Assets/**/*.ts !filter !diff !merge text +Assets/**/*.txt !filter !diff !merge text +Assets/**/*.ui !filter !diff !merge text +Assets/**/*.yaml !filter !diff !merge text + +Assets/**/*.meta !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge + +Assets/**/*.animationAsset !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.animationCurveTrack !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.animationLayer !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.animationMixerLayer !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.audioOutput !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bitmojiModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bodyDepthTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bodyInstanceSegmentationTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bodyMesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bodyNormalsTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.bodyTracking3D !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.cameraModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.cameraRawModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.cloudStorageModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.colocatedLandmarks2DMesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.colocatedLandmarks3DMesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.connectedLensModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.coreMLModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.depthStencilRenderTarget !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.depthTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.deviceCameraTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.deviceTrackingModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.dialogModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.faceCropTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.faceImagePickerTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.faceTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.faceTrackingModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.facelessTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.facemesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.filter !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.handTracking3D !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.imagePickerTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.imgmarker !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.internetModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.leaderBoardModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.licensedAudio !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.location !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.locationCloudStorageModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.locationTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.location_mesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.mapModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.mat !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.matter !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.mediaPickerTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.micaudio !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.microphoneRawModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.motionControllerModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.native !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.objectTrackingTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.prefab !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.processedLocationModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.proxyTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.rawLocationModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.rayTracingSettings !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.remoteMLAsset !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.remoteMediaModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.remoteReferenceAsset !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.remoteServiceModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.renderTarget !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.reverseCameraTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.scanModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.scene !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.scmarker !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.screenCropTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.screenTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.segmentationTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.shoppingModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.textInputModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.textTexture !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.textToSpeechModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.upperBodyMesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.upperBodyTracking3D !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.voiceMLModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.worldQueryModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.worldSettings !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.worldUnderstandingModule !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +Assets/**/*.worldmesh !filter !diff !merge text linguist-language=yaml merge=lens-studio-yaml-merge +# Shipped by Lens Studio +.png filter=lfs diff=lfs merge=lfs -text +.jpg filter=lfs diff=lfs merge=lfs -text +.gif filter=lfs diff=lfs merge=lfs -text + +# Unitree Client Meshes +*.STL filter=lfs diff=lfs merge=lfs -text diff --git a/Spectacles-2-Unitree/.github/workflows/build-and-push.yml b/Spectacles-2-Unitree/.github/workflows/build-and-push.yml new file mode 100644 index 00000000..1714e4b0 --- /dev/null +++ b/Spectacles-2-Unitree/.github/workflows/build-and-push.yml @@ -0,0 +1,80 @@ +name: Build and Push Docker Images +on: + push: + pull_request: + workflow_dispatch: +permissions: + id-token: write + contents: read + packages: write +env: + URL: ghcr.io/${{ github.repository }} +jobs: + build-and-push: + permissions: + id-token: write + contents: read + packages: write + runs-on: ubuntu-latest + strategy: + matrix: + container: + - context: . + file: .devcontainer/Dockerfile + name: dev + platforms: linux/arm64 + - context: unitree-client + file: unitree-client/Dockerfile + name: client + target: runtime + platforms: linux/arm64 + - context: coordination-server + file: coordination-server/Dockerfile + name: server + platforms: linux/amd64 + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + lfs: true + - run: git lfs pull + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.URL }}.${{ matrix.container.name}} + flavor: | + latest=true + tags: | + type=ref,event=branch + type=ref,event=pr + type=ref,event=tag + type=sha + - name: QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: latest + driver-opts: image=moby/buildkit:latest + - name: Build and Push + uses: docker/build-push-action@v6 + with: + context: ${{ matrix.container.context }} + file: ${{ matrix.container.file }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + platforms: ${{ matrix.container.platforms }} + target: ${{ matrix.container.target }} + push: true + pull: true + cache-from: | + type=gha,scope=${{ matrix.container.name }} + type=registry,ref=${{ env.URL }}.${{ matrix.container.name }}:cache + cache-to: type=gha,mode=max,scope=${{ matrix.container.name }} diff --git a/Spectacles-2-Unitree/.gitignore b/Spectacles-2-Unitree/.gitignore new file mode 100644 index 00000000..2761cf3f --- /dev/null +++ b/Spectacles-2-Unitree/.gitignore @@ -0,0 +1,16 @@ +# Shipped by Lens Studio +Cache/** +PluginsUserPreferences/** +Support/** +BackUp/** +Workspaces/** +.vscode/** +jsconfig.json +tsconfig.json +.DS_Store +*.lock +# Shipped by Lens Studio +# Python +.venv +*.egg-info +__pycache__ diff --git a/Spectacles-2-Unitree/ATTRIBUTION.md b/Spectacles-2-Unitree/ATTRIBUTION.md new file mode 100644 index 00000000..5132b697 --- /dev/null +++ b/Spectacles-2-Unitree/ATTRIBUTION.md @@ -0,0 +1,23 @@ +# Third Party License Information + +- This project uses Python source, STL, and URDF files from [Unitree](https://github.com/unitreerobotics/avp_teleoperate/blob/main/LICENSE), originally licensed under the Apache 2.0 License: + - [unitree-client/src/ik/urdf/](./unitree-client/src/ik/urdf/) + - [unitree-client/src/ik/utils/](./unitree-client/src/ik/utils/) + - [unitree-client/src/ik/g1_controller.py](./unitree-client/src/ik/g1_controller.py) + - [unitree-client/src/ik/g1_solver.py](./unitree-client/src/ik/g1_solver.py), modifications licensed under the [MIT License](./LICENSE). +- Python dependencies are not included in the source code, and are gathered as part of the build process for the Docker images via PyPi and conda-forge: + - [aiohttp](https://github.com/aio-libs/aiohttp/blob/master/LICENSE.txt) (Apache 2.0 License) + - [aiohttp-jinja2](https://github.com/aio-libs/aiohttp-jinja2/blob/master/LICENSE) (Apache 2.0 License) + - [asyncio](https://github.com/python/cpython/blob/main/LICENSE) (Python Software Foundation License) - Part of Python Standard Library + - [casadi](https://github.com/casadi/casadi/blob/develop/LICENSE.txt) (LGPL v3) + - [ipython](https://github.com/ipython/ipython/blob/main/LICENSE) (BSD 3-Clause License) + - [jinja2](https://github.com/pallets/jinja/blob/main/LICENSE.txt) (BSD 3-Clause License) + - [mujoco](https://github.com/google-deepmind/mujoco/blob/main/LICENSE) (Apache 2.0 License) + - [numpy](https://github.com/numpy/numpy/blob/main/LICENSE.txt) (BSD 3-Clause License) + - [opencv-contrib-python-headless](https://github.com/opencv/opencv-python/blob/master/LICENSE.txt) (MIT) + - [pillow](https://github.com/python-pillow/Pillow/blob/main/LICENSE) (MIT-CMU License) + - [pinocchio](https://github.com/stack-of-tasks/pinocchio/blob/master/LICENSE) (BSD 2-Clause License) + - [pip](https://github.com/pypa/pip/blob/main/LICENSE.txt) (MIT License) + - [pyzmq](https://github.com/zeromq/pyzmq/blob/main/LICENSE.md) (BSD 3-Clause License) + - [scipy](https://github.com/scipy/scipy/blob/main/LICENSE.txt) (BSD 3-Clause License) + - [websockets](https://github.com/aaugustin/websockets/blob/main/LICENSE) (BSD 3-Clause License) \ No newline at end of file diff --git a/Spectacles-2-Unitree/Assets/Base.png b/Spectacles-2-Unitree/Assets/Base.png new file mode 100644 index 00000000..1634b508 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cfd8423521180c6c746030558b626228586a382de0f6e6623ee8c5183804a3d +size 1370 diff --git a/Spectacles-2-Unitree/Assets/Base.png.meta b/Spectacles-2-Unitree/Assets/Base.png.meta new file mode 100644 index 00000000..16baa3d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 093e6eaf-54cf-48bd-8d5a-346e6dea3dd7 + ImporterName: FileTextureImporter + PrimaryAsset: ! 093e6eaf-54cf-48bd-8d5a-346e6dea3dd7 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture b/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture new file mode 100644 index 00000000..0d50bea0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture @@ -0,0 +1,2 @@ +- ! + PackagePath: "" diff --git a/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture.meta b/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture.meta new file mode 100644 index 00000000..67026e1c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Device Camera Texture.deviceCameraTexture.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Texture: ! 996c6f4e-b2ad-4117-9e3e-3db82e6e97f5 + ImporterName: DeviceCameraTextureImporter + PrimaryAsset: ! 996c6f4e-b2ad-4117-9e3e-3db82e6e97f5 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/Echopark.hdr b/Spectacles-2-Unitree/Assets/Echopark.hdr new file mode 100644 index 00000000..3f52fab0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Echopark.hdr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f718a37e096b94af7cd15a6c6142e7ec0386887b756b9cdced63f1fc71b38d4 +size 1495252 diff --git a/Spectacles-2-Unitree/Assets/Echopark.hdr.meta b/Spectacles-2-Unitree/Assets/Echopark.hdr.meta new file mode 100644 index 00000000..72e7722c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Echopark.hdr.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Diffuse: ! afde1835-875a-4672-9a39-ba23cfd936bf + Specular: ! 2fda0d5e-3f7d-4d0d-a4b5-a911aa775787 + ImporterName: EnvmapTextureImporter + PrimaryAsset: ! 00000000-0000-0000-0000-000000000000 + PackageType: LegacyPackage + PackagePolicy: CanBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ImageQuality: Normal + SpecularImageResolution: Medium + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/Image.mat b/Spectacles-2-Unitree/Assets/Image.mat new file mode 100644 index 00000000..9753c5d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Image.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8e5e83aa-575b-4d41-b93b-dc62968eb2f6 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + - ENABLE_BASE_TEX + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: f7c0ecfc-f7ba-44b8-bd24-62337451798a + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 11d16b8f-d694-4051-b9fb-fd4d097b0cb8 diff --git a/Spectacles-2-Unitree/Assets/Image.mat.meta b/Spectacles-2-Unitree/Assets/Image.mat.meta new file mode 100644 index 00000000..3ac370ea --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Image.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! c412b735-9316-498c-9999-21f28326f2a7 + ImporterName: MaterialImporter + PrimaryAsset: ! c412b735-9316-498c-9999-21f28326f2a7 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Base.png b/Spectacles-2-Unitree/Assets/Joystick/Base.png new file mode 100644 index 00000000..1634b508 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cfd8423521180c6c746030558b626228586a382de0f6e6623ee8c5183804a3d +size 1370 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Base.png.meta b/Spectacles-2-Unitree/Assets/Joystick/Base.png.meta new file mode 100644 index 00000000..3fc20ce2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 2b90fb2b-deb9-498e-8ff6-ce0dbf4ac26c + ImporterName: FileTextureImporter + PrimaryAsset: ! 2b90fb2b-deb9-498e-8ff6-ce0dbf4ac26c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx b/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx new file mode 100644 index 00000000..3d954f2f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:369e11b255c139f4129125b800b5133380e906707414f6184bdc6a7eddbebb24 +size 12396 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx.meta b/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx.meta new file mode 100644 index 00000000..d596dd72 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Cylinder.fbx.meta @@ -0,0 +1,105 @@ +- ! + ImportedAssetIds: + 0edc0b811f1d76e2: ! 651eea3e-e7e3-4658-8b56-3c94c1e58dff + 2fe651d50e3f5cdf: ! 3fbc4387-0b6b-4817-aba6-e17b55bc3221 + 66780cf3a4dcb2b8: ! 81ae0752-a4e8-4a4c-80c4-a382860e8702 + Meshes/Cylinder: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Scene: ! e3215c38-5e1f-4f04-a28b-fe123299612d + ImporterName: FbxImporter + PrimaryAsset: ! e3215c38-5e1f-4f04-a28b-fe123299612d + PackageType: LegacyPackage + PackagePolicy: CanBeUnpacked + ExtraData: + {} + AssetDataMap: + Scene: ! 0ec58c07-d94b-4133-ad47-ed91a948da9f + DependentFiles: + [] + ImporterSettings: ! + UseLegacyImporter: false + WithMaterials: true + NamingConvention: ByCategorySanitize + PersistentIdGenerationAlgorithm: DescriptorBased + AnimationCurveOptimization: true + CustomAnimationSamplingRate: 30.000000 + ImportVertexColor: true + ImportTangentsAndBinormals: true + RegenerateTangentsAndBinormals: false + RegenerateNormalsForSkinnedMeshes: true + ImportBlendShapeAnimation: true + ImportVertexAnimation: true + GeneratePivots: true + TriangulateNURBS: true + UseLegacyFbxLoader: false + CompressionSettings: ! + Presets: + None Compression: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtensionMappings: + mesh: None Compression + Overrides: + {} +- ! + SourceRemaps: + - 0354ea87-c025-440c-9419-6dfc59b9ade2: 1699b635-28a8-420d-94d1-d7cadfa6adec + - 7aa1d913-8f98-4438-9126-310e5510a4f1: 775ed927-8a13-4568-a077-74787a09714c + - a40b3800-3ad6-4bd6-a686-13843fd6bef8: ef917935-7bb5-418a-95d7-16392ddbc33f + - e3215c38-5e1f-4f04-a28b-fe123299612d: 981f13d8-2cc6-4496-99b4-5e8f8d535c64 + SourceState: ! 981f13d8-2cc6-4496-99b4-5e8f8d535c64 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + [] + Mesh: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1699b635-28a8-420d-94d1-d7cadfa6adec +- ! + PackagePath: "" + objects: + - ! ef917935-7bb5-418a-95d7-16392ddbc33f + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 775ed927-8a13-4568-a077-74787a09714c + Components: + [] diff --git a/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat b/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat new file mode 100644 index 00000000..4e3daa51 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 5542ac3f-c80d-43e5-a892-e6f199cfbe85 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.830000} + baseTex: + typeIdx: 9 + value: + id: 4862c6b3-6c6b-4b6d-a323-1fbe4c6ce2a1 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 diff --git a/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat.meta b/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat.meta new file mode 100644 index 00000000..f34286b3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/ImageMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! dcf513cc-3b47-48eb-a7c8-1825fba52216 + ImporterName: MaterialImporter + PrimaryAsset: ! dcf513cc-3b47-48eb-a7c8-1825fba52216 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab b/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab new file mode 100644 index 00000000..a9b40cde --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab @@ -0,0 +1,298 @@ +- ! + PackagePath: "" + objects: + - ! a0d1c19f-3a8c-4c92-a02b-f115e89fb3ce + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + - ! c584c132-37b0-4945-831d-fe91dd59ef35 + Components: + - ! fe131a8f-0219-45ea-ade8-fc0f1d7c48d2 + - ! 22ce32c6-57f8-4526-9f66-6d7d2805d5ae + - ! 9f8f7a3f-199b-40b1-8c46-0869a8c8e457 + - ! 4504672c-47d6-4351-b0f7-bdbcddeefd77 + - ! e2719e11-8f89-4bdb-b462-7fc9315f7ec2 + - ! ea29a1e8-1895-4e61-abfe-6ee850841dd1 + - ! 4eba8cc3-7469-47be-9833-a8e502fe50e8 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + ScriptInputsDefault: + moveSpeed: true + deadzone: true + cardinalWindowDegrees: true + client: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! 25a7a1ab-5e91-4626-8d76-670866dfa5a7 + robotObject: ! 84bafc52-ea01-4f87-a412-867fae0effac + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + moveSpeed: ! 0.000000 + deadzone: 0.100000 + cardinalWindowDegrees: ! 15.000000 + client: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! dcf513cc-3b47-48eb-a7c8-1825fba52216 + Mesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 25a7a1ab-5e91-4626-8d76-670866dfa5a7 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 14.315620, y: -24.865599, z: -37.412357} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 25a7a1ab-5e91-4626-8d76-670866dfa5a7 + - ! e7a4755d-7eb1-47d7-b744-c8e4232212fa + Components: + [] +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.760220, z: 0.000000} + rotation: {x: 90.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 94fb5544-22f6-43b0-a482-ee45d1056712 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! 4504672c-47d6-4351-b0f7-bdbcddeefd77 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: JoystickPlane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -3.230324, z: 0.000000} + rotation: {x: -90.000008, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7bc670b3-df3f-44c6-ae49-73b4ea111638 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab.meta b/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab.meta new file mode 100644 index 00000000..2b15636c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Joystick.prefab.meta @@ -0,0 +1,331 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 8f266568-bb9b-448b-a04a-bf2fdc7f4444 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 8f266568-bb9b-448b-a04a-bf2fdc7f4444 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + ObjectPrefab: ! 34dbacad-f069-49f3-b92f-49aa929aba7f + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: JoystickPlane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -3.230324, z: 0.000000} + rotation: {x: -90.000008, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9b6ea3e9-228c-4cd1-8ab6-9b61ad25092c +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 9134f32e-3f21-4bf9-a3e8-86c7137c9119 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + SourceRemaps: + - 22ce32c6-57f8-4526-9f66-6d7d2805d5ae: b1f81d55-7d96-43c4-bd47-cea32d40b358 + - 25a7a1ab-5e91-4626-8d76-670866dfa5a7: 9134f32e-3f21-4bf9-a3e8-86c7137c9119 + - 4504672c-47d6-4351-b0f7-bdbcddeefd77: ded34553-30b8-4c11-95a2-8195103f8858 + - 4eba8cc3-7469-47be-9833-a8e502fe50e8: 69b05356-b455-44c1-b3b5-9d84463d8230 + - 7bc670b3-df3f-44c6-ae49-73b4ea111638: 9b6ea3e9-228c-4cd1-8ab6-9b61ad25092c + - 8f266568-bb9b-448b-a04a-bf2fdc7f4444: 37f349f8-5806-4c41-ada5-5a69dd788a76 + - 94fb5544-22f6-43b0-a482-ee45d1056712: fb29ff3d-dcdd-48ca-b6bc-034179856966 + - 9f8f7a3f-199b-40b1-8c46-0869a8c8e457: 1a18b875-55b3-4d25-ae27-71a9585a2776 + - a0d1c19f-3a8c-4c92-a02b-f115e89fb3ce: 688b33b7-f62e-4041-a69b-597cc4a28ea1 + - c584c132-37b0-4945-831d-fe91dd59ef35: 81c5793c-c420-4e4b-bc63-b5fc522ed368 + - e2719e11-8f89-4bdb-b462-7fc9315f7ec2: 5bc7100c-5eca-4002-aac1-c3c6830ded4f + - e7a4755d-7eb1-47d7-b744-c8e4232212fa: 03fabfa6-e9bb-4b0f-ad43-2e93c6e76952 + - ea29a1e8-1895-4e61-abfe-6ee850841dd1: d41cd63a-1d4e-4688-8b47-7688a65e004d + - fe131a8f-0219-45ea-ade8-fc0f1d7c48d2: fcb84540-6e86-461e-be43-ff2a1447061b + SourceState: ! 37f349f8-5806-4c41-ada5-5a69dd788a76 +- ! + PackagePath: "" + objects: + - ! 688b33b7-f62e-4041-a69b-597cc4a28ea1 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! ded34553-30b8-4c11-95a2-8195103f8858 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 14.315620, y: -24.865599, z: -37.412357} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9134f32e-3f21-4bf9-a3e8-86c7137c9119 + - ! 03fabfa6-e9bb-4b0f-ad43-2e93c6e76952 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + ScriptInputsDefault: + moveSpeed: true + deadzone: true + cardinalWindowDegrees: true + client: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! 9134f32e-3f21-4bf9-a3e8-86c7137c9119 + robotObject: ! 84bafc52-ea01-4f87-a412-867fae0effac + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + moveSpeed: ! 0.000000 + deadzone: 0.100000 + cardinalWindowDegrees: ! 15.000000 + client: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.760220, z: 0.000000} + rotation: {x: 90.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fb29ff3d-dcdd-48ca-b6bc-034179856966 +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + - ! 81c5793c-c420-4e4b-bc63-b5fc522ed368 + Components: + - ! fcb84540-6e86-461e-be43-ff2a1447061b + - ! b1f81d55-7d96-43c4-bd47-cea32d40b358 + - ! 1a18b875-55b3-4d25-ae27-71a9585a2776 + - ! ded34553-30b8-4c11-95a2-8195103f8858 + - ! 5bc7100c-5eca-4002-aac1-c3c6830ded4f + - ! d41cd63a-1d4e-4688-8b47-7688a65e004d + - ! 69b05356-b455-44c1-b3b5-9d84463d8230 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! dcf513cc-3b47-48eb-a7c8-1825fba52216 + Mesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts b/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts new file mode 100644 index 00000000..fb1e7db4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts @@ -0,0 +1,270 @@ +import { CoordinationClient, FORWARD_SPEED_MAX, LATERAL_SPEED_MAX, ROTATION_SPEED_MAX } from "../Unitree2Spectacles/Scripts/TS/CoordinationClient"; + +@component +export class Joystick extends BaseScriptComponent +{ + @input + joystickObject: SceneObject; + @input + robotObject: SceneObject; + + @input + rightIndexFinger: SceneObject; + @input + leftIndexFinger: SceneObject; + + @input + rightThumb: SceneObject; + @input + leftThumb: SceneObject; + + @input + moveSpeed: number; + + @input + deadzone: number = 0.1; // Small deadzone. + + @input + cardinalWindowDegrees: number = 15; // 15° window for cardinal directions where movement is locked to one axis. + + @input('Component.ScriptComponent') + client: CoordinationClient; + + joystickTransform: Transform; + robotTransform: Transform; + + rightIndexFingerTransform: Transform; //called "index-3" + leftIndexFingerTransform: Transform; //called "index-3" + rightThumbTransform: Transform; //called "thumb-3" + leftThumbTransform: Transform; //called "thumb-3" + + rightHandPinching: Boolean; + leftHandPinching: Boolean; + rightHandPinchingPrev: Boolean; + leftHandPinchingPrev: Boolean; + + startPosition: vec3; + rightPinchStartPosition: vec3; + leftPinchStartPosition: vec3; + rightPinchPosition: vec3; + leftPinchPosition: vec3; + + pinchStartedOnJoystick: Boolean; + + readonly maxSpeed: number = 5.0; // Maximum speed units per second + + kicking: Boolean = false; + + isEditor: Boolean; + + jxSmoothed: number = 0; + jySmoothed: number = 0; + + scale: number = 4; // Scale factor for clamping + + //JOYSTICK POSITION VARIABLES + jx: number = 0; + jy: number = 0; + + onAwake() + { + this.isEditor = typeof require === 'function'; + + print("is editor: " + this.isEditor); + + this.joystickTransform = this.joystickObject.getTransform(); + this.robotTransform = this.robotObject.getTransform(); + this.rightIndexFingerTransform = this.rightIndexFinger.getTransform(); + this.leftIndexFingerTransform = this.leftIndexFinger.getTransform(); + this.rightThumbTransform = this.rightThumb.getTransform(); + this.leftThumbTransform = this.leftThumb.getTransform(); + this.startPosition = this.joystickTransform.getLocalPosition(); + this.createEvent("UpdateEvent").bind(this.onUpdate.bind(this)); + this.createEvent("LateUpdateEvent").bind(this.onLateUpdate.bind(this)); + } + + onUpdate() + { + // Check distance between right index finger and thumb + const rightFingerPos = this.rightIndexFingerTransform.getWorldPosition(); + const rightThumbPos = this.rightThumbTransform.getWorldPosition(); + const rightHandDistance = rightFingerPos.distance(rightThumbPos); + + const leftFingerPos = this.leftIndexFingerTransform.getWorldPosition(); + const leftThumbPos = this.leftThumbTransform.getWorldPosition(); + const leftHandDistance = leftFingerPos.distance(leftThumbPos); + + this.rightHandPinchingPrev = this.rightHandPinching; + this.leftHandPinchingPrev = this.leftHandPinching; + this.rightHandPinching = (rightHandDistance < 2); + this.leftHandPinching = (leftHandDistance < 2); + + var justPinchedRightHand = false; + var justPinchedLeftHand = false; + + if (this.rightHandPinching) + { + if (!this.rightHandPinchingPrev) + { + justPinchedRightHand = true; + // Calculate average point between right thumb and index finger + this.rightPinchStartPosition = new vec3( + (rightFingerPos.x + rightThumbPos.x) / 2, + (rightFingerPos.y + rightThumbPos.y) / 2, + (rightFingerPos.z + rightThumbPos.z) / 2 + ); + // Only set pinchStartedOnJoystick if pinch occurred near joystick + const joystickPos = this.joystickTransform.getWorldPosition(); + const distanceToJoystick = this.rightPinchStartPosition.distance(joystickPos); + const grabRadius = 0.1; // Adjust this value as needed + this.pinchStartedOnJoystick = distanceToJoystick < grabRadius; + } + + this.rightPinchPosition = new vec3( + (rightFingerPos.x + rightThumbPos.x) / 2, + (rightFingerPos.y + rightThumbPos.y) / 2, + (rightFingerPos.z + rightThumbPos.z) / 2 + ); + } + + if (this.leftHandPinching) + { + if (!this.leftHandPinchingPrev) + { + justPinchedLeftHand = true; + // Calculate average point between left thumb and index finger + this.leftPinchStartPosition = new vec3( + (leftFingerPos.x + leftThumbPos.x) / 2, + (leftFingerPos.y + leftThumbPos.y) / 2, + (leftFingerPos.z + leftThumbPos.z) / 2 + ); + } + + this.leftPinchPosition = new vec3( + (leftFingerPos.x + leftThumbPos.x) / 2, + (leftFingerPos.y + leftThumbPos.y) / 2, + (leftFingerPos.z + leftThumbPos.z) / 2 + ); + } + + if (this.isEditor) + { + //editor joystick controls + this.jx = this.joystickTransform.getLocalPosition().x - this.startPosition.x; + this.jy = this.joystickTransform.getLocalPosition().z - this.startPosition.z; + this.jy -= this.joystickTransform.getLocalPosition().y - this.startPosition.y; + this.joystickTransform.setLocalPosition(this.startPosition); + } + + if (this.rightHandPinching && this.pinchStartedOnJoystick) + { + this.jx = this.rightPinchPosition.x - this.rightPinchStartPosition.x; + this.jy = this.rightPinchPosition.z - this.rightPinchStartPosition.z; + this.jy -= this.rightPinchPosition.y - this.rightPinchStartPosition.y; + + //this.joystickTransform.setWorldPosition(this.rightPinchStartPosition); + + this.joystickTransform.setWorldPosition(this.rightPinchPosition); + } + else + { + //this.joystickTransform.setWorldScale(new vec3(3.6, 3.6, 3.6)); + } + + this.jx /= this.scale; + this.jy /= this.scale; + + this.jx = Math.max(-1, Math.min(1, this.jx)); + this.jy = Math.max(-1, Math.min(1, this.jy)); + + print("joystick position = [" + this.jx.toFixed(2) + ", " + this.jy.toFixed(2) + "]"); + + this.calculateAndSendMovement(); + } + + onLateUpdate() + { + const currentPosition = this.joystickTransform.getLocalPosition(); + + // Calculate offset from start position + const offsetX = currentPosition.x - this.startPosition.x; + const offsetY = currentPosition.y - this.startPosition.y; + const offsetZ = currentPosition.z - this.startPosition.z; + + // Clamp the offsets + const clampedPosition = new vec3( + this.startPosition.x + Math.max(-this.scale, Math.min(this.scale, offsetX)), + this.startPosition.y, + this.startPosition.z + Math.max(-this.scale, Math.min(this.scale, offsetZ)) + ); + + this.joystickTransform.setLocalPosition(clampedPosition); + + // Zero out the rotation of the joystick + this.joystickTransform.setLocalRotation(quat.fromEulerAngles(0, 0, 0)); + } + + + private calculateAndSendMovement() { + // Deadzone + let jxNorm = Math.abs(this.jx) < this.deadzone ? 0 : this.jx; + let jyNorm = Math.abs(this.jy) < this.deadzone ? 0 : this.jy; + + const magnitude = Math.sqrt(jxNorm * jxNorm + jyNorm * jyNorm); + + if (magnitude < this.deadzone) { + // If within deadzone, don't move + this.client.sendMovement(0, 0, 0); + return; + } + + // Normalize to ensure max magnitude is 1.0 + if (magnitude > 1.0) { + jxNorm /= magnitude; + jyNorm /= magnitude; + } + + // Calculate angle in degrees (0° is up/forward, 90° is right) + let angleDegrees = Math.atan2(jxNorm, jyNorm) * (180 / Math.PI); + if (angleDegrees < 0) angleDegrees += 360; + + // Initialize movement variables + let forward = 0; + let lateral = 0; + let yaw = 0; + + // Check for cardinal directions (using 15° windows) + const isForward = this.isInCardinalWindow(angleDegrees, 0); + const isRight = this.isInCardinalWindow(angleDegrees, 90); + const isBackward = this.isInCardinalWindow(angleDegrees, 180); + const isLeft = this.isInCardinalWindow(angleDegrees, 270); + + // Apply movement based on cardinal direction + if (isForward) { + forward = magnitude * FORWARD_SPEED_MAX; + } else if (isBackward) { + forward = -magnitude * FORWARD_SPEED_MAX; + } else if (isRight) { + lateral = magnitude * LATERAL_SPEED_MAX; + } else if (isLeft) { + lateral = -magnitude * LATERAL_SPEED_MAX; + } else { + // For diagonal movements, calculate components and yaw + forward = jyNorm * FORWARD_SPEED_MAX; + lateral = jxNorm * LATERAL_SPEED_MAX; + + // Calculate yaw based on how far from forward/backward axis + // More yaw when moving sideways, less when moving forward/backward + const yawFactor = Math.abs(jxNorm) / (Math.abs(jxNorm) + Math.abs(jyNorm)); + yaw = jxNorm * ROTATION_SPEED_MAX * yawFactor; + } + + // Send movement command to the robot + this.client.sendMovement(forward, lateral, yaw); + } + + private isInCardinalWindow(angle: number, direction: number): boolean { + const diff = Math.abs((angle - direction + 360) % 360); + return diff < this.cardinalWindowDegrees || diff >= (360 - this.cardinalWindowDegrees); + } +} diff --git a/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts.meta b/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts.meta new file mode 100644 index 00000000..14bcf25c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Joystick.ts.meta @@ -0,0 +1,65 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! e7e7f978-527b-4ab9-9621-aed369716a15 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + cardinalWindowDegrees: false + client: false + deadzone: false + joystickObject: false + leftIndexFinger: false + leftThumb: false + moveSpeed: false + rightIndexFinger: false + rightThumb: false + robotObject: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - joystickObject: ! 00000000-0000-0000-0000-000000000000 + rightIndexFinger: ! 00000000-0000-0000-0000-000000000000 + leftIndexFinger: ! 00000000-0000-0000-0000-000000000000 + rightThumb: ! 00000000-0000-0000-0000-000000000000 + leftThumb: ! 00000000-0000-0000-0000-000000000000 + moveSpeed: ! 0.000000 + robotObject: ! 00000000-0000-0000-0000-000000000000 + deadzone: 0.100000 + cardinalWindowDegrees: ! 15.000000 + client: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input SceneObject joystickObject + - // @input SceneObject robotObject + - // @input SceneObject rightIndexFinger + - // @input SceneObject leftIndexFinger + - // @input SceneObject rightThumb + - // @input SceneObject leftThumb + - // @input float moveSpeed + - // @input float deadzone = 0.1 + - // @input float cardinalWindowDegrees = 15 + - // @input Component.ScriptComponent client diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab b/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab new file mode 100644 index 00000000..592abbae --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab @@ -0,0 +1,207 @@ +- ! + PackagePath: "" + objects: + - ! 55847278-3293-4af2-9f42-44ea3ffb53ea + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.309025, y: -34.000000, z: -31.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 66df1500-d300-4aad-983d-97255191bf90 + - ! 7f0c59ca-5620-4202-9afb-d0eeb66b95fb + - ! 75cf1d14-7574-4e73-bdbe-6a782f03ce86 + - ! 9ad35435-d450-4cf0-81a4-96a283b4814b + - ! 8120ce6a-1029-4b67-b649-b99d199dc703 + - ! 9c50ae2a-f7d3-40b4-8710-cb0f5b1be02c + - ! c362c261-eae1-441e-b583-166a38382ca2 +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 2de985bb-051f-4e22-b6eb-4177ba1b20aa + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! 55847278-3293-4af2-9f42-44ea3ffb53ea + playerObject: ! 6f721893-d700-4dfd-94b0-99df12fcf240 + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + ball: ! e24cb0c9-bf40-4808-ba9a-570c077dbd14 + playerControls: ! 499f70a7-a91d-4d95-bbd4-209c9506d3f7 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 55847278-3293-4af2-9f42-44ea3ffb53ea + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! 8120ce6a-1029-4b67-b649-b99d199dc703 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab.meta b/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab.meta new file mode 100644 index 00000000..031781f3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickInner.prefab.meta @@ -0,0 +1,235 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! f42cb916-c0ac-4c5a-9bed-324ba16e3750 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! f42cb916-c0ac-4c5a-9bed-324ba16e3750 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + ObjectPrefab: ! 4591f732-033c-4526-bd25-0b24331cb8b9 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! e034657a-4af0-4a1d-a7b6-05f0dae6f323 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 6c997507-e9d1-44cd-9bb5-0a1bd3b4b22b + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + SourceRemaps: + - 55847278-3293-4af2-9f42-44ea3ffb53ea: 6c997507-e9d1-44cd-9bb5-0a1bd3b4b22b + - 66df1500-d300-4aad-983d-97255191bf90: 71e3faba-442d-46d6-b03a-a0ee5ded52d3 + - 75cf1d14-7574-4e73-bdbe-6a782f03ce86: f9ff0622-cab2-4b97-80eb-193aa6695edd + - 7f0c59ca-5620-4202-9afb-d0eeb66b95fb: 511b95fb-df0d-4c9a-8b93-62970c345f86 + - 8120ce6a-1029-4b67-b649-b99d199dc703: e034657a-4af0-4a1d-a7b6-05f0dae6f323 + - 9ad35435-d450-4cf0-81a4-96a283b4814b: 28a93f2f-522b-460d-a3e3-3aef65d3cc62 + - 9c50ae2a-f7d3-40b4-8710-cb0f5b1be02c: 231b0da0-850d-424d-b28c-7b27c6bf5ad1 + - c362c261-eae1-441e-b583-166a38382ca2: cdeafd1d-7884-4d48-b099-eba219acc828 + - f42cb916-c0ac-4c5a-9bed-324ba16e3750: a15d28a1-dd2a-42ee-afe0-60905586ce65 + SourceState: ! a15d28a1-dd2a-42ee-afe0-60905586ce65 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.309025, y: -34.000000, z: -31.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 71e3faba-442d-46d6-b03a-a0ee5ded52d3 + - ! 511b95fb-df0d-4c9a-8b93-62970c345f86 + - ! f9ff0622-cab2-4b97-80eb-193aa6695edd + - ! 28a93f2f-522b-460d-a3e3-3aef65d3cc62 + - ! e034657a-4af0-4a1d-a7b6-05f0dae6f323 + - ! 231b0da0-850d-424d-b28c-7b27c6bf5ad1 + - ! cdeafd1d-7884-4d48-b099-eba219acc828 +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 2de985bb-051f-4e22-b6eb-4177ba1b20aa + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! 6c997507-e9d1-44cd-9bb5-0a1bd3b4b22b + playerObject: ! 6f721893-d700-4dfd-94b0-99df12fcf240 + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + ball: ! e24cb0c9-bf40-4808-ba9a-570c077dbd14 + playerControls: ! 499f70a7-a91d-4d95-bbd4-209c9506d3f7 + ScriptTypes: + "": + {} +- ! + PackagePath: "" + objects: + - ! 6c997507-e9d1-44cd-9bb5-0a1bd3b4b22b + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat b/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat new file mode 100644 index 00000000..9b1607d3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 1d2761c0-a1f3-46b0-90a2-6952fa4db335 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_LIGHTING + - ENABLE_NORMALMAP + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 5e57c669-2619-4caf-b769-1f5e422bb9df + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: a3034842-01f6-48b3-bc04-8c8431f83655 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: 632949d2-aeaa-4d1c-99ca-13eb8485c1e0 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! a897088d-8563-486d-ba79-098666bbca21 diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat.meta b/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat.meta new file mode 100644 index 00000000..f97a001b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickPlane.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! a62af18c-fb3f-4a13-a592-d489294e0864 + ImporterName: MaterialImporter + PrimaryAsset: ! a62af18c-fb3f-4a13-a592-d489294e0864 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene b/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene new file mode 100644 index 00000000..fe55d99a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene @@ -0,0 +1,13946 @@ +- ! + PackagePath: "" + objects: + - ! 00000000-0000-0065-0000-000000000064 + - ! 0005641c-028d-459a-0000-000000014b4d + - ! ff6c151e-214e-4216-8d76-8d4244e2a6e8 + - ! f68f0438-2abc-4fe4-afd7-77fb2758a16d + - ! 70821b0b-a006-4b39-b35a-5a679bec2460 + - ! dc147681-bc27-42cb-83f4-f2fc231e1cfd + - ! e1075a24-89cb-4368-90aa-e14b04dd49ee + layers: ! + userLayers: + [] + HasOrtho: true + RenderOutput: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + RenderPreviewOutput: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + RenderOverlayOutput: ! 00000000-0000-0000-0000-000000000000 + PhysicsRootWorldSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Camera Object + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 00000000-0000-0065-0000-000000000065 + - ! e5553c8a-0b7e-4ef4-92d9-3e1318fb82c1 +- ! + PrefabRemaps: + [] + Name: Camera + Enabled: true + renderLayer: 1 + MipmapLevel: 0 + RenderOrder: 0 + Size: 20.000000 + Near: 1.000000 + Far: 10000.000000 + Fov: 63.541019 + ClearColor: ! + Mode: None + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + InputTexture: ! 00000000-0000-0000-0000-000000000000 + ClearDepth: ! + Mode: Value + Value: 1.000000 + InputTexture: ! 00000000-0000-0000-0000-000000000000 + Aspect: 1.000000 + CameraType: Perspective + DepthMode: Regular + DeviceProperty: All + AspectPreset: Custom + OitLayers: NoOit + RenderTarget: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + DepthStencilRenderTarget: ! 00000000-0000-0000-0000-000000000000 + MaskTexture: ! 00000000-0000-0000-0000-000000000000 + RayTracing: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Lighting + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 00056e79-b066-62ca-0000-000000001406 + - ! 0005641c-028d-4630-0000-000000014b56 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Light + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 40.000000, y: 85.000000, z: 20.000000} + rotation: {x: 70.000000, y: 10.000000, z: 150.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0005641c-028d-463e-0000-000000014b59 +- ! + PrefabRemaps: + [] + Name: Light Source + Enabled: true + renderLayer: 1835007 + LightType: Directional + Intensity: 1.000000 + CastShadows: false + ShadowDensity: 0.440000 + ShadowBlurRadius: 4.000000 + ShadowTextureSize: 512 + AutoLightSourcePosition: true + AutoShadowFrustumSize: true + AutoShadowFrustumSizeExtend: 2.000000 + ShadowFrustumSize: 30.000000 + ShadowFrustumNearClipPlane: 1.000000 + ShadowFrustumFarClipPlane: 1000.000000 + UseEnvMapFromCamera: false + EnvMapFromCameraMode: Auto + UseEstimation: false + EstimationIntensity: 1.000000 + EstimationSharpness: 1.000000 + EnvMapExposure: 1.000000 + EnvMapRotation: 0.000000 + DiffuseEnvTexture: ! 00000000-0000-0000-0000-000000000000 + SpecularEnvTexture: ! 00000000-0000-0000-0000-000000000000 + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + DynamicEnvInputTexture: ! 00000000-0000-0000-0000-000000000000 + InnerConeAngle: 0.000000 + OuterConeAngle: 45.000000 + DecayType: None + DecayLimit: false + DecayRange: 40.000000 +- ! + PrefabRemaps: + [] + Name: Ambient Light + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 65.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 00056e79-b066-62f1-0000-000000001409 +- ! + PrefabRemaps: + [] + Name: Light Source + Enabled: true + renderLayer: 1835007 + LightType: Ambient + Intensity: 1.000000 + CastShadows: false + ShadowDensity: 1.000000 + ShadowBlurRadius: 0.000000 + ShadowTextureSize: 512 + AutoLightSourcePosition: false + AutoShadowFrustumSize: false + AutoShadowFrustumSizeExtend: 2.000000 + ShadowFrustumSize: 30.000000 + ShadowFrustumNearClipPlane: 1.000000 + ShadowFrustumFarClipPlane: 1000.000000 + UseEnvMapFromCamera: false + EnvMapFromCameraMode: Auto + UseEstimation: false + EstimationIntensity: 1.000000 + EstimationSharpness: 1.000000 + EnvMapExposure: 1.000000 + EnvMapRotation: 0.000000 + DiffuseEnvTexture: ! 2013a19b-93c1-4f21-b7ea-876a33550c7b + SpecularEnvTexture: ! d795fd46-e16b-4cb9-8dfb-4ef227298f7a + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + DynamicEnvInputTexture: ! 00000000-0000-0000-0000-000000000000 + InnerConeAngle: 0.000000 + OuterConeAngle: 45.000000 + DecayType: None + DecayLimit: false + DecayRange: 40.000000 +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple Interaction" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 44fcbe2d-f52e-47f4-ab2e-28381068a9bc + - ! 45bc7a90-82d2-490a-aba0-8a319ad59722 + - ! 470c886d-541e-47a6-b5e2-de1e20589316 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -8.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 16.000000, y: 16.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7afaeb92-e743-4ebb-a2c6-df9c16df5075 +- ! + PrefabRemaps: + [] + Name: Path Option C + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 42940185-c3a5-4a9b-b73a-8eb575385679 + - ! 7cbd058a-7032-4245-9f74-7b32af034bb2 + - ! 42ec8912-b42f-4f91-8395-335d0ac423a0 + - ! 8caf4268-d374-49a7-9689-d9405863c584 + - ! e4a334c0-89f1-4fce-bbae-e4fd01256466 + - ! 6e614c30-2b6d-4b3c-a625-ebfa1e1bf580 +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + ring-2: ! 2b9a5b20-6a89-4fd1-906b-e97f4259712f + pinky-1: ! cf2d9e76-9520-473b-8b9b-68ce183d22ca + pinky-3_end_end_end: ! 1353e5b8-fa96-4236-9812-7fd080b04697 + ring-1: ! 7f36a885-824c-4329-8b11-919324b5c881 + RightHandModel: ! 780f2ffa-fc27-462d-85fd-d216d21e774a + index-3: ! d180e208-2df8-4507-8437-213a1fbd5da6 + wrist_to_ring: ! ebf022e3-0fd7-4f48-b695-a86d4509dbfb + index-1: ! 5bd739b3-039d-4f2e-bc80-61fd158ce1aa + pinky-2: ! 7cb41a88-1dcc-444c-8349-a62b24a8e765 + index-0: ! 77f1a5d3-8594-40b5-8085-79f1d46ddd71 + ring-3_end_end_end: ! 07d5618b-22f9-4656-87fd-b0198fa0aeb6 + RightHandMesh: ! 78778cbc-4979-40f8-b213-f0cab136c8aa + wrist_to_thumb: ! 309860a1-e8fd-49a7-8b08-343086fa08dd + index-3_end_end_end: ! a650b8d7-507a-404b-bfe5-9602e915dae8 + mid-3: ! 6229e282-4449-48f3-8ef5-b90c67ba62fd + index-3_end: ! 20841b1c-e2a6-42cf-9bd0-4fd466eae39c + index-3_end_end: ! ce9ff426-cb39-478d-8067-8dea5e623fc6 + pinky-0: ! 050bbf47-8842-4bc2-abe8-7a28fc5c70ab + pinky-3: ! 29d989ad-aee7-43c3-95e0-02735ba7dd2f + mid-1: ! 9827271d-d758-4004-bc20-03cf1e136d1c + mid-3_end: ! 771da37d-9459-45e0-8f98-9538710f0dc5 + thumb-3_end_end_end: ! 75b74ef8-ecbe-4864-bb69-4c09f5be1606 + ring-0: ! bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7 + mid-3_end_end: ! 4696df6f-6058-47bd-8129-72a773a76e75 + mid-3_end_end_end: ! a813a7a6-1822-4279-8348-2c314e6ab150 + RightHandRig: ! a3f4225f-153f-429a-8cd2-aa84d9db52ad + mid-3_end_end_end_end: ! a114455b-6a9f-4990-a3cc-fa88e4a4829a + pinky-3_end: ! 7bb17581-fb13-4afd-9cfb-15d0180ba723 + wrist_to_index: ! dddd8a38-ce19-4f71-8776-9826e6597567 + thumb-3_end_end: ! 9f9bcf5b-6b30-496e-b734-5aa240e969c5 + pinky-3_end_end_end_end: ! 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2 + ring-3_end: ! b297e024-8530-43a8-9271-1d093788af2f + mid-0: ! 0b1bf884-4efd-4b6d-83ac-82540696baec + ring-3_end_end_end_end: ! cb14c3ea-7067-409a-83f3-618dbe55e547 + ring-3_end_end: ! 933ca421-582e-407b-bfc6-206a10cef5f3 + thumb-0: ! 5173a6a1-dbb7-4e12-a52f-a3799a1fea13 + thumb-3_end: ! 9b586360-5bcd-4bd9-9646-5b5ef75f1788 + thumb-1: ! 9f93fce7-edb2-4d42-b09c-939416f49cc0 + ring-3: ! 71450838-42ba-49f9-b33d-58b64a9b54c9 + thumb-2: ! d2c2e4e9-c17c-4ecc-902f-2283f319023b + wrist: ! 826246a6-44ea-4331-85b3-702fa57389fb + thumb-3: ! 1b6d2315-e870-4a05-9817-029318f16b5a + mid-2: ! cfc52ae9-3c49-4c47-8299-82d37cdb1095 + wrist_to_mid: ! a9edf4cd-40ec-4fe4-83b1-2f9439932ef0 + pinky-3_end_end: ! 5da27569-8d52-4e61-a3ab-bb97294d4ce0 + index-3_end_end_end_end: ! 02a86b70-f0f0-41ad-87bd-21c32b796670 + index-2: ! be49fb74-bd52-43d9-8ea6-b79a6965e36d + thumb-3_end_end_end_end: ! 1dc67040-bae9-41b8-960f-b57a94672dfa + wrist_to_pinky: ! cd4ffac9-4a32-4dba-b0a2-db117c38b975 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Recents + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Skin + Enabled: true + skinBones: + {} +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000007, y: 11.453500, z: 0.000008} + rotation: {x: 1.584790, y: -17.344000, z: -21.859100} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cf2d9e76-9520-473b-8b9b-68ce183d22ca + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002793, y: 3.304380, z: 0.000052} + rotation: {x: 1.238250, y: -0.000460, z: 0.010196} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 80b63097-b1ef-4467-bdaa-a0a482172316 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c5f05e5f-4892-44c6-ba72-b885668a23ad + - ! 0c0bfed4-ada4-4bf7-9612-d44c6c5e1090 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000001} + rotation: {x: -0.000081, y: -0.000080, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cb14c3ea-7067-409a-83f3-618dbe55e547 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + ScriptAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + mouseTargetingMode: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + mouseTargetingMode: ! 2.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 68117807-3e5d-4f4a-98bf-aa0d3584d9d6 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.483100, z: -0.000001} + rotation: {x: 1.935390, y: 5.930260, z: 3.282900} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9827271d-d758-4004-bc20-03cf1e136d1c + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _onIcon: true + _offIcon: true + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 00000000-0000-0000-0000-000000000000 + _offIcon: ! 00000000-0000-0000-0000-000000000000 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 4e51c7da-93cd-49bc-92ba-ac1b17778914 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 463accac-e5f2-4ff5-aad3-dd1fe504613a + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[LEGACY] InteractorLineVisual" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3f2dd09b-edbc-4994-85a8-a366bf77ca69 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dcc3ad96-997c-4e0a-94bc-1ae501eb02af + - ! 6c866f4d-00db-4a17-bf53-3dc1708bcce9 +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.166710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000019, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 63462f25-ed20-4163-b0fe-197f3a97f011 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text3D + Enabled: true + RenderOrder: 14 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e6189357-b3eb-4ed5-8a07-593c3328fc24 + Text: HeadlockExample + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + ExtrusionDepth: 0.500000 + ExtrudeDirection: Both + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + ShadowMode: None +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 58cc0b26-acd9-4018-bd05-fcc1bcc6b837 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.549810, z: -0.000001} + rotation: {x: -0.000000, y: 0.176026, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 511aa840-3b12-48da-8eb3-6d4a20316ec0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7d5f6ace-4259-4c08-9283-5ae3414577f0 + Components: + - ! 84db67af-fd9d-4a13-bcdc-78b87676416e + - ! dc1c6207-6fc1-4d5f-b59a-3f69a79b9bed +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: -0.000148, y: 0.000148, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: "[REQUIRED] Core" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ec33c966-ab83-4e2c-9dd1-9abe30a16e47 + - ! 674c121a-0fd0-437d-879c-9ce6b8f935fb + - ! 92490a16-2530-449b-8ee9-f65ff2095dd2 + - ! b27cfdfa-9f62-4102-83e8-b9bedf8c2910 + - ! dd368761-3c9f-4261-afbf-469cb4681d3d + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dc570cd7-2f58-4639-b5aa-49876dd50978 + - ! 10de4b7a-720d-4d96-a283-1e122dff859b +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 0.000000, z: -100.000000} + rotation: {x: -65.090828, y: -16.609848, z: 40.221401} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! ee21d19f-e0a5-49cf-aaaa-4e8b8018bc7b + Components: + - ! a0ff9305-b2fc-4a9a-9ec7-2c9d75c8cc52 + - ! 681c55d2-59fd-4c3c-99d0-d7aaa2f779b7 + - ! a3ef195a-5bdc-4d96-a4ad-9d149a2f4d5e + - ! 62f3a8e2-ac5a-4ba7-83b3-cac1610a7330 + - ! 7a2899c3-b02c-4f81-9a90-ed8511366a54 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.672431 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 359497a3-5746-4d6d-ad9b-2da791af7c71 + useGlowMesh: true + glowRenderMeshVisual: ! 20ce429e-ff7b-42d7-8363-322863bfded1 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.009104, y: 2.837160, z: -0.000745} + rotation: {x: -88.447800, y: 0.630570, z: -5.443090} + scale: {x: 1.000000, y: 1.000000, z: 0.999998} + hasSegmentScaleCompensation: false + Children: + - ! 7d7953db-e981-48fc-b8af-77040f8455cd + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: -6.500000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2a571854-9c1a-4e6f-9965-d60156d26d84 + - ! 92737940-b030-4998-9544-b7191c1c1cd2 +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.122509, y: 3.547690, z: -0.000037} + rotation: {x: -119.537003, y: -11.132400, z: -6.501390} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9b586360-5bcd-4bd9-9646-5b5ef75f1788 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! cf4d228b-cd28-48c1-962d-e1b9c5869f60 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 271b74cf-8459-4dd1-83a4-91af22fc6f5f + meshHoverMaterial: ! 74679e29-9817-463b-9427-ffff4cccb602 + meshPinchedMaterial: ! 43cbc95f-b089-4e59-a639-ca3950ebd1b5 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: GridContentCreator + Enabled: true + ScriptAsset: ! ad83ff54-844d-49a8-9102-f568a9d291c3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + itemPrefab: ! 642b5216-980f-4be9-9593-16aa50bc54ca + itemsCount: ! 30.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.824800, z: 0.000000} + rotation: {x: -4.158420, y: -5.389360, z: 8.544330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e117ed6-6fbe-4edb-941c-63a96b698e39 + Components: + [] +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 20a44568-f561-4cda-bbbe-617352fde4cb + knobObject: ! e4ed526a-097a-49f6-b9ee-6e975ca6aad0 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! eb3812be-7e6b-41c8-b613-68c8fb3b6f13 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 574d9ee8-f2a9-4ada-8275-b39f6b651b06 + knobObject: ! b7fba43c-452e-419c-b421-7f9ed959fc9d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Rocket Parts + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 120 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002904, y: 3.650310, z: -0.000110} + rotation: {x: -2.676430, y: -0.000566, z: -0.015133} + scale: {x: 0.999999, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 72ba5fa0-3395-495c-8d87-22bc85f50855 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: -0.000002} + rotation: {x: -0.000039, y: -0.000040, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ce9ff426-cb39-478d-8067-8dea5e623fc6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c3e60476-e9ab-43b7-bc77-52de2f551ea0 + Components: + - ! 36586694-5947-43fe-9596-906825de509d + - ! cc59c548-1073-432f-a3f3-f7c64e11ed14 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 86cd1c89-4acd-46a5-9300-bf400950a160 + knobObject: ! a0358279-a981-46bc-b610-1f660aa06e5c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: false + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: left + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 246fae23-9f27-438d-954f-024cd1be0413 + sliderMax: ! 20cdf887-c102-42c6-a77e-e6bccd3b3ffa + _sliderKnob: ! a0358279-a981-46bc-b610-1f660aa06e5c + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Platform + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -30.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.000000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2f8e0f36-5c12-4ac3-b10c-750f77d595d0 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a89f456c-11a1-43fc-bfa8-912646e3efd9 + Components: + - ! 2aff7c6c-53f4-430b-8c02-cf513f22ac46 + - ! 70021aba-1bd8-4e46-80a7-8fc3bf227371 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 0572c44a-f705-46f8-8434-a4a8a356aaa5 + useGlowMesh: true + glowRenderMeshVisual: ! 68117807-3e5d-4f4a-98bf-aa0d3584d9d6 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ee5a38f8-6b3c-425a-90e8-babde063e515 + Mesh: ! 3e3dc67e-f8de-4502-b790-51fa5c73c19b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! ab8ba6a3-368b-439b-bc27-0f396e4ce6eb + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Controls + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 574d9ee8-f2a9-4ada-8275-b39f6b651b06 + - ! ae1918ba-2448-469a-b337-76e5a4816f4c +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008174, y: 2.218150, z: 0.000077} + rotation: {x: 84.965103, y: 6.336930, z: -173.675003} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7bb17581-fb13-4afd-9cfb-15d0180ba723 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 400016ba-897b-4f06-8668-db883d28f9a9 + Mesh: ! e773364b-808e-4165-96b2-285eb99a10bb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Size: 0.660000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001204, y: 3.309390, z: 0.000044} + rotation: {x: 0.145073, y: -0.000050, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 71450838-42ba-49f9-b33d-58b64a9b54c9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + showFollowButton: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 31.000000, y: 40.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: false + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.192331, y: 6.274080, z: -6.174470} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1b99283b-6388-4d39-a423-7be97ff2f32d + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 13 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ab483a45-8677-4f11-8cd0-5c5d4a239a94 + Mesh: ! e7bb3308-12a7-4fa8-93b1-14b414b79f5a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! dfb8556d-a943-41b2-a69f-1a525c358172 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6d4e14b0-90fb-47b0-8368-e3cb543772be + - ! 8a56e0cc-2f49-467e-a7ba-d03a823fdfd7 +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 27.434401, y: -41.097198, z: -59.864601} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5173a6a1-dbb7-4e12-a52f-a3799a1fea13 + Components: + [] +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000001, z: -0.000001} + rotation: {x: -90.000000, y: -0.000000, z: -0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9f2b3f06-77a1-4255-830d-ad50801287bd +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + mid-3_end_end_end_end: ! f9d02a8c-71a4-411f-a21e-a7b3329c62d6 + LeftHandRig: ! 531e560d-ffa5-433d-8224-6c252eb6a9bb + ring-2: ! 74914d99-aae6-4a1c-b4ec-d949b2a9253c + LeftHandModel: ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + pinky-1: ! 05ab905d-7685-4e29-9db5-9042078af2d6 + pinky-3_end_end_end: ! dcf6aa57-0caa-4b44-a73b-2e33da4f1428 + ring-1: ! 7e117ed6-6fbe-4edb-941c-63a96b698e39 + index-3: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + wrist_to_ring: ! 2d1055e9-e5d5-49f7-8955-de8f46da0f6a + index-1: ! a72bed4c-f7e3-4691-93f3-d06d66d75dd0 + pinky-2: ! 80b63097-b1ef-4467-bdaa-a0a482172316 + index-0: ! e9344e0a-57f1-4226-9a18-a84052078b1b + LeftHandMesh: ! 31df5cf9-9877-4359-9161-92964449a557 + wrist_to_pinky: ! eb361989-1d4a-41f7-a205-235ce6f4e3b9 + wrist_to_thumb: ! 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f + index-3_end_end_end: ! f3c8087e-8414-4601-833d-96cf682f94d3 + mid-3: ! 72ba5fa0-3395-495c-8d87-22bc85f50855 + index-3_end: ! 7d7953db-e981-48fc-b8af-77040f8455cd + index-3_end_end: ! a53cac7a-4a63-4351-a6da-b868ffac9c0a + pinky-0: ! 50f48cde-a492-4587-8b76-26cff1adec60 + pinky-3: ! cea83226-8c66-44d7-895a-2480d9cc1c35 + mid-1: ! 850751ef-604a-41bc-a846-0701b76493b1 + thumb-3_end_end_end: ! 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a + mid-3_end: ! 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e + mid-3_end_end: ! 63462f25-ed20-4163-b0fe-197f3a97f011 + ring-0: ! 1b99283b-6388-4d39-a423-7be97ff2f32d + pinky-3_end: ! b2d002f5-2b50-4f66-8c0d-93d5dba56556 + wrist_to_index: ! f154d1c1-2595-4578-acc2-6872637af31a + thumb-3_end_end: ! d9e2d13e-9f8c-4798-83f1-83fed0cdb757 + mid-0: ! 711f9787-d880-4475-8f0a-0cf6b2492a6b + ring-3_end_end_end_end: ! 27db1592-a7a2-4e26-b369-afc71511fb9e + ring-3_end: ! e8194f5f-aab4-4dff-8e59-92d2aaf9c042 + pinky-3_end_end_end_end: ! 162925ed-6a4c-401a-a521-86902851061f + mid-3_end_end_end: ! 8dbfcb2b-c189-46eb-960f-45c157d8484a + thumb-2: ! a3ea66da-0ca8-4958-8d69-6f5045fa706c + ring-3: ! 4971d6a8-a5fe-431e-b815-07883d1bd9b4 + ring-3_end_end: ! 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3 + thumb-0: ! 6480de4a-e83a-4ebf-919e-d73bc4fd2eee + thumb-3_end: ! 411b54bc-1db6-4fe9-908b-1f4f0a372ce0 + thumb-1: ! 8e8470af-1ad4-4317-96d6-2bd90d653cbb + wrist: ! 821f1d70-8d79-44db-bc8b-fabf613822c0 + thumb-3: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + mid-2: ! 1f2cf37f-fd91-492c-a63b-884a08cd9215 + wrist_to_mid: ! 86412b42-c0cf-4fc3-a8a2-fe90221abc59 + index-3_end_end_end_end: ! 691be975-a6fd-42b9-a51a-bcdeebedb743 + index-2: ! 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91 + ring-3_end_end_end: ! 66d9ff94-deb4-4e42-bc41-0182a168c169 + thumb-3_end_end_end_end: ! 511aa840-3b12-48da-8eb3-6d4a20316ec0 + pinky-3_end_end: ! 3f428eaa-6547-40ec-865e-50071201a35e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c2708339-9d3b-4cb9-9020-f226fbffaa73 + Components: + - ! a6a28de7-2cc3-4d68-a985-66f0fa9c4164 + - ! e769c593-4515-4020-a2bf-11dd93208bc4 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! 03cb0a5e-3e67-4f89-bc12-910bc3c64ccd + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 44fcbe2d-f52e-47f4-ab2e-28381068a9bc + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 246fae23-9f27-438d-954f-024cd1be0413 + - ! 20cdf887-c102-42c6-a77e-e6bccd3b3ffa + Components: + - ! a6460eae-c017-41cd-8937-2c7b9df6c62b +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a420efdf-55b7-41cd-8bb5-89bc9e34d8f4 + - ! 66258ab8-1a60-4dc2-aee5-820ac8efc2e0 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 52a3f271-30a0-4e9c-9f47-c80145bab1b2 +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: -0.000003} + rotation: {x: 0.000050, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! dcf6aa57-0caa-4b44-a73b-2e33da4f1428 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008350, y: 3.222920, z: -0.000875} + rotation: {x: -0.656684, y: 0.000193, z: -0.059364} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b4b364af-ee41-4c86-a1ba-a055da762816 + Mesh: ! eb9c4a4a-8795-4ce9-9f28-3fa5870debeb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: -0.000001} + rotation: {x: -0.000121, y: 23.491301, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d9e2d13e-9f8c-4798-83f1-83fed0cdb757 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 08fc906c-78bf-45df-99f5-35e77aea225d + Components: + - ! 0572c44a-f705-46f8-8434-a4a8a356aaa5 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 09db06bf-3b9e-41dd-b6a0-a7da122ffade + Mesh: ! 41ed7fd3-6772-4318-9758-7be2e92a7d59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Mesh" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 10.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cdb2e0d6-79db-45a6-8973-928bf679f9f8 + - ! 5a4a6c9d-5f14-442c-a49a-8be3c0c22f83 + - ! 39a12ac7-a32e-41e8-bc50-2e10f187f2b0 + - ! 3ce0edb2-6916-4124-a47a-c94e3b9cab61 + - ! f2925123-9c0e-4025-8db9-c72926964a10 + - ! 1208900c-b1bf-459d-b7ae-c9ce081d8a33 +- ! + PrefabRemaps: + [] + Name: HandVisuals + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b55b19ef-83c9-4922-aaea-ded86b65a663 + - ! abb42942-9861-46af-946b-236bb527035f + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! dcc3ad96-997c-4e0a-94bc-1ae501eb02af + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Box" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -6.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 47539171-a347-48fe-ae7a-cc4b06f94f5f + - ! 65d1468b-ad6c-4b28-a742-9881b25ef2dd + - ! 721fb100-9532-48c3-b61d-c6e47f142e20 + - ! 03cb0a5e-3e67-4f89-bc12-910bc3c64ccd + - ! 38b50117-4aa1-4881-b52c-89d62c10a6ec + - ! cf16465a-48d6-40af-9531-15312d8ec38b +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000001} + rotation: {x: 0.000103, y: 0.000102, z: 0.000010} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a813a7a6-1822-4279-8348-2c314e6ab150 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f6490bde-080e-4365-b78c-72954ee76228 + - ! cd9e68dd-f5be-4988-b4a7-d75258adec0b +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Sphere" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -22.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 631a3ca0-0ec9-42ba-a841-c09bea810ac9 + - ! 092a9f85-af06-4b7f-968a-dfc3f683238d + - ! ecb3ef5b-0458-4995-994d-aeb197dac3c6 + - ! ab8ba6a3-368b-439b-bc27-0f396e4ce6eb + - ! 297edb80-1ef8-4527-91d2-2f1a19657582 + - ! 117e13c7-61de-47a8-893f-951f91b0534a +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001444, y: 2.703710, z: 0.000020} + rotation: {x: 88.973000, y: 4.975880, z: 4.973150} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e8194f5f-aab4-4dff-8e59-92d2aaf9c042 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 82077845-5d34-41ca-8a29-b1b1e48a5f8a + - ! fc150902-4b28-4b98-a419-1f0b2085126f +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 17.000000, z: -100.000000} + rotation: {x: -41.182346, y: -19.682274, z: 2.537930} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9e4623b7-d7f6-430b-bef2-1cc4a68ffdf2 + Components: + - ! ee29bf94-3e0e-428f-aabc-b6b910fb7db3 + - ! 31372144-baea-47d1-afd2-ed88fb7e2683 + - ! 0d51e23e-412e-427e-ae9e-b6ec501399bc + - ! 8c37b96f-c1b2-4f46-a25b-ed6861f2cb91 + - ! 3769366f-4444-45f8-81e8-f14b3c8a0645 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e855f2a-4343-491e-bcd1-fce3bac65aeb + Components: + - ! a4ff8efb-cb3c-4ef4-b0cb-5154d4ef58c0 + - ! 5aae6971-5857-4c8f-a5ef-c45d733acbb4 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 5d1d6397-ae85-4e5f-ab2c-6cce45791d26 + Mesh: ! d5389096-6ff6-4687-a39d-88838ca6ce61 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 7d2c6118-bccb-4bc2-88cf-97a6b5513a3b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 58619b05-f4de-4b2e-87a7-5d2e3975e656 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 16323e0b-43a3-431f-b1f0-60029ae56ca5 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000004, y: 11.453500, z: 0.000011} + rotation: {x: -10.793700, y: -13.884800, z: 21.429600} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 05ab905d-7685-4e29-9db5-9042078af2d6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 299e30e7-fb5d-4990-96fc-6d7fd24e5f99 +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5d2ffe4e-a3da-4dec-9bfe-d8d4271b8df0 +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000009, y: 4.399180, z: 0.000004} + rotation: {x: 1.097870, y: 44.900902, z: 1.556590} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f93fce7-edb2-4d42-b09c-939416f49cc0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: true + ScriptAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + ScriptInputsDefault: + _beginColor: true + _endColor: true + lineWidth: true + lineLength: true + lineStyle: true + shouldStick: true + _interactor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + lineMaterial: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + _beginColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _endColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + lineWidth: 0.500000 + lineLength: ! 160.000000 + lineStyle: ! 2.000000 + shouldStick: true + _interactor: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + - ! 821f1d70-8d79-44db-bc8b-fabf613822c0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7f82b210-b438-4633-853e-6f804c2638bb + Mesh: ! 7ba378bf-39c6-4345-acbf-9e09fff8deaa + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + Toggle Off + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 05939801-596e-411f-bd24-9fbc171bc0e2 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eb3812be-7e6b-41c8-b613-68c8fb3b6f13 + - ! ee02bda4-457d-4b91-9243-32cf461a5f92 +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5ecb3e1b-71f7-4147-a9b7-e393c0012648 + - ! 7ede0b47-3e67-481b-adec-2841a1651a87 + - ! 12e31068-8e57-41e3-8ac5-c9a99f26633f + - ! fcedcd16-8d68-488c-92cf-8fc3fb8e929e + - ! 632cca84-19fe-4886-8627-21a46a150dd2 + Components: + - ! 8de4606b-d030-4494-93d0-78dcf4e89ee7 +- ! + PrefabRemaps: + [] + Name: rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 5.731080, z: -2.724091} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.500000, y: 0.500000, z: 0.500000} + hasSegmentScaleCompensation: false + Children: + - ! a6e780b3-03cb-49aa-8d53-83150b2bd5d6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 4c4e9a6b-53dd-4a6b-8312-ea20dd40ff2c + _offIcon: ! 3b061257-5dfb-4e90-b31c-803ec12f595d + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ShowPlatformToggleButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.850000, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.150000, y: 1.150000, z: 1.150000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b3f6fd6f-4d32-4d30-ab3a-893f7e77546f + - ! 525d0fdd-36a2-4565-9996-219b72385dc5 + - ! 0bcbfbe9-9e47-4eb6-add1-546001a963ac + - ! 18dc05a5-21f9-4650-a9c0-c75058cc3ec2 + - ! 3bb57980-131b-4baf-851e-391c60970a75 + - ! 67283259-079b-46d7-a56c-c16f2df4367a +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -40.000000, y: 0.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 54575843-0da1-49ad-9522-0a9f80441c5b + Components: + - ! 6408b356-a940-4216-803e-02ae7f88a425 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Center + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! c4c75723-2bdc-433d-add0-da9d609b0f2f + - ! fae74c4b-9de8-469f-9c4d-9b8447f28821 + - ! 46ffb5eb-4516-42f9-a865-7f8555cfd9da + Components: + - ! 14013079-8453-4103-8404-1c2f9aee8e4a + - ! 2a0898f0-243a-4d3e-b9fa-8cf392c8db15 + - ! 4b1f1d0c-a1a7-4895-af8e-7b964d486578 + - ! d735f2c4-df3a-46aa-9406-a962db6277e6 + - ! 53c3b2b7-1cf2-479d-bcba-9527b9af5179 + - ! 67d99ead-55e0-40c1-9319-f829b0b5274f + - ! fc5d27fb-e846-4e23-b1e7-8b68f2054d5a + - ! d5a99a27-d079-430b-86ef-2ad6c533f962 + - ! f763750e-d14c-4749-88e9-74125df2d29d +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 0ed2cadb-20f7-42de-b689-d3a7be59d6d8 + Components: + - ! e9a27e62-d022-4adc-807d-d55d896a4742 + - ! 74d37439-a2c5-4936-bd7e-146ad61f3b29 + - ! 767704e3-511e-4e8e-9d9e-9f375398bbbc + - ! e126f97f-02aa-4ff3-b7e0-c00afa850a2b + - ! 11e4061b-77da-4925-9cfe-6347b3bcce40 + - ! c4b1a1e6-7665-4e82-989c-66a8fab1e47d + - ! 60322f26-9917-4e2a-bd56-581947d84852 + - ! 9ee13996-ea94-40aa-91c1-44c14a55384d + - ! 4559b691-d3dd-4d97-b9ee-e75217f18d3c +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + handType: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: right + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c73c04ca-7c3c-4e28-b9c0-d2c66644aef0 + - ! c79fd486-6a0a-47f5-9546-2725f694a92f +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Convex: false + Skin: ! 00000000-0000-0000-0000-000000000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: false + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 21dd5d7f-9153-45b1-a73d-f18313b86363 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e3ae6904-21e2-4337-99d4-8425ed9aea30 + - ! a5085698-9e91-491f-be4e-030b54c684ea +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.017495, y: 3.481400, z: 0.000180} + rotation: {x: -8.118590, y: -0.000575, z: 0.000047} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! be49fb74-bd52-43d9-8ea6-b79a6965e36d + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[EXAMPLE] Rocket Workshop" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7d7a7faf-c376-49fc-a67b-0b905d3f561e + - ! 5127a290-6a9d-44a0-83bd-06e30f3fc653 + - ! f9e7eaf6-421b-495b-9be1-066e9c0dfcee + - ! dd09b40b-0105-4ecd-be01-30b393f470dc + Components: + [] +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + ScriptAsset: ! 85cb5de9-5fbb-4fbd-9775-2ac32bd619fe + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocket: ! 8cbf86dc-678e-4587-9018-24c77fcb87ba + allRocketParts: ! + - ! 390ee0cb-1e60-4d19-8b40-1268800c64bc + - ! a9931968-3294-457d-b5f4-67213a87aec0 + - ! f1f20f41-b943-4d16-9ec2-8b3047cfe6fc + - ! f8c6c126-d1c9-46e6-965f-f185cb98ee55 + - ! 79343b52-0148-40f3-b5ee-59276ae43e7c + - ! 90f56253-e16e-40b6-9a7b-207dc3b162e7 + - ! 11174f6e-5467-4bf7-a4ec-be4b4e11d888 + - ! 255bac26-326b-4045-8f1e-04c78eabb8b4 + - ! 9bb44e42-24ca-4d39-87d2-41596d8f05a4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Show Platform + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 87096967-a3bc-4d41-b656-a7c1fcc611d1 +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000050, y: -0.000056, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1353e5b8-fa96-4236-9812-7fd080b04697 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2c726df3-cfa3-4978-b146-a95fd5824626 + - ! 6ac585e2-813f-4594-b268-6e15f5bf48b6 +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 187c0993-895b-43ef-bc71-574cb1ee68ee + - ! c6493c14-cfc3-477b-9afa-7bbf6fda80b0 +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4ef466ba-05b2-4721-926d-f1c7cb84f6ce + - ! de34385c-1796-499f-a145-30de42478770 + Components: + - ! 036512ed-bf6e-400e-a46d-10f636b6e5c3 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.122141, y: 3.547710, z: 0.009542} + rotation: {x: -59.788200, y: 5.800900, z: 165.218002} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 411b54bc-1db6-4fe9-908b-1f4f0a372ce0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.010478, y: 3.166710, z: 0.000270} + rotation: {x: -86.458298, y: -5.335180, z: -5.675670} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 771da37d-9459-45e0-8f98-9538710f0dc5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch! + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.050000 + meshVisuals: ! + - ! c28c16aa-b964-4fb3-b0f2-7f9ca2ba897a + - ! 300b14cd-cae3-4ee6-ae39-700f003d85da + - ! 4f6d1d86-5d52-4d48-a192-3841b4dfeca7 + - ! 432ab8d2-ba1b-4223-a404-74110d12bba8 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: -7.000000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 40.000000, y: 40.000000, z: 40.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a4c95fe5-9113-4626-9604-b71973fb5abe +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: -0.000003} + rotation: {x: 0.000035, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8dbfcb2b-c189-46eb-960f-45c157d8484a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000005, y: 4.399180, z: -0.000010} + rotation: {x: -1.007350, y: 44.900501, z: -1.551620} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8e8470af-1ad4-4317-96d6-2bd90d653cbb + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 463accac-e5f2-4ff5-aad3-dd1fe504613a + - ! 1bfa66da-982b-4117-a961-00f1c7d941a4 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Rocket Holder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9e4589cb-dc87-435e-a8b6-c3ec7013e095 + Components: + - ! 04e121c2-eda3-4027-99d5-98b89d60a800 + - ! ab2efbdd-f11e-4691-bafc-7325dd21c9ce +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 27db1592-a7a2-4e26-b369-afc71511fb9e + Components: + [] +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 1 + renderMeshVisual: ! b3f6fd6f-4d32-4d30-ab3a-893f7e77546f + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 6b4d1ad8-50d3-4889-9613-534d1419b60b + meshToggledHoverMaterial: ! bfb514bb-32ed-4bf6-8838-1d4b52a8878e + meshToggledIdleMaterial: ! 51d47a79-fa9a-457f-a979-7b3c7756d6be + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 93ccce6d-acaf-463c-a766-245dfa12e12c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 22e40d6c-4405-4a2f-9eda-9f5e0d425a75 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Flight Speed + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ExtendableCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -17.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fad9a75c-3477-49fe-8f5f-bc74206d039b + - ! 74981c66-edd9-4260-a7b2-61bbf6064923 + - ! 4ffab695-3859-4b88-9c5d-0b95cb5dcd91 + - ! 2cb8596e-593d-4256-8a62-eef3e0da7ea9 + - ! 7d2c6118-bccb-4bc2-88cf-97a6b5513a3b + - ! a7b6d8d2-7c2a-48d2-aaaa-ae84d5f350b0 + - ! e3ae63cf-561e-4b6f-b2ac-fd0ae204da18 + - ! 7deecf52-223d-4f77-ac95-fa2b779f5f09 +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ddef3800-9018-4fe0-bbd1-a0e1b8df58ac + - ! 42157a2f-0b27-4a7f-bfbe-a7102b5d1773 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000025} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 66d9ff94-deb4-4e42-bc41-0182a168c169 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Toggle On + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 42940185-c3a5-4a9b-b73a-8eb575385679 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 8d858ff6-aa23-4863-b2df-a5af56b736da + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: LeftHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 531e560d-ffa5-433d-8224-6c252eb6a9bb + - ! 31df5cf9-9877-4359-9161-92964449a557 + Components: + - ! 32346fd9-8168-4666-87d9-78060a1ebed2 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScrollButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: -90.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c9cd2679-ba09-4f0f-98d7-ec3140e249c7 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Robot + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.483000, z: -0.000001} + rotation: {x: 1.265800, y: 6.113890, z: -3.274570} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 850751ef-604a-41bc-a846-0701b76493b1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001444, y: 2.703720, z: 0.000001} + rotation: {x: 88.027298, y: -5.497920, z: 5.333360} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b297e024-8530-43a8-9271-1d093788af2f + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Right + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 65833bb8-54ce-423b-a863-d059e467bb42 + - ! 4c4e9a6b-53dd-4a6b-8312-ea20dd40ff2c + - ! 3b061257-5dfb-4e90-b31c-803ec12f595d + Components: + - ! eb1e4612-0df6-4ade-a76e-06418f7ea742 + - ! fb8803fd-f4f0-41f1-ae2b-935e1724b9f2 + - ! 585355bc-41fa-43f3-9700-f8c951fac340 + - ! 5613bfc0-c769-4833-99ea-58239d74e1f4 + - ! f5f034a0-d503-4083-8bda-b0dc37c1e8bd + - ! 0e5e12ff-635f-49e3-be00-ebf5900ea4ec + - ! a24709e6-9797-4a70-aa6a-d81e0fd831a0 + - ! 0d8fb57f-24dd-4dfa-b259-8368eb612905 + - ! 1e4b5d84-db2e-42c4-9cdb-1fa4a98ae5c9 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Radius: 1.300000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 45bc7a90-82d2-490a-aba0-8a319ad59722 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.010479, y: 3.166700, z: 0.000210} + rotation: {x: -87.477303, y: 5.565590, z: -5.001890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e + Components: + [] +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ea4f3347-9719-415f-a3de-b0d5707909ed + - ! 1e2ce68d-b24a-45bb-8072-485a4fd9c454 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 15.000000, y: 23.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: true + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractorCursors + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fc6a94ee-23d6-4637-a73b-30ac1b571eca +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a9993c60-2bf2-4062-bc65-902e1a421c4d + - ! bfbc951a-f9ae-4621-976e-7894a79478ac + Components: + - ! 87733319-b91f-4989-a00c-9e48c2b2f8bb +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001204, y: 3.309410, z: 0.000061} + rotation: {x: 0.145060, y: 0.000496, z: 0.002001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4971d6a8-a5fe-431e-b815-07883d1bd9b4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 68ad7faa-9aea-44b5-b204-85da6adb9bc9 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b9399f57-3264-4290-a881-1002961c0426 + - ! 131fc99a-a532-4e38-8e6b-dea54aabe422 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: -0.000002} + rotation: {x: 0.000000, y: 0.000028, z: 0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1dc67040-bae9-41b8-960f-b57a94672dfa + Components: + [] +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f4029e40-76bf-4921-b70b-e4ce76a7bac1 + - ! 6b376b45-f8ef-456d-b8cd-673410d85157 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000002} + rotation: {x: -0.000207, y: -0.000205, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4696df6f-6058-47bd-8129-72a773a76e75 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000003, y: 11.787900, z: -0.000003} + rotation: {x: 9.215320, y: 17.707500, z: 16.168699} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5bd739b3-039d-4f2e-bc80-61fd158ce1aa + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a3f4225f-153f-429a-8cd2-aa84d9db52ad + - ! 78778cbc-4979-40f8-b213-f0cab136c8aa + Components: + - ! 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: RightHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! de62f5f3-2f86-4c98-b357-a44d603496f1 +- ! + PrefabRemaps: + [] + Name: ToggleButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 542c8e99-dd30-44cc-9092-ced77bc4d54c + - ! 75f06a71-2897-421b-ad76-29a8983210d0 + - ! c4785331-76b4-453b-92f9-c742c70bb179 + Components: + - ! 87da1ae3-6df0-4afa-8f7f-36d2537312e5 + - ! 288d782c-f80e-4745-bc72-6324728d9ad9 + - ! 969f2fda-6380-4c12-a720-cc66f27af219 + - ! 81841dbe-6094-46d2-8036-d4fe8d5e3d63 + - ! 1c90c220-a570-4dfd-8290-781a6959eea1 + - ! 93236546-1c9d-4e45-80ef-f91fc4d8b825 + - ! ebf29903-e778-4ba0-b2bd-8925aa9f4872 + - ! cd908cfd-824a-41cc-9781-34ee591c98cf + - ! f3ab0ac5-9a4f-4928-a3f2-e2c9ac4d084f +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 1766b243-ecbd-49ab-99a0-0a126bf505c7 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000001} + rotation: {x: 0.000101, y: -0.000115, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5da27569-8d52-4e61-a3ab-bb97294d4ce0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.005382, y: 2.681950, z: -0.000140} + rotation: {x: -5.666390, y: -0.000025, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 29d989ad-aee7-43c3-95e0-02735ba7dd2f + Components: + [] +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 15 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 00000000-0000-0000-0000-000000000000 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 12fccd0a-94c9-4e79-a54a-0f2e4018bde5 + - ! 1b96a171-2f8c-409e-9d0a-91812193d330 +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: -0.000113, y: -0.000000, z: -0.000031} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a53cac7a-4a63-4351-a6da-b868ffac9c0a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Objects + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c88da200-d694-4e27-b433-47aa0ae56ce9 + - ! 6694ff7c-c4b6-48dc-ac2c-765fda9db34f + - ! 245cb741-c1b9-4805-b7c1-793674f0d7ed + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002705, y: 3.534420, z: -0.000008} + rotation: {x: 1.238040, y: -0.000494, z: 0.017060} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 74914d99-aae6-4a1c-b4ec-d949b2a9253c + Components: + [] +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3308bd23-8a56-4adb-908b-8c96a9d634dd + - ! 6ea6a996-fee4-4dd4-829b-330ff03fd265 +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a03315b2-80a7-4126-94e4-542b4a230120 + - ! fb381439-feb0-4d4e-9704-a129807cd14f +- ! + PrefabRemaps: + [] + Name: Categories + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8946e655-453e-4b63-bcea-3578089bd248 + - ! 04c9c748-23fb-49f4-b278-870084087759 +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002705, y: 3.534420, z: 0.000029} + rotation: {x: 1.238160, y: -0.000262, z: -0.000026} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2b9a5b20-6a89-4fd1-906b-e97f4259712f + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.005385, y: 2.681950, z: -0.000095} + rotation: {x: -5.666190, y: -0.004601, z: -0.046291} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cea83226-8c66-44d7-895a-2480d9cc1c35 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! ce8466fa-1f06-4ffe-9845-a396fcd77c99 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 75f06a71-2897-421b-ad76-29a8983210d0 + _offIcon: ! c4785331-76b4-453b-92f9-c742c70bb179 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000006, y: -0.000002, z: -0.000000} + rotation: {x: 157.399994, y: -83.865097, z: 115.817001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f + - ! f154d1c1-2595-4578-acc2-6872637af31a + - ! 86412b42-c0cf-4fc3-a8a2-fe90221abc59 + - ! 2d1055e9-e5d5-49f7-8955-de8f46da0f6a + - ! eb361989-1d4a-41f7-a205-235ce6f4e3b9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000006, y: -0.000000, z: -0.000002} + rotation: {x: -176.654007, y: -5.519800, z: -92.680099} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 309860a1-e8fd-49a7-8b08-343086fa08dd + - ! dddd8a38-ce19-4f71-8776-9826e6597567 + - ! a9edf4cd-40ec-4fe4-83b1-2f9439932ef0 + - ! ebf022e3-0fd7-4f48-b695-a86d4509dbfb + - ! cd4ffac9-4a32-4dba-b0a2-db117c38b975 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Flight Path + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 7.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bf4229f1-c6a5-48d1-a38f-f04b89258a5f +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 2c726df3-cfa3-4978-b146-a95fd5824626 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.013405, y: 3.861870, z: 0.000233} + rotation: {x: -4.535240, y: -0.003456, z: -0.026343} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1f2cf37f-fd91-492c-a63b-884a08cd9215 + Components: + [] +- ! + PrefabRemaps: + [] + Name: RocketLaunchControl + Enabled: true + ScriptAsset: ! c0c12ffb-ecd8-43f8-8d68-f490810b1be0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + slider: ! bb1bcce0-ba3e-493a-a321-bfd9d4b75942 + animationAButton: ! a6a33942-2295-4ffb-b9b7-ccc78ac22bdb + animationBButton: ! afc699c7-a1ac-4bb9-9288-3b00af3d4f6e + animationCButton: ! 0218fe8f-b6a4-4bbb-b452-daaa2e9df793 + launchButton: ! e41e4172-e7f2-4603-851c-dc05a0e21a3c + rocketConf: ! 5d2ffe4e-a3da-4dec-9bfe-d8d4271b8df0 + launchSparks: ! a6e780b3-03cb-49aa-8d53-83150b2bd5d6 + rocketAnimationPlayer: ! ab2efbdd-f11e-4691-bafc-7325dd21c9ce + flightPathText: ! bf4229f1-c6a5-48d1-a38f-f04b89258a5f + launchPlatformToggleButton: ! 0bcbfbe9-9e47-4eb6-add1-546001a963ac + launchPlatform: ! 245cb741-c1b9-4805-b7c1-793674f0d7ed + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.519104, y: -5.758140, z: 5.627940} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 711f9787-d880-4475-8f0a-0cf6b2492a6b + Components: + [] +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! c9cd2679-ba09-4f0f-98d7-ec3140e249c7 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + meshHoverMaterial: ! 386f728b-6a31-4633-b176-f92cd5bc60ce + meshPinchedMaterial: ! 92c09c9d-bf66-4313-9fbd-9c191887a5d4 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Platform + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.930451 + bottom: 0.520907 + right: 1.000000 + top: 0.672431 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 191e721f-d750-40f4-9dad-886423a6748b + useGlowMesh: true + glowRenderMeshVisual: ! a926d3f6-4c43-4f85-9ff3-fdf0b8a43975 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 10bb912d-512d-45fd-9781-9ddd98ae234e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! 40b553a5-b39e-4dc6-8c90-d82fc630df17 + - ! 533975ad-ccc7-4ccf-a527-4950ab63f014 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Rocket + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.064316, z: -5.097826} + rotation: {x: 90.000008, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 55313075-8410-4c83-b5fc-0b24ef2aa1dc + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 26.024099, y: -37.686901, z: 24.403400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6480de4a-e83a-4ebf-919e-d73bc4fd2eee + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166710, z: -0.000003} + rotation: {x: -180.000000, y: -0.000000, z: -180.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f9d02a8c-71a4-411f-a21e-a7b3329c62d6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.067402, y: 3.518870, z: -0.005366} + rotation: {x: 14.034800, y: -0.274095, z: 1.092330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a3ea66da-0ca8-4958-8d69-6f5045fa706c + Components: + [] +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a926d3f6-4c43-4f85-9ff3-fdf0b8a43975 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 30731ae6-289b-40fa-b3fc-5c9bd58bac6f + - ! 596fcf5b-2e39-4bfd-aeb3-3cbf0b735336 + - ! 0792cf4a-d692-4ca7-89ef-ba58c0a857a1 + Components: + - ! b520b5ac-c0da-46bb-a00c-baecbc88e66b + - ! 415e075d-7e74-4a7b-b4bb-35e587f05ae9 + - ! 8bff9b45-f459-40c7-9888-907eb306c19e + - ! f2a17cfa-5b56-4950-8997-729b270c0943 + - ! bf681195-f9d5-4c14-b881-deb9c183055f + - ! 5a8852ff-ecda-4881-abe7-1ceb2c524c26 + - ! e136b9a2-8a37-4184-ab37-94e8afa47a33 + - ! b3638d6c-5f3e-48f4-b0ed-dfb7bedc6e16 + - ! 2d1d4e99-2eba-40f3-a19b-2206cfc6cde6 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! c81a5037-9552-4a7a-b402-6e5afdd00132 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 2c726df3-cfa3-4978-b146-a95fd5824626 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! c8f4eea7-64ca-47b6-9616-63c3905ba6b0 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RightHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79 +- ! + PrefabRemaps: + [] + Name: ScrollBarFeedback + Enabled: true + ScriptAsset: ! 37bf0d33-fcd6-4d18-8150-19002357972e + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + scrollbarObject: ! b5eec3f8-31fe-4836-97ef-9f94c6079d27 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Flight Speed + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 0.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6815ee1c-768c-4dd2-92be-21f63f7e9555 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703720, z: -0.000000} + rotation: {x: 0.000283, y: 0.000276, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 07d5618b-22f9-4656-87fd-b0198fa0aeb6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! a62af18c-fb3f-4a13-a592-d489294e0864 + Mesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 13 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4d35bac2-e858-4d9c-afa4-6f02ae7d5065 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + allowScaling: true + autoScaleContent: true + isContentInteractable: true + allowTranslation: true + xAlways: true + yAlways: true + worldSnapping: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 16.000000, y: 32.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: true + autoScaleContent: true + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 8.000000, y: 8.000000} + maximumSize: ! {x: 200.000000, y: 200.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: true + itemSnapping: true + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! e1075a24-89cb-4368-90aa-e14b04dd49ee + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketGridContentCreator + Enabled: true + ScriptAsset: ! 01cb4976-7110-49ff-ae27-dbb77153e547 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocketConfigurator: ! 5d2ffe4e-a3da-4dec-9bfe-d8d4271b8df0 + objectPrefabs: ! + - ! 8104e815-4316-48be-ad1a-2021666f989f + - ! b9b3aff4-658d-4c76-ab3d-b479d4a722c8 + - ! e56db565-cd60-4e54-9dc1-b211e729b73b + - ! e7254ab7-df28-44a9-9252-05d53fbdc7da + - ! 242abbc5-63eb-448b-9a60-c5f5eae6725c + - ! 76789411-9f7c-4352-84bb-6a762a706580 + - ! 68a19954-e237-4b18-827d-db13073a38d6 + - ! 32671acc-9b4d-4487-ac10-3af976d942d7 + - ! 5c321a82-1be9-40b7-a482-f37464b708db + - ! dbb1f943-cd3e-4b20-89e5-0ce41c98a705 + - ! bbe206c8-38e1-4245-9550-2a019fe7e078 + - ! f2f3ca41-1bd5-4136-a5db-f3edb882b464 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013406, y: 3.861870, z: 0.000154} + rotation: {x: -4.535300, y: 0.000290, z: 0.000017} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cfc52ae9-3c49-4c47-8299-82d37cdb1095 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Left + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 5e5af924-472c-42fc-b74e-6eb873878cd7 + - ! 15a2c426-477a-4caf-8642-c3457e1d2ba0 + - ! fdd99efb-e57a-4acc-8115-665e08974fff + Components: + - ! 707d6193-db62-4bbf-8ef5-ce8b6b2084f3 + - ! 05143b60-129f-49e1-85ec-a816706a6414 + - ! a55d6f68-e6f9-4376-99a1-a927c3ced661 + - ! 9ad84203-8f0d-4264-899f-55d41d0e1a6c + - ! 8488c269-5631-4f05-832a-bb86fea89cfd + - ! a06f7e1b-f9f5-4b92-bb81-adb228cbfb7f + - ! af18f812-3c7c-4c4d-b162-5fb8957ea933 + - ! 918c5760-db78-41a6-85e3-422aad5871b6 + - ! f0e75a3b-9b96-4ae7-8275-a01d822b9812 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 57e56f6b-0632-4d36-829e-5265b4e158ec + Mesh: ! 9ab42643-fa56-4906-8dc6-c9cb4b53034f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 15a2c426-477a-4caf-8642-c3457e1d2ba0 + _offIcon: ! fdd99efb-e57a-4acc-8115-665e08974fff + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000001} + rotation: {x: -0.000096, y: -0.000037, z: 0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f9bcf5b-6b30-496e-b734-5aa240e969c5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7b2af8df-1c63-4356-b8a3-c24a66c38bc3 + - ! e2772a95-961f-4ea5-af46-ec9edb3d7b73 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + _boundingHeightOffset: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! ce8466fa-1f06-4ffe-9845-a396fcd77c99 + _boundingHeightOffset: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: root + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b606a2f9-401b-42b3-9eef-918b489cf6e1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 65.821396, y: 27.248711, z: 25.771273} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 40b553a5-b39e-4dc6-8c90-d82fc630df17 + - ! 533975ad-ccc7-4ccf-a527-4950ab63f014 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 10bb912d-512d-45fd-9781-9ddd98ae234e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Launch Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 62547522-b4cd-4cc8-ac0e-1d7b19810e4b +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + Mesh: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + Skin: ! 32346fd9-8168-4666-87d9-78060a1ebed2 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.067615, y: 3.518870, z: 0.000095} + rotation: {x: 14.081600, y: -0.000034, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d2c2e4e9-c17c-4ecc-902f-2283f319023b + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549800, z: -0.000001} + rotation: {x: 0.000059, y: -0.000014, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 75b74ef8-ecbe-4864-bb69-4c09f5be1606 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b40e0144-e33d-42b1-ba14-df79a03a9dec + Components: + - ! 7aba5d5f-52d6-4e86-bca4-7610c2d8727f + - ! c4fb2a89-29e2-4cd0-83a0-caab4b180dd8 + - ! 518a868f-cc66-4792-b60f-ae208a68b340 + - ! 6e90f370-608f-48a3-9007-f3686d1cbf61 + - ! 18e61105-5612-488b-be18-f954b19b54c8 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 4.600000, y: 2.000000, z: 2.200000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 10bb912d-512d-45fd-9781-9ddd98ae234e + - ! 78314fe3-2dee-47f9-a5fc-217c8c9f8ad7 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! b1daa443-4454-49b0-b62e-888fd23b0dff + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 7187afe7-3b99-4e61-8740-26999683d2d8 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.054705, y: 3.957050, z: -0.004463} + rotation: {x: -2.614390, y: -0.009460, z: -0.205101} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 60037818-559f-4345-ac44-f7c5dfc86f3c + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 176ee445-955a-4c0f-8bd8-d0f488067e77 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RightHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 826246a6-44ea-4331-85b3-702fa57389fb + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Container Frame + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 74 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 182db9f2-4d62-49ff-8cfe-55c29488a2e8 + Mesh: ! 45bdf724-f7f0-4a8b-b6c9-191da2777f09 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: 0.000189, y: -0.000000, z: 0.000044} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f3c8087e-8414-4601-833d-96cf682f94d3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 02a86b70-f0f0-41ad-87bd-21c32b796670 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 121.091568, y: -23.471666, z: -5.285858} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9a0d0de2-a18b-4052-afdd-3dd3f5b36527 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: Path Option A + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8496b5c1-00ea-43de-aad5-2e7c49cc31e8 + - ! 2f6be6c6-d719-4790-aaaa-7447b8082641 + - ! 944818d2-970a-4095-809e-ead99a336bee + - ! eccbd45a-a745-416c-a011-f1e0ca293492 + - ! 747d7d5c-fc2d-4ddc-a9ab-c1abc047f7b3 + - ! ee360366-a3ca-4676-8995-0d10669f47ca +- ! + PrefabRemaps: + [] + Name: Rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 28fed4d6-fc69-44fe-a2d8-7887004b586e +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.017407, y: 3.481390, z: 0.001771} + rotation: {x: -8.084740, y: -0.103266, z: -0.728726} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91 + Components: + [] +- ! + PrefabRemaps: + [] + Name: CapsuleMeshCustomizer + Enabled: true + ScriptAsset: ! 34ec9e1d-4d86-425e-9b7a-b6f2c130e4be + ScriptInputsDefault: + radianStepCount: true + cylinderStepCount: true + endXStepCount: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + meshVisual: ! 7d2c6118-bccb-4bc2-88cf-97a6b5513a3b + capsuleLength: ! 8.000000 + radius: 1.200000 + radianStepCount: 16 + cylinderStepCount: 16 + endXStepCount: 32 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000104, y: 0.000103, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a114455b-6a9f-4990-a3cc-fa88e4a4829a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! db52baa5-d1ea-401a-ab87-52542d8f88a9 + - ! 2e838a25-f9b5-4b47-85ad-a2cda44aef4b +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e31cf4c-750a-4c67-90c5-c3531bd74976 + Components: + - ! 66474512-1120-4925-a98a-4e953df411be + - ! 746d0107-53fb-4141-9ac3-f8d4a4de25f6 +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.519322, y: -5.969350, z: -5.521840} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0b1bf884-4efd-4b6d-83ac-82540696baec + Components: + [] +- ! + PrefabRemaps: + [] + Name: Animation Player + Enabled: true + Autoplay: false + ClipRangeType: Frames + AnimationClips: + - ! + AnimationAsset: ! 8811a6ee-076e-4144-a4e2-0cdc9e2fe3c2 + Name: Base Layer Rocket 1 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 400.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! 7eba6aa9-4ba6-4792-9195-8471fd86103b + Name: Base Layer Rocket 2 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 420.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! af080ccb-4a5a-400a-aa23-a9f0d85ad3e1 + Name: Base Layer Rocket 3 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 360.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: RightHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 780f2ffa-fc27-462d-85fd-d216d21e774a + Components: + - ! efcda464-fbc4-45be-93af-a83450f936fa +- ! + PrefabRemaps: + [] + Name: "[OPTIONAL] Visuals" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4527c113-2c46-40b1-bb7d-3acd00e22bd2 + - ! 7384c798-527a-41b9-862e-c12bc86376d3 + - ! 0deb320d-887e-4b1a-b988-f11b2c4d951b + Components: + [] +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -2.750000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! f1545112-6a03-4871-8dd1-8e6ab04d0263 + - ! 29cd2053-da79-409f-a02c-7813f87e07cb + - ! b7fba43c-452e-419c-b421-7f9ed959fc9d + - ! 5f16b23c-e28f-4c50-8c1c-2c3f7dc7f172 + Components: + - ! d7a659b8-d162-4114-b1dd-7f7cc7713ce4 + - ! bb1bcce0-ba3e-493a-a321-bfd9d4b75942 + - ! 26ede8b2-17bf-4212-8f45-69f5d081b2d1 + - ! 1d8a290d-963a-46a8-9940-5168049a2f1b +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 99f579a8-56f0-43e0-a8d6-487767601be0 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: Path Option B + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 58619b05-f4de-4b2e-87a7-5d2e3975e656 + - ! 1178b66b-8768-412a-b9d9-22cd62eb75b6 + - ! 30a344f8-7554-4aa0-b822-ab93feef4a04 + - ! 6a604f37-8018-4822-ad71-2c9450314663 + - ! 14d07aee-b879-475b-b38a-1f57679a5150 + - ! 50186944-f701-485e-a1d0-805b7a11fb31 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -18.000000, z: -100.000000} + rotation: {x: -118.520844, y: -7.233747, z: -22.973654} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! a674c3db-9f91-4c31-8fa5-f8b9f9f7c26b + Components: + - ! 719b6eb1-f36b-47e9-9556-6afbe0c43381 + - ! 9691d251-33d9-48ef-afb4-918aa0e504a4 + - ! a1b06eaa-4ccd-49e2-91f2-a8cfece5254b + - ! d3859700-4e38-4998-b2f5-741d92ebcb0d + - ! 1ff4c4c4-7489-43df-a8db-2e344d803a73 +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 08614d83-f067-4740-a346-a0b10d1ffd62 +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000002} + rotation: {x: -0.000202, y: -0.000189, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 933ca421-582e-407b-bfc6-206a10cef5f3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000011, z: -0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3f428eaa-6547-40ec-865e-50071201a35e + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 6d4e14b0-90fb-47b0-8368-e3cb543772be + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f80a738a-5010-43a5-858a-bbf56571ffe9 + Components: + - ! 359497a3-5746-4d6d-ad9b-2da791af7c71 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: LeftHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + Components: + - ! dd01563a-be2b-4815-85ad-bf139803cc1f +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + - ! 70267976-2504-4ab6-a026-24d69ff17481 + Components: + - ! 21dd5d7f-9153-45b1-a73d-f18313b86363 + - ! 476a663f-fad2-44e3-ad61-286e19b37dfa + - ! f38fa9c7-4103-4272-b5e2-3b7124ed7ce1 + - ! 5b99b34a-8a78-46ec-bca7-febdc2cb38ba + - ! 1f1525d1-8d72-49a2-90ee-c426f9cb604b + - ! 86b17c3d-838e-4a5c-a0ce-f14ca0365958 +- ! + PrefabRemaps: + [] + Name: piece_0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 5.097826, z: -0.064316} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8cbf86dc-678e-4587-9018-24c77fcb87ba + Components: + [] +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 43078030-e461-4768-adc9-c9cc59a99925 + Components: + - ! 331d31fb-3314-4854-b9a3-79258433491c + - ! 1a731ac7-66ca-47ad-92a9-6df9f54559ff + - ! 3e990679-08c6-45bd-99e3-c496efe54958 + - ! b04e02ae-2d83-4ddd-ad4b-d9d44e288ea4 + - ! 2511b2b1-575d-4f30-a2fe-766e9fd37247 +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8ff150de-0826-44a7-b007-b7d63b771dec + Components: + - ! 191e721f-d750-40f4-9dad-886423a6748b +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 4ef466ba-05b2-4721-926d-f1c7cb84f6ce + sliderMax: ! de34385c-1796-499f-a145-30de42478770 + _sliderKnob: ! b7fba43c-452e-419c-b421-7f9ed959fc9d + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.000000, y: 2.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f73472e1-698a-422a-9c68-84d1efe83979 + Components: + - ! af555212-8f01-4ef5-ae4b-f6165bfa9524 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.824800, z: -0.000000} + rotation: {x: -2.274930, y: -6.337840, z: -8.604530} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7f36a885-824c-4329-8b11-919324b5c881 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008392, y: 3.222930, z: -0.000121} + rotation: {x: -0.204897, y: -0.651952, z: -2.287250} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d180e208-2df8-4507-8437-213a1fbd5da6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Flight Path : A" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 6d4e14b0-90fb-47b0-8368-e3cb543772be + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 74abefc1-8f07-4b85-ab38-56f79d4121cf + Components: + - ! 9d532054-b0c0-4010-8794-fa57c9799d54 + - ! 7248fd29-ec71-4bc5-8598-09fdc27b8ef2 +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bb11bac7-b260-481e-b248-3310cae98857 + - ! 98246104-48dd-4773-a262-901eb025dd7f +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 18828ccb-4865-4bf5-b7c5-fdec9ae7650e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 984db3b0-1a01-4963-8136-336c958e1a49 + - ! 2f34d356-e061-4554-86f9-45f88456b823 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 638efe86-613f-4735-a142-375f9fb83afe + - ! 5367e022-22f0-4dfc-9033-fee474422327 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! dcc3ad96-997c-4e0a-94bc-1ae501eb02af + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 05939801-596e-411f-bd24-9fbc171bc0e2 + - ! ea3916e5-1ca2-40ba-9dcf-b879223def2e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 86cd1c89-4acd-46a5-9300-bf400950a160 + - ! 92d62d0b-7784-4366-a98b-d8c7b871a20f +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.760220, z: 0.000000} + rotation: {x: 90.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7cfbbba0-108e-4a50-b7e2-d1c3b1bd41ec +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Scroll View + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 100 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: HeadlockExample + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1161e9b5-dfd3-48af-bda0-382056faca0e + - ! f42901f6-dbe4-4b0b-8101-9e5808ddccd5 +- ! + PrefabRemaps: + [] + Name: PinchButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! a12dde47-121d-4cc8-9c0b-b81035a9e978 + Components: + - ! 0c25a461-e954-4aee-8025-fd09f0820b75 + - ! d61d8ea0-5799-4c2d-a758-e1b998b0776d + - ! 67659e53-1286-4a35-8b13-6315e55ec4ad + - ! a30edd5e-d264-44de-8689-bfff92353aee + - ! 9188ad33-5b31-42f6-803b-bdc32eaa3b84 + - ! 9e96b8e0-7368-462e-9b7a-a04eb624490a + - ! 632c566d-6d56-49df-815a-0c42af3a0582 + - ! bd8445e3-a912-42b5-8817-15b3833aad22 + - ! 8ba0a378-a2b5-4cae-bdda-10b0c25634c6 +- ! + PrefabRemaps: + [] + Name: Manipulation Examples + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4e51c7da-93cd-49bc-92ba-ac1b17778914 + - ! 176ee445-955a-4c0f-8bd8-d0f488067e77 + - ! b1daa443-4454-49b0-b62e-888fd23b0dff + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + Mesh: ! 2a58608b-008d-40f8-9627-d339311f2e1d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch Horizontal: 0.000000 + Pinch Vertical: 0.000000 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703720, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Billboard + Enabled: true + ScriptAsset: ! b5593251-a0da-4491-8561-2e0dccd715bc + ScriptInputsDefault: + _xAxisEnabled: true + _yAxisEnabled: true + _zAxisEnabled: true + _axisBufferDegrees: true + _axisEasing: true + duration: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _xAxisEnabled: false + _yAxisEnabled: true + _zAxisEnabled: false + _axisBufferDegrees: ! {x: 0.000000, y: 0.000000, z: 0.000000} + _axisEasing: ! {x: 1.000000, y: 1.000000, z: 1.000000} + duration: 0.033000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.918454, y: 18.264400, z: 17.580700} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 050bbf47-8842-4bc2-abe8-7a28fc5c70ab + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! eb3812be-7e6b-41c8-b613-68c8fb3b6f13 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000000} + rotation: {x: 0.000038, y: 0.000042, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a650b8d7-507a-404b-bfe5-9602e915dae8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008175, y: 2.218150, z: 0.000011} + rotation: {x: 83.677002, y: -4.512030, z: -172.722000} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b2d002f5-2b50-4f66-8c0d-93d5dba56556 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002791, y: 3.304380, z: 0.000029} + rotation: {x: 1.238300, y: 0.000079, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7cb41a88-1dcc-444c-8349-a62b24a8e765 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 27665dcf-a50f-4925-b8cd-994e028b53ee + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 20a44568-f561-4cda-bbbe-617352fde4cb + - ! 4aaa67cb-706f-41f4-aeb6-f7ec30c1a568 +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002905, y: 3.650320, z: -0.000094} + rotation: {x: -2.676470, y: 0.000075, z: -0.000412} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6229e282-4449-48f3-8ef5-b90c67ba62fd + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: SliderExample Mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 9c5d0a62-61e2-4cee-a999-b414d94681f4 + - ! c5537a7d-0960-46f6-8f0a-33da2df70200 + - ! a0358279-a981-46bc-b610-1f660aa06e5c + - ! 3a26884c-bd77-42bc-810b-bdb3f541ed66 + Components: + - ! 56d4cda9-6530-4e6b-a29d-aba472cf39c2 + - ! 23bd31e8-9bc7-42d8-984e-51ec9382901d + - ! 21089adf-ca6a-4e65-943f-6b0535f687c4 + - ! b341840b-5fd1-4f31-8d01-e00181428d23 +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.009134, y: 2.837150, z: 0.000078} + rotation: {x: -87.845497, y: -5.462180, z: -5.671890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 20841b1c-e2a6-42cf-9bd0-4fd466eae39c + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.054883, y: 3.957040, z: -0.000166} + rotation: {x: -2.622440, y: -0.000180, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1b6d2315-e870-4a05-9817-029318f16b5a + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! 9a0d0de2-a18b-4052-afdd-3dd3f5b36527 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrameUI + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 55.000000, y: -5.000000, z: -65.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! daaa4347-1049-4c69-908c-884fdc3fcdf5 + Components: + - ! 95ed011f-c8a5-469d-8a2b-cd95475e2dc9 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 05939801-596e-411f-bd24-9fbc171bc0e2 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! fae74c4b-9de8-469f-9c4d-9b8447f28821 + _offIcon: ! 46ffb5eb-4516-42f9-a865-7f8555cfd9da + _isToggledOn: true + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ConfigurationValidator + Enabled: true + ScriptAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549810, z: -0.000001} + rotation: {x: 0.000118, y: -23.667299, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a + Components: + [] +- ! + PrefabRemaps: + [] + Name: BillboardExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 94b1ea6d-0acf-48e0-94fd-976cf245ae26 + - ! cd4e3b1e-183f-4798-a3fa-c7b0750c0f3c +- ! + PrefabRemaps: + [] + Name: Controls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e01f28f1-602b-4d5f-8baa-63b0f3957776 + - ! 7187afe7-3b99-4e61-8740-26999683d2d8 + - ! 581eb383-c10f-47e0-8310-210d1491e7df + - ! 99f579a8-56f0-43e0-a8d6-487767601be0 + - ! d0b648c0-f031-49e7-ac1c-c9072a903317 + - ! 020ee714-1399-495b-99f0-f04b977c4f6f + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: JoystickPlane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 14.315620, y: -28.095922, z: -37.412357} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9483e63b-dab9-44ec-8db8-78b1713baf69 +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: -0.000051, y: -0.000000, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 162925ed-6a4c-401a-a521-86902851061f + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: left + selectVisual: Default + handInteractor: ! 22e40d6c-4405-4a2f-9eda-9f5e0d425a75 + handMesh: ! 9f2b3f06-77a1-4255-830d-ad50801287bd + root: ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketLaunchControls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -35.000000, z: -30.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5119d836-55fa-4ba4-8c3d-d0b80d1d734b + - ! 83d5803d-8670-46ff-bb65-883b011f0b74 + - ! a6a33942-2295-4ffb-b9b7-ccc78ac22bdb + - ! afc699c7-a1ac-4bb9-9288-3b00af3d4f6e + - ! 0218fe8f-b6a4-4bbb-b452-daaa2e9df793 + - ! 927ac346-e697-4d0a-9b9d-0e3f2e94a1ea + - ! acede8c7-aa51-4bd1-b85f-732bd8508449 + - ! 5d6fca19-9f65-47c8-98a7-4cde8903c9e7 + - ! 5617417b-b9c2-4482-aa98-1867e5ac4115 + - ! e41e4172-e7f2-4603-851c-dc05a0e21a3c + Components: + - ! 736562f6-84cf-42fb-82b8-335291e60254 + - ! 85195081-b4a3-4737-befb-f54a354a30b3 +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f2db0563-6c95-499d-8ddb-aa5cfaaf22f2 +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.143142, y: -18.425200, z: -17.556000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 77f1a5d3-8594-40b5-8085-79f1d46ddd71 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5bd155b6-c347-45a4-8a2b-becdfd08223e + Components: + - ! 75a95bf1-07a7-4dac-b2e5-ef8509904b6f + - ! b2e357ba-668a-4213-a09f-fb4fc2ad02bb +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03d33697-6495-4e15-9a2d-646411a514a9 + Mesh: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + Skin: ! 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 1.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 69b641ce-9bb9-451e-b831-06202ab01bce + - ! cf959d62-da77-4ea1-bff7-009b4c99fc9a + - ! e4ed526a-097a-49f6-b9ee-6e975ca6aad0 + - ! 73e0b27a-6485-47b6-8403-ad1a30991aec + Components: + - ! 30da0937-109a-47dd-a930-9e35bbd809e2 + - ! f00fea39-9eb8-4a3a-9afe-47d1a20fcade + - ! 1becfa95-9512-47d7-b458-5c095cf8aab4 + - ! 7a693d58-f56e-4a23-a5b4-3c7927f0818d +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 14.000000, z: 1.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a45d9874-f37c-41c9-b74b-fc5b8b804b30 +- ! + PrefabRemaps: + - 8ca7ffea-778b-45ee-baf9-6aa558a61677: 75cf1d14-7574-4e73-bdbe-6a782f03ce86 + - 9246cf15-0775-4fbf-bc87-cb7824cbd97e: 9c50ae2a-f7d3-40b4-8710-cb0f5b1be02c + - 968890b8-6509-4384-b371-c18eb46d40c1: 9ad35435-d450-4cf0-81a4-96a283b4814b + - a13740a1-b737-471a-9014-e207a803dde6: 7f0c59ca-5620-4202-9afb-d0eeb66b95fb + - a31c15b2-2467-411d-beb1-80392e60315a: c362c261-eae1-441e-b583-166a38382ca2 + - c8f4eea7-64ca-47b6-9616-63c3905ba6b0: 8120ce6a-1029-4b67-b649-b99d199dc703 + - d529df22-6d21-459a-b481-923e39841ae6: 66df1500-d300-4aad-983d-97255191bf90 + - e1075a24-89cb-4368-90aa-e14b04dd49ee: 55847278-3293-4af2-9f42-44ea3ffb53ea + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 14.315620, y: -24.865599, z: -37.412357} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + - ! c5725f7f-8982-4f2c-a27e-51a6be0bc963 + Components: + - ! a13740a1-b737-471a-9014-e207a803dde6 + - ! 8ca7ffea-778b-45ee-baf9-6aa558a61677 + - ! 968890b8-6509-4384-b371-c18eb46d40c1 + - ! c8f4eea7-64ca-47b6-9616-63c3905ba6b0 + - ! 9246cf15-0775-4fbf-bc87-cb7824cbd97e + - ! a31c15b2-2467-411d-beb1-80392e60315a + - ! ff9650be-e386-4824-af7d-a807c450028b +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 90241a03-c90a-4adf-a5f5-a73ec8f537fd + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Launch PinchButtonCapsule + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -10.850000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9ee0722b-8f29-4246-9a71-2a4b02882ddb + Components: + - ! cf4d228b-cd28-48c1-962d-e1b9c5869f60 + - ! c2edfd34-c09a-4e38-b5da-299dd2e2923c + - ! d7a920f6-7672-4c1a-a6fa-9df39a2df7f9 + - ! 2e37ae04-cd21-4a02-a804-b52785d4a939 + - ! df57c6a3-ff27-430b-892f-54bd0cbb8aea + - ! 1b71dec1-d351-4439-a74e-bfe6e8dc695a +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b8e0963f-7ab4-4b2e-a055-bdc1be1c3170 + Components: + - ! 362e94e3-4ac6-413f-9898-03b2d50f4074 + - ! d02de6b8-12a1-4901-b4fa-9d19c4742118 + - ! 36878003-0ee5-4463-a104-3de4afe8f3e0 + - ! 3313f067-0167-4972-8cc8-503b05b19c9a + - ! 89f336af-a54a-4771-9123-43c3e0d36098 +- ! + PrefabRemaps: + [] + Name: Device Tracking + Enabled: true + DeviceTrackingMode: World + RotationOptions: ! + InvertRotation: false + SurfaceOptions: ! + EnhanceWithNativeAR: false +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000000, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 11.787900, z: -0.000005} + rotation: {x: 0.059034, y: 19.848200, z: -15.906400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a72bed4c-f7e3-4691-93f3-d06d66d75dd0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.500000 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.905911, y: 15.703600, z: -17.047701} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 50f48cde-a492-4587-8b76-26cff1adec60 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.192403, y: 6.380900, z: 6.216870} + scale: {x: 1.000000, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 78df9761-cce5-4f60-b157-14385776c01d + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Configuration + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d8ffb52f-2569-42b3-a616-c75eb7fe7e36 + - ! f66a2c0c-ecc0-41a4-be4a-21ad0c1b6cb7 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 470c886d-541e-47a6-b5e2-de1e20589316 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 47.675831, y: 19.865082, z: 33.071331} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c28c16aa-b964-4fb3-b0f2-7f9ca2ba897a + - ! 300b14cd-cae3-4ee6-ae39-700f003d85da + - ! 4f6d1d86-5d52-4d48-a192-3841b4dfeca7 + - ! 432ab8d2-ba1b-4223-a404-74110d12bba8 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + Axis: Z + Length: 1.900000 + Radius: 2.100000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 8496b5c1-00ea-43de-aad5-2e7c49cc31e8 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 962fe96e-aa8d-4ea3-8a35-09c60ce3f4dc + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: right + selectVisual: Default + handInteractor: ! 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79 + handMesh: ! de62f5f3-2f86-4c98-b357-a44d603496f1 + root: ! 780f2ffa-fc27-462d-85fd-d216d21e774a + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! a9993c60-2bf2-4062-bc65-902e1a421c4d + sliderMax: ! bfbc951a-f9ae-4621-976e-7894a79478ac + _sliderKnob: ! e4ed526a-097a-49f6-b9ee-6e975ca6aad0 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5faaa512-0907-4a7c-abc6-801f9506c109 + - ! 8d4da315-31b6-4260-a5b9-33ab66f361b6 +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.140613, y: -15.148800, z: 17.637899} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e9344e0a-57f1-4226-9a18-a84052078b1b + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple UI" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! dff35311-8c13-4a47-aa27-7c81428bea0f + - ! 78df9761-cce5-4f60-b157-14385776c01d + - ! 90241a03-c90a-4adf-a5f5-a73ec8f537fd + - ! 58cc0b26-acd9-4018-bd05-fcc1bcc6b837 + - ! c81a5037-9552-4a7a-b402-6e5afdd00132 + - ! 580ffb10-31e3-4ae9-ba29-d14cc5676538 + - ! da621398-4472-42c0-9dd2-b55cbd96c86c + - ! c7ce6262-5a95-4210-8fa0-05580c6a88db + - ! 68ad7faa-9aea-44b5-b204-85da6adb9bc9 + - ! d387093b-00a9-4e77-827f-d97a6674158b + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! 3ce0edb2-6916-4124-a47a-c94e3b9cab61 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 596fcf5b-2e39-4bfd-aeb3-3cbf0b735336 + _offIcon: ! 0792cf4a-d692-4ca7-89ef-ba58c0a857a1 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + ScriptAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: true + touchpadDragThreshold: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + spherecastDistanceThresholds: ! + - 0.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: ! 250.000000 + touchpadDragThreshold: 0.050000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! 21dd5d7f-9153-45b1-a73d-f18313b86363 + _boundingHeightOffset: ! -1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000002} + rotation: {x: -0.000076, y: -0.000000, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 691be975-a6fd-42b9-a51a-bcdeebedb743 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Headlock + Enabled: true + ScriptAsset: ! 37c21f9a-dd95-4665-ac5c-60c72e00954d + ScriptInputsDefault: + _distance: true + _xzEnabled: true + _xzEasing: true + _yEnabled: true + _yEasing: true + _translationBuffer: true + _lockedPitch: true + _pitchEasing: true + _pitchOffsetDegrees: true + _pitchBufferDegrees: true + _lockedYaw: true + _yawEasing: true + _yawOffsetDegrees: true + _yawBufferDegrees: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _distance: ! 50.000000 + _xzEnabled: true + _xzEasing: ! 1.000000 + _yEnabled: true + _yEasing: ! 1.000000 + _translationBuffer: ! 0.000000 + _lockedPitch: true + _pitchEasing: ! 1.000000 + _pitchOffsetDegrees: ! 0.000000 + _pitchBufferDegrees: ! 0.000000 + _lockedYaw: true + _yawEasing: ! 1.000000 + _yawOffsetDegrees: ! 0.000000 + _yawBufferDegrees: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 463accac-e5f2-4ff5-aad3-dd1fe504613a + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: SIKLogLevelConfiguration + Enabled: true + ScriptAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + ScriptInputsDefault: + _debugModeEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + logLevelFilter: 3 + _debugModeEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + - 006192b0-6a28-42d8-9c20-7db3cf994249: 734fd77c-cf92-4677-a635-faefb258d109 + - 020ee714-1399-495b-99f0-f04b977c4f6f: 687dfae2-c079-4fd4-9143-8a8a419910b9 + - 0218fe8f-b6a4-4bbb-b452-daaa2e9df793: 4448e178-da1e-466c-832d-cb35015a7100 + - 036512ed-bf6e-400e-a46d-10f636b6e5c3: 36e41376-51bd-4477-ba07-b652c0aa82a4 + - 03cb0a5e-3e67-4f89-bc12-910bc3c64ccd: 2a0176da-4f12-41be-ae32-8ca018680f8b + - 04c9c748-23fb-49f4-b278-870084087759: f4669faa-525a-4926-bfdf-e7b1b07813b7 + - 04e121c2-eda3-4027-99d5-98b89d60a800: 3f4b2619-d506-476a-99d6-4261cb8173bc + - 05143b60-129f-49e1-85ec-a816706a6414: c3b90554-5964-4b67-accf-60fbb2d7b79f + - 0572c44a-f705-46f8-8434-a4a8a356aaa5: 2d43b9d7-cdc4-4727-8b79-f643982ea695 + - 05939801-596e-411f-bd24-9fbc171bc0e2: ae5f399d-f412-42b2-915e-5c7de7787711 + - 0792cf4a-d692-4ca7-89ef-ba58c0a857a1: 26c35729-b4dd-45aa-a373-b7d47dc657e0 + - 08fc906c-78bf-45df-99f5-35e77aea225d: fe38f062-25cd-4668-9e51-42235170a549 + - 092a9f85-af06-4b7f-968a-dfc3f683238d: bcc84955-f911-4c35-ba6b-2c77998f9f4d + - 0bcbfbe9-9e47-4eb6-add1-546001a963ac: 7b503393-b7d7-4fee-bebc-2e0a0a158c3e + - 0c0bfed4-ada4-4bf7-9612-d44c6c5e1090: af39b2ca-39f9-4be3-883f-3e60844b18d7 + - 0c25a461-e954-4aee-8025-fd09f0820b75: ec0281d7-e1b5-4e83-8b50-235ecc55df4e + - 0d51e23e-412e-427e-ae9e-b6ec501399bc: c99b7b55-01f0-46b1-9335-3978e896fca0 + - 0d8fb57f-24dd-4dfa-b259-8368eb612905: 4f1beab4-2c8a-4f63-a05f-357008991456 + - 0e01ccea-3288-438d-9ec5-f16254ebd0bf: 7c8ea070-1726-4ee0-9f1e-aae5c2570841 + - 0e5e12ff-635f-49e3-be00-ebf5900ea4ec: 51a93b09-9f90-4d9d-924c-ca920dd25aae + - 0ed2cadb-20f7-42de-b689-d3a7be59d6d8: 96bd6fd3-2b4f-4872-9cea-6570d04b737e + - 10bb912d-512d-45fd-9781-9ddd98ae234e: ffb9811f-92b4-4514-ac28-2aa421dc9dfe + - 10de4b7a-720d-4d96-a283-1e122dff859b: f40445f0-9b9c-4ceb-a25e-3a52e31a2a60 + - 1161e9b5-dfd3-48af-bda0-382056faca0e: 6b154d00-05e6-4008-8c8d-ff3c38dc97c1 + - 1178b66b-8768-412a-b9d9-22cd62eb75b6: e33700d5-863c-4eb6-b422-2b6c26477e2c + - 117e13c7-61de-47a8-893f-951f91b0534a: 1146c9ab-b553-4255-9954-52ffe8f621f5 + - 11e4061b-77da-4925-9cfe-6347b3bcce40: 9568cfe8-b1ac-46f0-b30e-9b99a150b655 + - 1208900c-b1bf-459d-b7ae-c9ce081d8a33: 98945bf4-a4c1-4e54-8dc0-3f743d184bbf + - 12e31068-8e57-41e3-8ac5-c9a99f26633f: 61451a97-d498-4319-850a-db26407772aa + - 12fccd0a-94c9-4e79-a54a-0f2e4018bde5: aafb526f-a2ed-4dc7-acd9-7245b143dbb4 + - 131fc99a-a532-4e38-8e6b-dea54aabe422: 3bd20dac-a943-4d7e-a08d-6b529725b690 + - 14013079-8453-4103-8404-1c2f9aee8e4a: 6bf51efb-c165-480c-834e-cd9e1573372e + - 14d07aee-b879-475b-b38a-1f57679a5150: c3469410-615c-48b7-b277-fdbb7fe01425 + - 15a2c426-477a-4caf-8642-c3457e1d2ba0: e3c97abf-6ee9-42b3-bc7e-1876cca70142 + - 176ee445-955a-4c0f-8bd8-d0f488067e77: fd38210a-8026-44e9-9cee-4d1b1e58ce02 + - 187c0993-895b-43ef-bc71-574cb1ee68ee: 719c49c1-7076-4ea4-8d23-f7c1ad81e9e1 + - 18c0f8c9-eff4-4d1f-ba23-b359dcc52051: eaa2615e-3c3c-4ff7-b453-dd5ef940fc6a + - 18dc05a5-21f9-4650-a9c0-c75058cc3ec2: a3a2626d-dc87-4c90-bb2f-4ef4cb8271c6 + - 18e61105-5612-488b-be18-f954b19b54c8: 200c5a89-e479-42ed-8295-8c590be8fe67 + - 191e721f-d750-40f4-9dad-886423a6748b: 073b79f8-7222-4585-86f6-8acd58335931 + - 1a731ac7-66ca-47ad-92a9-6df9f54559ff: 5a0defe9-efc0-420d-b36b-b9f29375fb51 + - 1ac296eb-35bc-4019-84fb-d66c59e1b19d: 69b71a12-2618-41f9-b62f-91ddaabb2c47 + - 1b71dec1-d351-4439-a74e-bfe6e8dc695a: 7b3b0ace-4c9f-4d8d-a869-af9439d938e7 + - 1b96a171-2f8c-409e-9d0a-91812193d330: 09db777e-2a46-487f-8d0e-89061d39cbce + - 1becfa95-9512-47d7-b458-5c095cf8aab4: a9072322-9cbe-460e-a04b-91bd9fdd7e21 + - 1bfa66da-982b-4117-a961-00f1c7d941a4: 3e035bce-415d-45d0-bb92-d77e1bfe0950 + - 1c90c220-a570-4dfd-8290-781a6959eea1: 68265c8d-084e-4f2d-9358-355e46cab9b5 + - 1d8a290d-963a-46a8-9940-5168049a2f1b: 3e6c30f9-5b68-4524-a6e7-a566e22f5fa1 + - 1e2ce68d-b24a-45bb-8072-485a4fd9c454: 81d98ccb-8c72-4fa2-81f7-20f82941c51d + - 1e4b5d84-db2e-42c4-9cdb-1fa4a98ae5c9: 9852472b-586e-40df-be99-0ea695ce4dac + - 1f1525d1-8d72-49a2-90ee-c426f9cb604b: e2bc3d8a-f84e-4176-8b08-bbb6c90dd5d7 + - 1ff4c4c4-7489-43df-a8db-2e344d803a73: 5f54672e-81d5-4d1f-bfcd-349615a988b2 + - 20a44568-f561-4cda-bbbe-617352fde4cb: fd61450e-fa46-40aa-a6c1-21c78d870ba2 + - 20cdf887-c102-42c6-a77e-e6bccd3b3ffa: 8862e579-091b-498f-b65a-9ade1608fdb7 + - 20ce429e-ff7b-42d7-8363-322863bfded1: f57a3e91-93ed-467a-a0c0-deecbed6cd45 + - 21089adf-ca6a-4e65-943f-6b0535f687c4: f0c19a19-fb2a-4151-a1a8-9fee620e28b2 + - 21dd5d7f-9153-45b1-a73d-f18313b86363: 008299c5-f728-4311-b3c6-21cbf5660edf + - 23bd31e8-9bc7-42d8-984e-51ec9382901d: 1e6e0c1a-8056-45a4-9f38-bfe26b3e43ba + - 245cb741-c1b9-4805-b7c1-793674f0d7ed: 10ef1717-a0b6-4e65-a7d9-44f91b6017cd + - 246fae23-9f27-438d-954f-024cd1be0413: 88acf2e5-9240-47f4-8a6f-82805925f710 + - 2511b2b1-575d-4f30-a2fe-766e9fd37247: 2935496b-ff1c-4806-9ab9-ea54eb8f259d + - 26ede8b2-17bf-4212-8f45-69f5d081b2d1: a466be5b-8036-4d74-a1b3-a50a6492ed86 + - 288d782c-f80e-4745-bc72-6324728d9ad9: f28b8cf7-a028-4cba-8eb2-7e6fc16ca5fc + - 28fed4d6-fc69-44fe-a2d8-7887004b586e: a5eaad25-8b90-4fca-9706-422e02f5c643 + - 297edb80-1ef8-4527-91d2-2f1a19657582: e1f8bc07-848c-411f-8468-e593250bd389 + - 299e30e7-fb5d-4990-96fc-6d7fd24e5f99: e41c5417-fdd3-419a-9ef4-41a88bf0660d + - 29cd2053-da79-409f-a02c-7813f87e07cb: 4aa8ed58-dcab-4256-a793-20c208772ea7 + - 2a0898f0-243a-4d3e-b9fa-8cf392c8db15: ae4ba4ca-d378-448a-a6bc-a0633b4a3211 + - 2a571854-9c1a-4e6f-9965-d60156d26d84: ace5dc90-9121-482e-bc77-338e3f17c25f + - 2aff7c6c-53f4-430b-8c02-cf513f22ac46: ffc41b55-0d52-4a88-b1f5-63556851cb51 + - 2c726df3-cfa3-4978-b146-a95fd5824626: cb2f009e-3cf2-4187-bf1e-aafac6787521 + - 2cb8596e-593d-4256-8a62-eef3e0da7ea9: c0e12f13-2832-412e-a65a-e58f29950dc6 + - 2cbb881e-c22c-42b0-bfe9-c847ab1640d2: 1b490eb7-9528-4f6f-a0c1-50a388b944b3 + - 2d1d4e99-2eba-40f3-a19b-2206cfc6cde6: 68719226-e7e0-4113-bdab-6aec4a1b4375 + - 2e37ae04-cd21-4a02-a804-b52785d4a939: 7eb68798-e720-4b5b-bab0-13835772bcee + - 2e838a25-f9b5-4b47-85ad-a2cda44aef4b: f1eaf93c-70f9-43fe-8fe2-a41582142f06 + - 2f34d356-e061-4554-86f9-45f88456b823: 42fa7251-c134-40b6-ae21-9e0cba42bcb4 + - 2f6be6c6-d719-4790-aaaa-7447b8082641: 6cabe18a-f69d-4a3e-95c1-073d6070fbc9 + - 2f8e0f36-5c12-4ac3-b10c-750f77d595d0: 81ac99fe-bb9c-4203-88a5-149ff24f4d8f + - 300b14cd-cae3-4ee6-ae39-700f003d85da: ee4c641a-c79a-436e-a89e-1e8ffe9cd3bc + - 30731ae6-289b-40fa-b3fc-5c9bd58bac6f: 71ca0806-008a-45ac-9173-d186754e53bc + - 30a344f8-7554-4aa0-b822-ab93feef4a04: 9bc07bdc-0bed-42c5-997f-7eaa4a937221 + - 30da0937-109a-47dd-a930-9e35bbd809e2: 3f78fad9-18dc-4951-9bc5-2e61aad419ef + - 31372144-baea-47d1-afd2-ed88fb7e2683: e060c4b9-46ff-4a98-9a66-4e01c9d363d3 + - 3308bd23-8a56-4adb-908b-8c96a9d634dd: 147eda9e-e69e-4729-9347-923da3806a94 + - 3313f067-0167-4972-8cc8-503b05b19c9a: 8be8a529-4d9e-4e24-b655-37d8b5bb7527 + - 331d31fb-3314-4854-b9a3-79258433491c: 308b6179-4063-45e1-9381-521859148bd0 + - 359497a3-5746-4d6d-ad9b-2da791af7c71: f580b6f0-2a1a-48d8-9796-674a7b0ecd46 + - 362e94e3-4ac6-413f-9898-03b2d50f4074: 3e7c8539-ac4b-4c16-90f7-0ba5cfaf9039 + - 36586694-5947-43fe-9596-906825de509d: 6e2ea6db-9160-4b38-8e13-085bdfb056d1 + - 36878003-0ee5-4463-a104-3de4afe8f3e0: 96965a44-9849-496b-b1be-38299b203558 + - 3769366f-4444-45f8-81e8-f14b3c8a0645: 33323e07-f29c-4fa9-9bc2-a55327ead908 + - 37ed3092-73e5-420b-aedb-656b1c84ac79: abccdf94-337b-49f8-abf3-6b04e29d0ff4 + - 38006373-7972-471e-be8d-3a6c4a67bdf7: 19e101b8-5c98-4d5f-bfd6-0e2fb86581e0 + - 38b50117-4aa1-4881-b52c-89d62c10a6ec: 15c8ff47-7aaf-4ed8-8983-1539f0f073c4 + - 39a12ac7-a32e-41e8-bc50-2e10f187f2b0: a4c763e7-2e1b-400b-bd95-8f3bb728f824 + - 3a26884c-bd77-42bc-810b-bdb3f541ed66: 4c032802-37e9-4902-aaf9-665af40ac96d + - 3b061257-5dfb-4e90-b31c-803ec12f595d: 1b5518c4-e625-4eb2-ab98-ef3675396855 + - 3bb57980-131b-4baf-851e-391c60970a75: 37b759b8-1f4e-4f26-b5ee-57c90bc21a73 + - 3ce0edb2-6916-4124-a47a-c94e3b9cab61: 62b8a451-7989-45b5-a6c7-ab02c30f30de + - 3e990679-08c6-45bd-99e3-c496efe54958: ed8e7a3b-6207-4015-9c5c-6a264dfd191a + - 40b553a5-b39e-4dc6-8c90-d82fc630df17: c8ebd78d-8835-4c00-8308-6da560d95db7 + - 415e075d-7e74-4a7b-b4bb-35e587f05ae9: 7d0ec120-acb2-4b27-99cb-bda87b3f26a0 + - 42157a2f-0b27-4a7f-bfbe-a7102b5d1773: ec8cd9e3-7dc8-4ecb-96d7-b06b67802261 + - 42940185-c3a5-4a9b-b73a-8eb575385679: ad481c2d-f6bf-4d74-9d13-17ca74924223 + - 42ec8912-b42f-4f91-8395-335d0ac423a0: 8e63e8fd-3b3a-4713-8173-b4ef651ec203 + - 43078030-e461-4768-adc9-c9cc59a99925: af14efee-8102-4865-83d2-d4fbc64ef07c + - 432ab8d2-ba1b-4223-a404-74110d12bba8: a2dc5a63-c1df-41a5-90b2-e740f12bbf63 + - 44fcbe2d-f52e-47f4-ab2e-28381068a9bc: e03dda15-5806-44af-97cb-f144db36e8f9 + - 4559b691-d3dd-4d97-b9ee-e75217f18d3c: 1a3fd670-c1c7-4069-9b59-df845362a260 + - 45bc7a90-82d2-490a-aba0-8a319ad59722: 6e910f1c-f33c-4497-8c7d-ce77b8f7b885 + - 463accac-e5f2-4ff5-aad3-dd1fe504613a: 077b8c55-6fe3-42b4-a99e-46f92cb22835 + - 46ffb5eb-4516-42f9-a865-7f8555cfd9da: 1b94b845-f11f-4781-8362-c5cb1bef17fa + - 470c886d-541e-47a6-b5e2-de1e20589316: 4d8e42f2-86df-4cf7-a61d-d8e6870abac5 + - 47539171-a347-48fe-ae7a-cc4b06f94f5f: ebbecedd-4b69-462f-8155-8784cc752bb0 + - 476a663f-fad2-44e3-ad61-286e19b37dfa: 40d69b9f-db3c-4e61-90e6-1bea61a6f409 + - 4aaa67cb-706f-41f4-aeb6-f7ec30c1a568: abfbbe54-80b3-4a90-a9a0-808dc3ff5e8d + - 4b1f1d0c-a1a7-4895-af8e-7b964d486578: 1da1ae14-3e7a-4cfa-b353-e425319a3572 + - 4c4e9a6b-53dd-4a6b-8312-ea20dd40ff2c: 7af80f84-dca4-4828-a01e-1e2c83301467 + - 4e51c7da-93cd-49bc-92ba-ac1b17778914: abf278a6-03d8-4b2b-910d-181a46b9fb60 + - 4ef466ba-05b2-4721-926d-f1c7cb84f6ce: 899dedd2-598a-4baa-aa9f-81952216526d + - 4f6d1d86-5d52-4d48-a192-3841b4dfeca7: b47a1db7-5e4a-4f06-9a2e-7251e54d0a66 + - 4ffab695-3859-4b88-9c5d-0b95cb5dcd91: 5a790996-2d06-4b8d-9852-7165ac56527e + - 50186944-f701-485e-a1d0-805b7a11fb31: e0de0477-b7d3-4d25-a608-c298b58b3860 + - 5119d836-55fa-4ba4-8c3d-d0b80d1d734b: c903e1ce-abf1-4253-84ca-85d5e3999a67 + - 5127a290-6a9d-44a0-83bd-06e30f3fc653: 527ee95c-27ab-41a1-9b9f-3c15e512454c + - 518a868f-cc66-4792-b60f-ae208a68b340: 95bad5d6-34df-4c97-aaf5-d087a1ff442c + - 525d0fdd-36a2-4565-9996-219b72385dc5: 49d3c420-96cd-485d-9a64-bb7d2c52204f + - 533975ad-ccc7-4ccf-a527-4950ab63f014: 774e1493-bd36-454c-b478-ec0cebda666a + - 5367e022-22f0-4dfc-9033-fee474422327: 130c2cde-83a4-4a70-8b03-eeaf75ef4d9e + - 53c3b2b7-1cf2-479d-bcba-9527b9af5179: 0a9143d8-a5e8-4bc5-90dd-98075fe95d19 + - 542c8e99-dd30-44cc-9092-ced77bc4d54c: 7f6239f2-26e6-48db-8e49-57e348234bfa + - 54575843-0da1-49ad-9522-0a9f80441c5b: 15046028-d913-4fb0-8a5a-463b11599a95 + - 55313075-8410-4c83-b5fc-0b24ef2aa1dc: bd9c7a12-8208-473d-b8d7-540d137af7a6 + - 5613bfc0-c769-4833-99ea-58239d74e1f4: 4982a4bd-8004-4ced-a93f-8c22fa227369 + - 5617417b-b9c2-4482-aa98-1867e5ac4115: 50ecda44-3290-4cec-9805-7b911c17c3a3 + - 56d4cda9-6530-4e6b-a29d-aba472cf39c2: 3e465dbc-1232-4f56-b1ca-07c71159540f + - 574d9ee8-f2a9-4ada-8275-b39f6b651b06: d1d15b9a-f9f8-45f7-b124-de8885fbcb5d + - 580ffb10-31e3-4ae9-ba29-d14cc5676538: b48985e2-11a7-40a4-b8df-1e8b4854aa1a + - 581eb383-c10f-47e0-8310-210d1491e7df: 36d23b92-f05c-4013-8bf2-28e6662dedae + - 585355bc-41fa-43f3-9700-f8c951fac340: 1efadfe5-29ad-4190-a473-1ce818b39230 + - 58619b05-f4de-4b2e-87a7-5d2e3975e656: 2e9e3044-964b-4715-bfd8-238f810af6ee + - 58cc0b26-acd9-4018-bd05-fcc1bcc6b837: c32fdec6-4ed8-4c87-8521-950db919ede2 + - 596fcf5b-2e39-4bfd-aeb3-3cbf0b735336: df969d23-af5a-4743-bd64-da3f32af946c + - 5a4a6c9d-5f14-442c-a49a-8be3c0c22f83: 15457eea-afed-4200-b815-e2aef7d0ae2d + - 5a8852ff-ecda-4881-abe7-1ceb2c524c26: 014e6143-34a3-4ea5-9f68-9048c596274a + - 5aae6971-5857-4c8f-a5ef-c45d733acbb4: e46651b3-78b0-4aee-a12c-995553ce0c50 + - 5b99b34a-8a78-46ec-bca7-febdc2cb38ba: bf4529eb-f205-484f-8da8-77cf3ca78879 + - 5bd155b6-c347-45a4-8a2b-becdfd08223e: 7d07885e-d3be-41f0-b24d-2f61c10779fa + - 5d1ebe34-4748-49b7-b6d3-7bad94ca7426: c0f104b8-b66f-4cc2-9a40-911d8b08fc7c + - 5d2ffe4e-a3da-4dec-9bfe-d8d4271b8df0: a97c37a8-109a-4866-9e37-56d6c8a9c1f8 + - 5d6fca19-9f65-47c8-98a7-4cde8903c9e7: a2df5570-1a26-46c8-9692-745f51555629 + - 5e5af924-472c-42fc-b74e-6eb873878cd7: fb715abc-a6ec-48ee-96b3-1d300b6f2562 + - 5ecb3e1b-71f7-4147-a9b7-e393c0012648: dae05fcb-ff13-4f9c-9e8c-92679490f805 + - 5f16b23c-e28f-4c50-8c1c-2c3f7dc7f172: 9b74a8b5-6dd0-4448-a505-5148f6ecaf5c + - 5faaa512-0907-4a7c-abc6-801f9506c109: 4bb77992-0e3e-4b1c-8d3b-c245e47391ca + - 60322f26-9917-4e2a-bd56-581947d84852: 34a80196-25d7-4d71-a961-d47be0cefef3 + - 62547522-b4cd-4cc8-ac0e-1d7b19810e4b: 3375b270-5d27-4f31-b4e9-9b12bc85c58f + - 62f3a8e2-ac5a-4ba7-83b3-cac1610a7330: 87327542-7e05-4d3a-89e5-294fe706fce6 + - 631a3ca0-0ec9-42ba-a841-c09bea810ac9: 7ce79967-b6f4-41de-a181-7d05dadb9224 + - 632c566d-6d56-49df-815a-0c42af3a0582: d904c42b-301a-4dae-81f5-1c8d5d888d3f + - 632cca84-19fe-4886-8627-21a46a150dd2: 35b271f1-4ef6-431e-bd13-f995681ed278 + - 638efe86-613f-4735-a142-375f9fb83afe: cc34a58c-8336-4b3f-a590-769d4309fa6a + - 6408b356-a940-4216-803e-02ae7f88a425: 0c399b22-7b3e-40e0-8b5e-2905497a3229 + - 65833bb8-54ce-423b-a863-d059e467bb42: a4ee76b0-f83d-4264-8f35-6f65e6deef32 + - 65d1468b-ad6c-4b28-a742-9881b25ef2dd: c7b5e2c4-ed9e-4fc9-a0ac-ae5ab3522ca9 + - 66258ab8-1a60-4dc2-aee5-820ac8efc2e0: a61b2db4-6c4d-4e28-960b-3876a0d4054c + - 66474512-1120-4925-a98a-4e953df411be: 77141b36-1afa-4580-a4e7-77b46a7e7144 + - 6694ff7c-c4b6-48dc-ac2c-765fda9db34f: e7b1b809-065c-4da1-8d3a-4c59dc598329 + - 67283259-079b-46d7-a56c-c16f2df4367a: e6e4c36b-32c2-4083-b6b2-0defb0f50b4d + - 67659e53-1286-4a35-8b13-6315e55ec4ad: 2a648635-29d4-4da9-a0f3-487a1ed5149b + - 67d99ead-55e0-40c1-9319-f829b0b5274f: cf20aefe-5abc-4ebb-8336-b7e1e0c9a094 + - 68117807-3e5d-4f4a-98bf-aa0d3584d9d6: 702c7723-1685-4104-adfb-d00ae5caf8b0 + - 6815ee1c-768c-4dd2-92be-21f63f7e9555: 1ddd3d02-2a53-4389-87ed-3851ec1a22f1 + - 681c55d2-59fd-4c3c-99d0-d7aaa2f779b7: 70220405-5a89-42d6-97bf-e1cc16af5e4a + - 68ad7faa-9aea-44b5-b204-85da6adb9bc9: f62fbb0d-eab9-4ce3-ac4f-197c49d50ad0 + - 69b641ce-9bb9-451e-b831-06202ab01bce: d04392b1-1178-4d5d-8f86-2e55b24e2cd1 + - 6a604f37-8018-4822-ad71-2c9450314663: 866bd418-abd8-4061-a6ff-2f4e36e2cbf5 + - 6ac585e2-813f-4594-b268-6e15f5bf48b6: 8679a711-e9c7-462f-bc36-bd5b8153194a + - 6b376b45-f8ef-456d-b8cd-673410d85157: 4089dc9c-5adb-4bf9-b957-8abc839b0d58 + - 6c866f4d-00db-4a17-bf53-3dc1708bcce9: 4742a657-5125-4825-994f-e0bcfa100021 + - 6d4e14b0-90fb-47b0-8368-e3cb543772be: 995378a9-0c60-444f-95ea-9a77adf164d6 + - 6e614c30-2b6d-4b3c-a625-ebfa1e1bf580: 2af4ec65-1023-4f81-873e-950d998a65f2 + - 6e90f370-608f-48a3-9007-f3686d1cbf61: d8bdabcb-8617-4d4e-a10f-8cdd5d4e441e + - 6ea6a996-fee4-4dd4-829b-330ff03fd265: b5d8cd4e-83c2-40d0-9e87-5f19ef7c71d3 + - 70021aba-1bd8-4e46-80a7-8fc3bf227371: ab7d3ee8-38ad-45b1-aceb-d465c18049f5 + - 70267976-2504-4ab6-a026-24d69ff17481: 46e04b21-2fef-46ad-8f8d-a2385e2bb2b6 + - 707d6193-db62-4bbf-8ef5-ce8b6b2084f3: b143eab2-4afd-4fd9-ae30-48e2f75b53e0 + - 7187afe7-3b99-4e61-8740-26999683d2d8: 34db47f7-8795-4800-940f-3381c9bc70fe + - 719b6eb1-f36b-47e9-9556-6afbe0c43381: 80e2e116-8840-484d-be53-471cdb4a8275 + - 721fb100-9532-48c3-b61d-c6e47f142e20: 2a40ff1f-4494-4db1-8e8b-1560f5ae0b45 + - 7248fd29-ec71-4bc5-8598-09fdc27b8ef2: 7c53858f-523a-451c-9ada-9112151d87df + - 72c595e5-66ca-4ab3-aa41-909151244dbf: cd286a5c-5e95-4cb0-8680-5a238eebc33a + - 736562f6-84cf-42fb-82b8-335291e60254: 2b3b3079-d010-4f80-b3de-b51fcb3d4f57 + - 73e0b27a-6485-47b6-8403-ad1a30991aec: 7af8f4d0-cd1d-4d0e-b395-028e41c9b290 + - 746d0107-53fb-4141-9ac3-f8d4a4de25f6: 0724cc1a-aac8-4dc7-b552-c63aadfb2934 + - 747d7d5c-fc2d-4ddc-a9ab-c1abc047f7b3: 4d50842c-3e9c-47c1-94e9-9117bc3bb7df + - 74981c66-edd9-4260-a7b2-61bbf6064923: a151c0ee-4b33-43aa-b9f4-25bf06a0adeb + - 74abefc1-8f07-4b85-ab38-56f79d4121cf: 113ef412-c8f7-4b7e-a3ab-e59df2135943 + - 74d37439-a2c5-4936-bd7e-146ad61f3b29: be79e43e-3607-42f5-93e6-051525a200e0 + - 75a95bf1-07a7-4dac-b2e5-ef8509904b6f: 8105b0c7-f201-4c2a-aedd-7e2b4d4b0af1 + - 75f06a71-2897-421b-ad76-29a8983210d0: 88f531cc-523c-47b1-9231-7c166961c7a1 + - 767704e3-511e-4e8e-9d9e-9f375398bbbc: 8b609d83-09a7-40a8-8b77-0ae7dcf1077a + - 78314fe3-2dee-47f9-a5fc-217c8c9f8ad7: 5af59c8c-af51-4d43-86dc-b441125fe967 + - 78df9761-cce5-4f60-b157-14385776c01d: bc68a313-97f1-497f-8510-ad525c2932be + - 7a2899c3-b02c-4f81-9a90-ed8511366a54: c96dd1f8-ec5d-493d-a625-9b2970317b56 + - 7a693d58-f56e-4a23-a5b4-3c7927f0818d: 8f396bfa-9149-4d15-ba96-dd5c7a1633e9 + - 7aba5d5f-52d6-4e86-bca4-7610c2d8727f: 181b1c2b-67d6-43d2-8fbc-91f5fa73afd4 + - 7afaeb92-e743-4ebb-a2c6-df9c16df5075: 8197be4b-6667-4511-90ec-3764aaf7097e + - 7b2af8df-1c63-4356-b8a3-c24a66c38bc3: 76a4091e-15c1-4831-87d8-b69dbee3f873 + - 7cbd058a-7032-4245-9f74-7b32af034bb2: eaf4b260-3a9d-465a-8b21-86d130203721 + - 7d2c6118-bccb-4bc2-88cf-97a6b5513a3b: 3abc2130-bd88-4fb0-9f9b-2637a20f2c13 + - 7d5f6ace-4259-4c08-9283-5ae3414577f0: 22a58330-8626-4c4a-8423-4ef292fd378e + - 7d7a7faf-c376-49fc-a67b-0b905d3f561e: 452961b7-9236-48e9-b535-1e628e00b8bf + - 7deecf52-223d-4f77-ac95-fa2b779f5f09: 7eb53a6f-c678-4769-86c8-ffa9d6a29bc8 + - 7e31cf4c-750a-4c67-90c5-c3531bd74976: c8325863-b981-4ca5-a5b4-bc6192e4bf5c + - 7e855f2a-4343-491e-bcd1-fce3bac65aeb: 0c16c050-86ed-4ecc-b1c0-08f7ba5fa8d2 + - 7ede0b47-3e67-481b-adec-2841a1651a87: 1fcdc7cc-c2fa-4a12-95f4-caeffa79295e + - 8131f7cd-4328-419d-8b64-44ca9070139d: 56774434-9c3b-455d-931a-2b3f3bf7ddfc + - 81841dbe-6094-46d2-8036-d4fe8d5e3d63: 6df7408e-475e-4290-b64a-6265f1d4f92e + - 82077845-5d34-41ca-8a29-b1b1e48a5f8a: 8fdab901-ff35-4223-8a72-2b6426756517 + - 83d5803d-8670-46ff-bb65-883b011f0b74: 4f9c951b-cdcd-4f27-a21a-c791f2f6855e + - 8488c269-5631-4f05-832a-bb86fea89cfd: c7f768bc-3c72-4081-9c99-c40b0d7c90b6 + - 8496b5c1-00ea-43de-aad5-2e7c49cc31e8: 785ab6ec-0c8c-46e8-b96d-80269823118d + - 84db67af-fd9d-4a13-bcdc-78b87676416e: d918b75d-d600-45fb-8d41-0c40a86951f9 + - 85195081-b4a3-4737-befb-f54a354a30b3: ebeaae85-cb2b-41e4-a902-44286f2258be + - 86b17c3d-838e-4a5c-a0ce-f14ca0365958: 9534ce89-22a4-46e9-8884-3d08d4c2c179 + - 86cd1c89-4acd-46a5-9300-bf400950a160: 046ad65b-f330-4692-9807-fbd95f8061f2 + - 87096967-a3bc-4d41-b656-a7c1fcc611d1: b76315cc-03e3-415e-a637-41a465bcf947 + - 87733319-b91f-4989-a00c-9e48c2b2f8bb: ab173257-917c-4083-96cf-db6a82c6ae1b + - 87da1ae3-6df0-4afa-8f7f-36d2537312e5: 7893756e-c8a5-4329-8b06-67ff294f05ad + - 8946e655-453e-4b63-bcea-3578089bd248: dd029e31-8ad4-48dc-a2bc-5fa83ab2622f + - 89f336af-a54a-4771-9123-43c3e0d36098: 1bc2d2b6-d80d-496a-b99c-ca9c78f7d72e + - 8a56e0cc-2f49-467e-a7ba-d03a823fdfd7: 85db361a-2725-4fdc-b752-1e0403bc821c + - 8ba0a378-a2b5-4cae-bdda-10b0c25634c6: 167de8eb-9f40-4d6f-8d89-3beba468e431 + - 8bff9b45-f459-40c7-9888-907eb306c19e: dba0a409-027d-4f2d-b4eb-cf1c204c780d + - 8c37b96f-c1b2-4f46-a25b-ed6861f2cb91: 55620f11-ba29-4773-ae0d-040e31ce992f + - 8caf4268-d374-49a7-9689-d9405863c584: 3a75d733-5107-4a4a-a6de-0204e4089a00 + - 8cbf86dc-678e-4587-9018-24c77fcb87ba: 20d2fbd5-6bf0-4241-9c0d-8258178f6789 + - 8d4da315-31b6-4260-a5b9-33ab66f361b6: e9bbe9da-6b36-4e99-a4cd-1fe2d28d823d + - 8de4606b-d030-4494-93d0-78dcf4e89ee7: cd4cac9b-7761-4921-b9cc-f78b074bab79 + - 8ff150de-0826-44a7-b007-b7d63b771dec: 47f40157-724c-4a3d-b60c-1553311e79b9 + - 90241a03-c90a-4adf-a5f5-a73ec8f537fd: 765da78a-e794-4604-a38a-33a1c38d7406 + - 9188ad33-5b31-42f6-803b-bdc32eaa3b84: d7dd6d05-6624-4493-851c-85aac0ab3ad0 + - 918c5760-db78-41a6-85e3-422aad5871b6: 5d5387af-074a-4c33-8685-b78f1dd4946a + - 92737940-b030-4998-9544-b7191c1c1cd2: 5d4a954b-d8cc-4290-917f-fc4284b79c3e + - 927ac346-e697-4d0a-9b9d-0e3f2e94a1ea: db4b404e-9f10-4f88-b107-2e38bd2b1afc + - 92d62d0b-7784-4366-a98b-d8c7b871a20f: 7476680a-1828-4517-8b6d-a38bee74bd03 + - 93236546-1c9d-4e45-80ef-f91fc4d8b825: 45df5018-4c58-44a4-a17a-af1b1cb86c97 + - 944818d2-970a-4095-809e-ead99a336bee: 37ff6fd2-8e27-4f86-95a5-fca66569fa01 + - 947f369e-0829-4053-a910-a4495d8f718c: ebcabaf7-993b-47f4-9ff6-1b867297f822 + - 94b1ea6d-0acf-48e0-94fd-976cf245ae26: 56d3fd6e-f907-4278-b5a6-0018fe1b0c8c + - 95ed011f-c8a5-469d-8a2b-cd95475e2dc9: d3a91d49-4352-4b77-8235-8d2d19bc7d82 + - 9691d251-33d9-48ef-afb4-918aa0e504a4: a13e9ccd-85a2-499c-b743-a73945646374 + - 969f2fda-6380-4c12-a720-cc66f27af219: 7da90f4e-81a7-473d-899f-301ae7076b02 + - 98246104-48dd-4773-a262-901eb025dd7f: 44cc41b9-1913-4614-aa74-d6adf8658156 + - 984db3b0-1a01-4963-8136-336c958e1a49: 558e82e4-7a36-4097-a16b-3b20d9d0f94b + - 99f579a8-56f0-43e0-a8d6-487767601be0: d6404b8a-628b-42e8-86d6-74a1d1136133 + - 9a0d0de2-a18b-4052-afdd-3dd3f5b36527: dc6b7e84-4d7f-4754-b5ef-7a8e8995a9cc + - 9ad84203-8f0d-4264-899f-55d41d0e1a6c: 3d616bb9-24c1-4adf-98db-b952a6c24a59 + - 9c5d0a62-61e2-4cee-a999-b414d94681f4: 34a68439-22cf-4285-b2f3-249a4aea3de8 + - 9d532054-b0c0-4010-8794-fa57c9799d54: 802c2599-cd73-47a3-9a39-9fef13d5fff5 + - 9d8bd7ef-b6c6-4a95-a2b0-34dda1b75769: 51eb6c8b-6a73-40be-85ee-eaf700c954fb + - 9e4589cb-dc87-435e-a8b6-c3ec7013e095: 1f6fb280-f4da-4a40-8668-dab2d0ffece2 + - 9e4623b7-d7f6-430b-bef2-1cc4a68ffdf2: d6bcb589-b766-430d-aed9-b1cd72971db5 + - 9e96b8e0-7368-462e-9b7a-a04eb624490a: 003e260b-935f-42ae-8dab-6f258ac7d789 + - 9ee0722b-8f29-4246-9a71-2a4b02882ddb: 37b4795a-0ce0-4e29-b3cc-79aa3cb81fbe + - 9ee13996-ea94-40aa-91c1-44c14a55384d: 6d036508-bb0c-4eeb-921a-e1c468dc27b9 + - a03315b2-80a7-4126-94e4-542b4a230120: 7a8db928-d205-4f3f-9d59-a7a13759da73 + - a0358279-a981-46bc-b610-1f660aa06e5c: ef252a02-e448-44b9-9e43-6cba7ea7c0f4 + - a06f7e1b-f9f5-4b92-bb81-adb228cbfb7f: dac6b2b7-1406-4985-8845-ad76d0070ec6 + - a0ff9305-b2fc-4a9a-9ec7-2c9d75c8cc52: 89a48c4f-a109-4b28-ae6a-9f30cf6965a2 + - a12dde47-121d-4cc8-9c0b-b81035a9e978: f529cf51-4d88-432a-b6e5-ad66743c842a + - a1b06eaa-4ccd-49e2-91f2-a8cfece5254b: 6b10defb-e495-4de9-8e7f-87ff83364433 + - a24709e6-9797-4a70-aa6a-d81e0fd831a0: 56885160-9bf6-4d66-9330-0a8001c1ffd5 + - a30edd5e-d264-44de-8689-bfff92353aee: 135c6c93-94ae-40eb-9436-9d5c7d4c1b76 + - a3ef195a-5bdc-4d96-a4ad-9d149a2f4d5e: cc753256-5251-4a2a-82fc-52cff4435a21 + - a420efdf-55b7-41cd-8bb5-89bc9e34d8f4: 9129b095-809f-453f-ad22-f9ac86c7ab8c + - a45d9874-f37c-41c9-b74b-fc5b8b804b30: 7ad2c4a8-399e-455b-8a94-7810c8cbaa96 + - a4c95fe5-9113-4626-9604-b71973fb5abe: 98c2d544-25c1-43a6-a6f8-d396385399b1 + - a4ff8efb-cb3c-4ef4-b0cb-5154d4ef58c0: 8394cdc8-b72c-44c6-9b2e-30b2c9ef6d1a + - a5085698-9e91-491f-be4e-030b54c684ea: 2a386676-8605-4331-86a5-5368d51335e6 + - a55d6f68-e6f9-4376-99a1-a927c3ced661: a0cf2921-1212-43f4-a56b-59e3efd1efc0 + - a6460eae-c017-41cd-8937-2c7b9df6c62b: 09f0b7d0-42b3-4eaf-9c54-fef40b29a0dd + - a674c3db-9f91-4c31-8fa5-f8b9f9f7c26b: a7132f3e-b959-4445-8c33-d83de440a0c9 + - a6a28de7-2cc3-4d68-a985-66f0fa9c4164: ab13ce74-b5bf-4771-ae1e-22e99dd33e6a + - a6a33942-2295-4ffb-b9b7-ccc78ac22bdb: a77c1eb1-9593-4438-87b1-ae63ecf14f5d + - a6e780b3-03cb-49aa-8d53-83150b2bd5d6: 6b8948bf-e1c5-4626-9164-fb0631b13322 + - a7b6d8d2-7c2a-48d2-aaaa-ae84d5f350b0: 8de418d3-b497-4ee3-aef5-c35c7c478a08 + - a89f456c-11a1-43fc-bfa8-912646e3efd9: 0b1f59da-99c6-4369-8496-d54668056c4e + - a926d3f6-4c43-4f85-9ff3-fdf0b8a43975: 80935988-d850-43b0-8489-fdfb937b76e4 + - a9993c60-2bf2-4062-bc65-902e1a421c4d: 6f2f7e56-ab07-4f8b-935a-c0150d74e9f6 + - ab2efbdd-f11e-4691-bafc-7325dd21c9ce: 4b15a9f7-2cc8-41c8-ba9e-c6c69e562721 + - ab8ba6a3-368b-439b-bc27-0f396e4ce6eb: e08f8232-5976-4c1c-8716-e28147a6ce64 + - acede8c7-aa51-4bd1-b85f-732bd8508449: 9cd18e63-f258-47f2-8eac-80b575acda0d + - ae1918ba-2448-469a-b337-76e5a4816f4c: f14127e0-d9ae-44ec-8230-3851a3639162 + - aed39f34-e15e-4c1f-83b1-180afb830e27: 61324e68-e226-4eb2-a96a-63a07ecc0e98 + - af18f812-3c7c-4c4d-b162-5fb8957ea933: 07f1854c-abc2-491b-b8bc-a3501222feb3 + - af555212-8f01-4ef5-ae4b-f6165bfa9524: 2dc056c9-08ab-4593-a8d7-e2e7ad71861b + - afc699c7-a1ac-4bb9-9288-3b00af3d4f6e: 6c6cb8b7-3a98-4d0b-aacc-d52cbec6726a + - b04e02ae-2d83-4ddd-ad4b-d9d44e288ea4: b0ec31f4-bb56-429d-9647-d6bb45861c8c + - b1daa443-4454-49b0-b62e-888fd23b0dff: b487fcf3-002e-4822-9625-f02956fbb781 + - b2e357ba-668a-4213-a09f-fb4fc2ad02bb: ca21cb84-c838-436d-9705-24c3cbd196e1 + - b341840b-5fd1-4f31-8d01-e00181428d23: ac621d0d-1025-411f-81cc-831e5e3dd00b + - b3638d6c-5f3e-48f4-b0ed-dfb7bedc6e16: 53ef3073-ecda-40c9-a16c-83797dbdb78e + - b3f6fd6f-4d32-4d30-ab3a-893f7e77546f: 6777d912-e79d-4f3d-8a23-f24d7acdd522 + - b40e0144-e33d-42b1-ba14-df79a03a9dec: afc5e3b1-eccd-4f59-a2f8-53a0a63bd646 + - b520b5ac-c0da-46bb-a00c-baecbc88e66b: 4d93040b-0877-4dc1-a0c2-a495016de83b + - b5eec3f8-31fe-4836-97ef-9f94c6079d27: d07d1906-eaea-4b71-92d2-bea1f8736f92 + - b606a2f9-401b-42b3-9eef-918b489cf6e1: 04ff2d6a-03de-4b0a-bedc-a4b282d7efc5 + - b7fba43c-452e-419c-b421-7f9ed959fc9d: a0bee32f-a528-40cc-8704-9dd39691c1a4 + - b8e0963f-7ab4-4b2e-a055-bdc1be1c3170: 7cf0f5b2-75b8-4fac-ad13-712007347647 + - b9399f57-3264-4290-a881-1002961c0426: c647f5e5-a48d-4552-99c7-630bcb3fc5af + - bb11bac7-b260-481e-b248-3310cae98857: e7a1b64d-9ae1-430a-a584-51a434e45381 + - bb1bcce0-ba3e-493a-a321-bfd9d4b75942: 83fdf92e-7285-4864-b7f7-b56573f0e2e8 + - bb88b162-47e7-4d0c-a288-dbe06511a990: 6a863191-faea-4432-b7f4-41bc539cc8e7 + - bd8445e3-a912-42b5-8817-15b3833aad22: fc907ca1-b2f4-4ae3-b49c-9f8448ca0be8 + - bf4229f1-c6a5-48d1-a38f-f04b89258a5f: d2e60671-ae1e-419a-ac5e-3759a34df741 + - bf681195-f9d5-4c14-b881-deb9c183055f: 491ecefb-13cd-4356-a5d9-73f442a5e381 + - bfbc951a-f9ae-4621-976e-7894a79478ac: 6ca8c494-08e6-480c-a6c0-b3dce62bd692 + - c2708339-9d3b-4cb9-9020-f226fbffaa73: 6582d0d3-dcc0-4a82-ab92-bda59d4ae4d3 + - c28c16aa-b964-4fb3-b0f2-7f9ca2ba897a: 7a4a44a4-8a66-4320-a3cb-c5fc4a55bb4b + - c2edfd34-c09a-4e38-b5da-299dd2e2923c: 96a77374-8d65-4258-afa8-56fa7dd9a353 + - c3e60476-e9ab-43b7-bc77-52de2f551ea0: d39d54db-1af5-4c4c-bb64-507cff2a8752 + - c4785331-76b4-453b-92f9-c742c70bb179: 8fd43d53-4707-4755-ae21-281babc4a8a5 + - c4b1a1e6-7665-4e82-989c-66a8fab1e47d: 3d9571e4-4397-4319-9187-0d1f83c516db + - c4c75723-2bdc-433d-add0-da9d609b0f2f: 5857ba63-8e4c-4afa-9413-3ef6d3184e32 + - c4fb2a89-29e2-4cd0-83a0-caab4b180dd8: 2db42466-df60-43ff-b942-b0eedd705abe + - c5537a7d-0960-46f6-8f0a-33da2df70200: 46a75696-6bb4-47d5-bc0c-903f6a797471 + - c5f05e5f-4892-44c6-ba72-b885668a23ad: 18acdc7e-459f-4219-bcd5-8614cb2776ef + - c6493c14-cfc3-477b-9afa-7bbf6fda80b0: dda21d7e-d8c9-4a0c-9917-d73df68d6f29 + - c73c04ca-7c3c-4e28-b9c0-d2c66644aef0: d7a4041c-a405-456a-abc8-fb551d8b3b00 + - c79fd486-6a0a-47f5-9546-2725f694a92f: c5214645-e492-4c75-9778-3acb61503472 + - c7ce6262-5a95-4210-8fa0-05580c6a88db: 30bf6d19-885c-42fe-8195-3e71e8c3918b + - c81a5037-9552-4a7a-b402-6e5afdd00132: ed7615db-bf66-4ceb-9b6d-94585dfba275 + - c88da200-d694-4e27-b433-47aa0ae56ce9: ebe15137-3734-487c-a0d7-b498f241e8c1 + - c9cd2679-ba09-4f0f-98d7-ec3140e249c7: 2572bdd9-c2de-4adb-be7a-d53217cf7db4 + - cc59c548-1073-432f-a3f3-f7c64e11ed14: c12b6591-caa8-4433-b420-c3efc693593a + - cd4e3b1e-183f-4798-a3fa-c7b0750c0f3c: 106da489-c9ac-43c5-a0d6-fb0b298dafa5 + - cd908cfd-824a-41cc-9781-34ee591c98cf: 31d5d1f8-ab79-49d8-a722-f663eda27502 + - cd9e68dd-f5be-4988-b4a7-d75258adec0b: f7d350e1-f928-42ff-9a3c-3460594bfa00 + - cdb2e0d6-79db-45a6-8973-928bf679f9f8: 7ccb99d7-f247-40cd-a69a-cebd151fb182 + - ce8466fa-1f06-4ffe-9845-a396fcd77c99: 1353aaef-a78a-4f70-80ef-f2c9fe717ac5 + - cf16465a-48d6-40af-9531-15312d8ec38b: f740487d-923c-4156-bad2-f1deb9c49131 + - cf4d228b-cd28-48c1-962d-e1b9c5869f60: d5ef0869-3c0f-4768-88e8-8eebbc747a17 + - cf959d62-da77-4ea1-bff7-009b4c99fc9a: 069fbe97-6520-486c-996f-8c2558d0aa97 + - d02de6b8-12a1-4901-b4fa-9d19c4742118: 57a0a9bd-d681-49fa-80c2-d0495e522a5f + - d0b648c0-f031-49e7-ac1c-c9072a903317: e6fe490c-8c1d-4b7b-a558-bf9a71e1e536 + - d3859700-4e38-4998-b2f5-741d92ebcb0d: 138717b7-e5a9-4398-bf7a-4411ba0af469 + - d387093b-00a9-4e77-827f-d97a6674158b: b5fef323-29cd-48d3-a043-4dc937b28241 + - d5a99a27-d079-430b-86ef-2ad6c533f962: 87ea7e7c-debc-47fd-9c33-4015328482c2 + - d61d8ea0-5799-4c2d-a758-e1b998b0776d: b15a8977-a4d7-4f88-9377-4f12a2485f82 + - d735f2c4-df3a-46aa-9406-a962db6277e6: 1894539e-bf0c-4d34-bc92-d5eca75e7589 + - d7a659b8-d162-4114-b1dd-7f7cc7713ce4: 00cec48f-5242-404e-a5fd-78f05c69d591 + - d7a920f6-7672-4c1a-a6fa-9df39a2df7f9: 70a5b7c3-549e-4a03-ba4a-127df073805d + - d87e6886-9a7a-4cb0-8f38-e908b690eef3: 749d5e61-5dec-4bb6-bb92-94dda1f3604a + - da621398-4472-42c0-9dd2-b55cbd96c86c: fd8de8fc-3999-4e0a-b9a9-745c28d186c2 + - daaa4347-1049-4c69-908c-884fdc3fcdf5: 722655c4-7fce-41bf-b7e1-e46c8987282a + - db52baa5-d1ea-401a-ab87-52542d8f88a9: 8f1be4e1-ff3e-47a5-a761-b6ed0d466561 + - dc1c6207-6fc1-4d5f-b59a-3f69a79b9bed: 2272c271-7b6c-48cc-ae08-d7d30dde682e + - dc570cd7-2f58-4639-b5aa-49876dd50978: e561681f-2b18-4185-97c1-cc7eb1d9c312 + - dcc3ad96-997c-4e0a-94bc-1ae501eb02af: 5c84b816-a8dd-4475-8337-964ddf2aceea + - dd09b40b-0105-4ecd-be01-30b393f470dc: 295cbbb9-33c7-487b-84e6-d554de447334 + - ddef3800-9018-4fe0-bbd1-a0e1b8df58ac: 5d0a5812-4c6d-46e6-a03a-09b60ae5de48 + - de34385c-1796-499f-a145-30de42478770: 0ba73682-6bae-4b81-ba12-1b46f58c06cf + - df57c6a3-ff27-430b-892f-54bd0cbb8aea: da181ff2-8374-4cc6-96f4-a40ed3d7e14c + - dff35311-8c13-4a47-aa27-7c81428bea0f: 8c43891d-652c-4699-90e9-d7d2c4dd0a29 + - e01f28f1-602b-4d5f-8baa-63b0f3957776: 805d8e27-4c57-4ffb-a156-c006b14f8ebc + - e126f97f-02aa-4ff3-b7e0-c00afa850a2b: ec316b3b-a56b-477c-96e9-a0567890c9c5 + - e136b9a2-8a37-4184-ab37-94e8afa47a33: 497f7188-a34d-4c52-9285-6ef486ad684b + - e2772a95-961f-4ea5-af46-ec9edb3d7b73: c7e7d299-e828-4a21-bdfc-cafd6c557c4b + - e3ae63cf-561e-4b6f-b2ac-fd0ae204da18: d80f0595-4e1d-448e-afef-e21fcc80f521 + - e3ae6904-21e2-4337-99d4-8425ed9aea30: 40fe63a3-fad2-482f-afb7-5f08fbf540d9 + - e41e4172-e7f2-4603-851c-dc05a0e21a3c: 4eef3acd-6894-43d4-b6e6-bba4bc729457 + - e4a334c0-89f1-4fce-bbae-e4fd01256466: aa952deb-b054-4e99-aa60-600cf2678371 + - e4ed526a-097a-49f6-b9ee-6e975ca6aad0: e73b1f1d-7c11-4099-9632-edabe94166a8 + - e769c593-4515-4020-a2bf-11dd93208bc4: 3a082b68-8c10-478b-bdc1-012debddbfb9 + - e9a27e62-d022-4adc-807d-d55d896a4742: 1edd2162-cecf-4e50-a261-9a28f7437ae3 + - ea3916e5-1ca2-40ba-9dcf-b879223def2e: aa4e29d0-66d3-49ee-b482-4a2a4c447d88 + - ea4f3347-9719-415f-a3de-b0d5707909ed: 31f296a4-9650-4bda-8d4a-2c5237911dac + - eb1e4612-0df6-4ade-a76e-06418f7ea742: 5773cc04-5773-434e-9985-2dd4200f1a77 + - eb3812be-7e6b-41c8-b613-68c8fb3b6f13: 2752b65d-df97-4c03-9eef-c5f00796c1c7 + - ebf29903-e778-4ba0-b2bd-8925aa9f4872: 74d601a3-8d97-441a-af78-5ec2a963651e + - ecb3ef5b-0458-4995-994d-aeb197dac3c6: ad378ea5-7cc1-4152-a022-3f3563680405 + - eccbd45a-a745-416c-a011-f1e0ca293492: e6f55aef-bba6-401f-8442-4101f628acdf + - ee02bda4-457d-4b91-9243-32cf461a5f92: ccc7cd7b-286e-43c8-8e4d-7b14c01d4978 + - ee21d19f-e0a5-49cf-aaaa-4e8b8018bc7b: 5f9a3157-9983-428f-93e6-951c5b5c929f + - ee29bf94-3e0e-428f-aabc-b6b910fb7db3: 04b7c790-5f7c-40a1-b286-b68c8346665d + - ee360366-a3ca-4676-8995-0d10669f47ca: b7a16c0f-84f2-4590-85b8-8bfa507e89d2 + - f00fea39-9eb8-4a3a-9afe-47d1a20fcade: 3e004573-ea7d-407f-a8e8-b3fe94fd4f4d + - f0e75a3b-9b96-4ae7-8275-a01d822b9812: a73f6dac-8037-468f-8acc-3b6bd9e770d5 + - f1545112-6a03-4871-8dd1-8e6ab04d0263: 07cce6c8-f5d7-400e-b3bb-70cfa0e5881c + - f1893cb9-4b02-4f1b-a98f-0a4d034e1a9a: 675942d7-d7d1-48fc-abd8-5a6bff7f56cd + - f1b07035-2368-4bb3-97d2-06364c05f94c: f24b3095-782f-4fbe-a900-138727112c90 + - f2925123-9c0e-4025-8db9-c72926964a10: 192195e0-0a93-443d-8f00-e0289ab40167 + - f2a17cfa-5b56-4950-8997-729b270c0943: d2ceb182-c8a1-43bc-9aea-ff239f340c22 + - f38fa9c7-4103-4272-b5e2-3b7124ed7ce1: 3bfe7b5b-6278-469c-b93c-63a04f1d5b02 + - f3ab0ac5-9a4f-4928-a3f2-e2c9ac4d084f: 093fe896-cad0-4c59-9e5d-8c596a8b5f77 + - f4029e40-76bf-4921-b70b-e4ce76a7bac1: 150163dd-7d0d-4bbe-a4dd-9ed2e0eabb11 + - f42901f6-dbe4-4b0b-8101-9e5808ddccd5: fd5b3964-1eab-4124-91f5-e57195abbe20 + - f5f034a0-d503-4083-8bda-b0dc37c1e8bd: 08ef5629-3d1d-4e26-8a1d-b0b7ae25f515 + - f6490bde-080e-4365-b78c-72954ee76228: c0a16006-a72e-46ea-b037-6f6055a8037e + - f68f0438-2abc-4fe4-afd7-77fb2758a16d: 2c79d8f8-6e19-4bc1-8c7e-eeb7b9172be5 + - f73472e1-698a-422a-9c68-84d1efe83979: f5ea9cd5-c350-473d-b0cc-9117263fd777 + - f763750e-d14c-4749-88e9-74125df2d29d: e63bf552-2edd-44f6-817b-8467a4db70e1 + - f80a738a-5010-43a5-858a-bbf56571ffe9: 26126d53-f439-4c11-a332-516f25d8cef9 + - f9e7eaf6-421b-495b-9be1-066e9c0dfcee: 6e56c65c-de07-4946-8e5f-49a71f90c0a0 + - fad9a75c-3477-49fe-8f5f-bc74206d039b: 2fcf0bf7-bd26-4474-b860-5a6c02503cde + - fae74c4b-9de8-469f-9c4d-9b8447f28821: 8f5afc96-f8af-49e6-8c59-93f62d72c98c + - fb381439-feb0-4d4e-9704-a129807cd14f: ceb35dbc-0c60-4f87-81a9-31f047f53fb7 + - fb8803fd-f4f0-41f1-ae2b-935e1724b9f2: 35ab393e-a4e7-4608-a60a-b9e0a5683dc9 + - fc150902-4b28-4b98-a419-1f0b2085126f: 24a7cc7c-689a-411c-b7d5-1f41b94b856e + - fc5d27fb-e846-4e23-b1e7-8b68f2054d5a: ff19197c-9428-4f08-9a91-3b0aa6da372a + - fcedcd16-8d68-488c-92cf-8fc3fb8e929e: 8f271eef-bc6f-44ca-8498-4d71eb993dc0 + - fdd99efb-e57a-4acc-8115-665e08974fff: 5236bf74-2c01-4cfa-8ac3-71def1454ab5 + Name: SIK Examples + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5d1ebe34-4748-49b7-b6d3-7bad94ca7426 + - ! 006192b0-6a28-42d8-9c20-7db3cf994249 + - ! f1893cb9-4b02-4f1b-a98f-0a4d034e1a9a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 72c595e5-66ca-4ab3-aa41-909151244dbf + - ! 37ed3092-73e5-420b-aedb-656b1c84ac79 + - ! b5eec3f8-31fe-4836-97ef-9f94c6079d27 + - ! 1ac296eb-35bc-4019-84fb-d66c59e1b19d + Components: + - ! 0e01ccea-3288-438d-9ec5-f16254ebd0bf +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 20ce429e-ff7b-42d7-8363-322863bfded1 +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: RocketPartSelector + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -35.000000, y: -1.927469, z: -100.000000} + rotation: {x: 0.000000, y: 10.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bb88b162-47e7-4d0c-a288-dbe06511a990 + Components: + - ! 2cbb881e-c22c-42b0-bfe9-c847ab1640d2 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! aed39f34-e15e-4c1f-83b1-180afb830e27 + - ! 18c0f8c9-eff4-4d1f-ba23-b359dcc52051 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 581eb383-c10f-47e0-8310-210d1491e7df + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: CursorController + Enabled: true + ScriptAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ce8466fa-1f06-4ffe-9845-a396fcd77c99 + - ! 38006373-7972-471e-be8d-3a6c4a67bdf7 + - ! 9d8bd7ef-b6c6-4a95-a2b0-34dda1b75769 + - ! 8131f7cd-4328-419d-8b64-44ca9070139d + - ! d87e6886-9a7a-4cb0-8f38-e908b690eef3 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f1b07035-2368-4bb3-97d2-06364c05f94c + - ! 947f369e-0829-4053-a910-a4495d8f718c +- ! + PrefabRemaps: + - 02a86b70-f0f0-41ad-87bd-21c32b796670: 8f5b51cb-131a-42fa-9ea7-67cee50d6af2 + - 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5: e3a7a944-c642-433e-b640-41b775d7e247 + - 050bbf47-8842-4bc2-abe8-7a28fc5c70ab: 6b721f55-2fde-4515-8a98-e0623db0c62c + - 05ab905d-7685-4e29-9db5-9042078af2d6: 93d669d1-3439-4d61-ab72-99f1c6f76a81 + - 07d5618b-22f9-4656-87fd-b0198fa0aeb6: d0f8de20-470a-4599-b195-7ae175fbfc78 + - 08614d83-f067-4740-a346-a0b10d1ffd62: 055525b2-7c1a-4f70-9358-23e0d7d156b8 + - 0b1bf884-4efd-4b6d-83ac-82540696baec: 283ab8bc-80c5-48db-8f22-6b4ab6e6cffe + - 0deb320d-887e-4b1a-b988-f11b2c4d951b: edcde6ca-b40c-4768-a7d2-dd31da71277a + - 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e: ad14db46-53e1-460c-a8bf-8c26bd57f37c + - 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a: 0473b266-866f-4f68-af21-9d3530e1914f + - 1353e5b8-fa96-4236-9812-7fd080b04697: 04ac8134-d110-4511-b25a-891f2f66584b + - 142880c6-721e-45a0-bdb5-e75cc9a91f53: c4bd0335-b377-414d-8521-c473e35c5774 + - 162925ed-6a4c-401a-a521-86902851061f: 5fb8a5cc-ee0c-4abd-bff7-cb1d3aa2a5bc + - 1ab3fbdf-e28e-45a8-943d-76938ac530b4: 12ba946a-1a8e-4e95-87e5-087ec0b249cc + - 1b6d2315-e870-4a05-9817-029318f16b5a: f4788f9e-4139-4eef-90bc-771177044cd8 + - 1b99283b-6388-4d39-a423-7be97ff2f32d: 9c6e9559-53cb-4842-afc9-a9cf725bce0a + - 1dc67040-bae9-41b8-960f-b57a94672dfa: ae4a9bad-4c46-4bf3-8553-28e8b9416cce + - 1f2cf37f-fd91-492c-a63b-884a08cd9215: 15d70faf-f504-434b-bc7b-bb474fac2980 + - 20841b1c-e2a6-42cf-9bd0-4fd466eae39c: 95dea6d2-2c8c-477b-a1f3-e372e02e6a0b + - 22e40d6c-4405-4a2f-9eda-9f5e0d425a75: b935b9b7-3c38-42b9-8045-c6609e019a8f + - 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2: 7e835154-746f-4b08-a586-447595fc19a1 + - 27db1592-a7a2-4e26-b369-afc71511fb9e: 72e54688-1bc6-48fc-89bb-5fc41b166ae0 + - 29d989ad-aee7-43c3-95e0-02735ba7dd2f: db24ae45-9fd3-4bac-a406-0cad45a3f045 + - 2b9a5b20-6a89-4fd1-906b-e97f4259712f: 0d34b376-2158-453b-931e-0189d0cf2dfa + - 2d1055e9-e5d5-49f7-8955-de8f46da0f6a: e8f1e2a0-17f6-445d-ad3b-100743436988 + - 309860a1-e8fd-49a7-8b08-343086fa08dd: a227f4f5-bb8b-4083-8ff3-76b300794afe + - 31df5cf9-9877-4359-9161-92964449a557: aff70df1-490d-4236-bfe7-1c9fcd1a028a + - 32346fd9-8168-4666-87d9-78060a1ebed2: 1f7bf313-445c-40f6-92ad-a40a50dea575 + - 3f2dd09b-edbc-4994-85a8-a366bf77ca69: 9f23857f-0354-4c96-a54d-0a74653401b0 + - 3f428eaa-6547-40ec-865e-50071201a35e: 4756a1da-6124-4cbb-af0c-1631649652f6 + - 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91: db9cf02a-a38c-47aa-b059-2faab8f74c75 + - 411b54bc-1db6-4fe9-908b-1f4f0a372ce0: ea14478c-a162-45e4-a7a7-af2ac18b7d4c + - 4527c113-2c46-40b1-bb7d-3acd00e22bd2: 94f70a69-9105-4332-988c-b375881b7bd9 + - 4696df6f-6058-47bd-8129-72a773a76e75: e0925a50-c8a1-4759-9d26-eac6079b1fdb + - 4971d6a8-a5fe-431e-b815-07883d1bd9b4: 2878109d-8f26-4010-b916-efdc9fecbdf8 + - 50f48cde-a492-4587-8b76-26cff1adec60: 2a62abd3-948e-4fb7-bacd-e846fe772fc8 + - 511aa840-3b12-48da-8eb3-6d4a20316ec0: a92fd0a3-ee3a-4273-a91b-d625d14ce8d2 + - 5173a6a1-dbb7-4e12-a52f-a3799a1fea13: 4f009679-ee66-4a0c-8747-6163b9934265 + - 52a3f271-30a0-4e9c-9f47-c80145bab1b2: 34e94d3a-2900-4f04-bbdd-8be35309a24f + - 531e560d-ffa5-433d-8224-6c252eb6a9bb: 64c3ab11-f5ff-4e18-91b8-c697a26228bd + - 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79: d6371ebf-1d3b-4bfa-bdd8-c0a7fabf8f39 + - 5bd739b3-039d-4f2e-bc80-61fd158ce1aa: 633241a4-412e-4a33-acb2-8487ae2291c9 + - 5da27569-8d52-4e61-a3ab-bb97294d4ce0: 02d483b7-4973-456a-94a1-5973d02ed09f + - 60037818-559f-4345-ac44-f7c5dfc86f3c: 50cf7888-914f-493a-8fcd-16a430ffe91e + - 6229e282-4449-48f3-8ef5-b90c67ba62fd: 5a63eead-ba79-4ecd-b8cd-509fbea8a4f2 + - 63462f25-ed20-4163-b0fe-197f3a97f011: 95f1c1ea-6b70-4e98-80bd-216ce18becb4 + - 6480de4a-e83a-4ebf-919e-d73bc4fd2eee: 3ab55c9b-dd82-4532-943e-d1df8f009177 + - 66d9ff94-deb4-4e42-bc41-0182a168c169: 12549dba-74cb-48d3-a50f-73daa0d64196 + - 674c121a-0fd0-437d-879c-9ce6b8f935fb: d1349dfb-66e5-406a-bab7-cbedc09f0583 + - 691be975-a6fd-42b9-a51a-bcdeebedb743: 7976d725-6d53-4c31-a2c3-f96d25c2b921 + - 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3: a0534ec9-6292-40ec-b6cd-859f7738f85f + - 6f50df52-5045-47a8-839c-bbd20bc99bb5: 1d1c8de5-b019-4d0a-adc6-1ad389890762 + - 711f9787-d880-4475-8f0a-0cf6b2492a6b: 2536fae3-02cb-4aa5-8c55-952afc929db0 + - 71450838-42ba-49f9-b33d-58b64a9b54c9: 94200c52-425a-43b6-8893-512b230a7726 + - 72ba5fa0-3395-495c-8d87-22bc85f50855: 1d87de05-c879-4ac1-8782-eaceafb0ab7c + - 7384c798-527a-41b9-862e-c12bc86376d3: b3bcf351-f103-47df-a4e8-fd46dbd2a734 + - 74914d99-aae6-4a1c-b4ec-d949b2a9253c: 24d6dc84-ed70-4a53-a3c4-9224488ec60a + - 75b74ef8-ecbe-4864-bb69-4c09f5be1606: bf692fb0-1af3-476e-97cd-092308e529f6 + - 771da37d-9459-45e0-8f98-9538710f0dc5: 0003afb6-e082-42ab-b89f-d22eb256f228 + - 77f1a5d3-8594-40b5-8085-79f1d46ddd71: cb2a32d4-1a84-411d-aa42-bf42bfa144e4 + - 780f2ffa-fc27-462d-85fd-d216d21e774a: 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa + - 78778cbc-4979-40f8-b213-f0cab136c8aa: efcdb1e4-82aa-48d7-adff-ea83aadec8f0 + - 7bb17581-fb13-4afd-9cfb-15d0180ba723: 3b52e609-bccb-4474-8396-af04afb47613 + - 7cb41a88-1dcc-444c-8349-a62b24a8e765: bb7fd053-b7b8-4148-9784-7a4ecfe99c2b + - 7d7953db-e981-48fc-b8af-77040f8455cd: 66b39338-c86b-4347-b964-852a182ec082 + - 7e117ed6-6fbe-4edb-941c-63a96b698e39: 822c9dec-583d-4588-bf8f-9e76769d9791 + - 7f36a885-824c-4329-8b11-919324b5c881: 7f240caf-60c7-4d5e-b716-5090899a20ce + - 80b63097-b1ef-4467-bdaa-a0a482172316: 0f43b8a1-5f63-44c3-9ba0-32318363dc57 + - 821f1d70-8d79-44db-bc8b-fabf613822c0: 33423227-0e0f-43a6-a69d-a713b9653e99 + - 826246a6-44ea-4331-85b3-702fa57389fb: 47ceb1fa-65b6-498e-af35-6f5af78c2618 + - 850751ef-604a-41bc-a846-0701b76493b1: 951124b2-906c-4f4f-8422-a881e9d98b4a + - 86412b42-c0cf-4fc3-a8a2-fe90221abc59: 4ca9e76a-f818-4a4f-954e-2777667c610a + - 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f: 37803923-6d4a-4268-aba1-ef5d1d23cd46 + - 8dbfcb2b-c189-46eb-960f-45c157d8484a: 4b527cf4-3e27-4559-b291-0a0b985b4717 + - 8e8470af-1ad4-4317-96d6-2bd90d653cbb: e417673c-029b-4df2-b240-55edb111620f + - 92490a16-2530-449b-8ee9-f65ff2095dd2: 345fde54-ce8d-467e-bc01-3c54e0129ca0 + - 933ca421-582e-407b-bfc6-206a10cef5f3: 5cc46581-44dd-43e4-a2c1-e2bd294a97e6 + - 9827271d-d758-4004-bc20-03cf1e136d1c: 1abd5650-e4e3-4218-9dfe-2d518a0b161b + - 9b586360-5bcd-4bd9-9646-5b5ef75f1788: eafdc1ea-a52b-486f-af4a-13a4f947b89f + - 9f2b3f06-77a1-4255-830d-ad50801287bd: eb708bc5-ef13-451c-b7b2-46398c05d999 + - 9f93fce7-edb2-4d42-b09c-939416f49cc0: 0b203467-22aa-4c6c-a7de-22b8f87e0ad6 + - 9f9bcf5b-6b30-496e-b734-5aa240e969c5: c3c87762-eca6-4731-87a2-f7596e7c0479 + - a114455b-6a9f-4990-a3cc-fa88e4a4829a: 59d49307-84ec-4eb8-aa0f-22f915eb8a4f + - a3ea66da-0ca8-4958-8d69-6f5045fa706c: 009892ac-73e5-4967-bd85-efc71c49f0a7 + - a3f4225f-153f-429a-8cd2-aa84d9db52ad: fb7196a9-d764-4f20-bf77-8d5722266d27 + - a53cac7a-4a63-4351-a6da-b868ffac9c0a: c609db94-d0da-4230-a62a-7f71134c5356 + - a650b8d7-507a-404b-bfe5-9602e915dae8: 861c2385-029b-4a3f-bb80-aad4ce6de18d + - a72bed4c-f7e3-4691-93f3-d06d66d75dd0: 32b9372e-60ad-430c-87fe-a43f6258b4e5 + - a813a7a6-1822-4279-8348-2c314e6ab150: 224e1b84-2cd6-40dc-8b4d-39e26681bfd1 + - a9edf4cd-40ec-4fe4-83b1-2f9439932ef0: 341ee23b-b82c-4f55-b23d-193c0df5c016 + - abb42942-9861-46af-946b-236bb527035f: b0e47302-1cbb-4346-a62f-8e341c73f7b5 + - abcc8726-930d-4609-b007-74454c9f20f9: 3b885064-9472-4754-9b78-42ff961487b9 + - b27cfdfa-9f62-4102-83e8-b9bedf8c2910: 682266ba-13a1-48d4-92fd-608428328dfc + - b297e024-8530-43a8-9271-1d093788af2f: c6e2a5f7-ab1a-4d18-a9d6-a0cd79b37fa7 + - b2d002f5-2b50-4f66-8c0d-93d5dba56556: 28b286b8-7e97-4ed0-bbce-b813966137ff + - b55b19ef-83c9-4922-aaea-ded86b65a663: 22806c77-18d4-41eb-81b3-b85d1228c059 + - bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7: 1573681c-afad-4710-bf30-13ab306587e0 + - be49fb74-bd52-43d9-8ea6-b79a6965e36d: ce6d11c6-be32-4e32-b7b8-6c199feef4ea + - cb14c3ea-7067-409a-83f3-618dbe55e547: 87b21f5e-7b4d-4754-af21-4925af99ffb4 + - cd4ffac9-4a32-4dba-b0a2-db117c38b975: 6f03f0b2-6d81-4bc9-a49b-6d387e0245ff + - ce9ff426-cb39-478d-8067-8dea5e623fc6: faaefd86-d1ae-4d56-a280-766a06b98cf6 + - cea83226-8c66-44d7-895a-2480d9cc1c35: 5ce67bb0-6c08-472c-b67f-77bde9454993 + - cf2d9e76-9520-473b-8b9b-68ce183d22ca: cfce736c-a49b-4a3e-947a-32a8e98a4961 + - cfc52ae9-3c49-4c47-8299-82d37cdb1095: 8d2fc7e4-0fe6-43d2-b837-fbe1aa318543 + - d180e208-2df8-4507-8437-213a1fbd5da6: 3c0c8d96-d019-421b-8641-2f6c4fef657f + - d2c2e4e9-c17c-4ecc-902f-2283f319023b: 81d57b7d-0209-4404-a775-f7ef13ad4f97 + - d8ffb52f-2569-42b3-a616-c75eb7fe7e36: ca642efc-944a-4dac-beb4-508163707dd4 + - d9e2d13e-9f8c-4798-83f1-83fed0cdb757: e3a03ad7-eb65-485e-86e0-cd9f0e93e442 + - dcf6aa57-0caa-4b44-a73b-2e33da4f1428: 1e231994-34a6-48c1-94ee-339987f113c7 + - dd01563a-be2b-4815-85ad-bf139803cc1f: 5aee8ecc-3bc7-4fd4-a5bc-c0eaa693a469 + - dd368761-3c9f-4261-afbf-469cb4681d3d: f08c52f6-14c2-4ded-be77-3a2b3f47c577 + - dddd8a38-ce19-4f71-8776-9826e6597567: 96aa9a5e-354d-415a-ac80-5442481fec05 + - de62f5f3-2f86-4c98-b357-a44d603496f1: 1907c2c5-2d81-47ce-96c9-eeb579299134 + - e8194f5f-aab4-4dff-8e59-92d2aaf9c042: edd67c66-78f4-4deb-a3bf-c7b0b07504f3 + - e9344e0a-57f1-4226-9a18-a84052078b1b: 42c8f113-929e-4b03-b3c0-1e0908941234 + - eb361989-1d4a-41f7-a205-235ce6f4e3b9: 24d70dc1-4597-48e0-9370-c6e9293594d4 + - ebf022e3-0fd7-4f48-b695-a86d4509dbfb: 7ca6c509-63a2-4a25-877e-e28ae50f4f4f + - ec33c966-ab83-4e2c-9dd1-9abe30a16e47: 24b98cd7-d5a4-4872-b17b-a6bea152b437 + - efcda464-fbc4-45be-93af-a83450f936fa: 0465eda0-f2a8-46a0-89bf-aec9d8b8da01 + - f154d1c1-2595-4578-acc2-6872637af31a: fd649b68-8f72-465f-baa6-ceef905acca1 + - f2db0563-6c95-499d-8ddb-aa5cfaaf22f2: a216ab78-0022-4fc2-96cf-862ffa9f0371 + - f3c8087e-8414-4601-833d-96cf682f94d3: c224f6fa-05b2-43d9-b45b-0050539a4688 + - f66a2c0c-ecc0-41a4-be4a-21ad0c1b6cb7: 63d95309-a416-46c0-a21b-462bd3335750 + - f9d02a8c-71a4-411f-a21e-a7b3329c62d6: cb9bed1c-7640-4b13-9103-67d3e3ae7401 + - fc6a94ee-23d6-4637-a73b-30ac1b571eca: 5197ee39-b38d-42eb-8c32-d9938bfefb40 + - ff6c151e-214e-4216-8d76-8d4244e2a6e8: 481aca89-f9bf-4ce1-a3a8-d75fc0ff915b + Name: SpectaclesInteractionKit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 142880c6-721e-45a0-bdb5-e75cc9a91f53 + - ! abcc8726-930d-4609-b007-74454c9f20f9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + ScriptInputsDefault: + moveSpeed: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! e1075a24-89cb-4368-90aa-e14b04dd49ee + robotObject: ! 70821b0b-a006-4b39-b35a-5a679bec2460 + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + moveSpeed: ! 0.000000 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene.meta b/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene.meta new file mode 100644 index 00000000..891cac72 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/JoystickScene.scene.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Scene: ! 0a1ccb1a-fe88-4fbb-9883-e3af3c75fd99 + ImporterName: SceneImporter + PrimaryAsset: ! 0a1ccb1a-fe88-4fbb-9883-e3af3c75fd99 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png b/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png new file mode 100644 index 00000000..b2b32e01 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51e2b063c7245fdfdb21a2f4f221910c7553b6152bf23182c7c8e19496f0dea6 +size 1383 diff --git a/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png.meta b/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png.meta new file mode 100644 index 00000000..d60d20de --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/MaterialParams.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! a3034842-01f6-48b3-bc04-8c8431f83655 + ImporterName: FileTextureImporter + PrimaryAsset: ! a3034842-01f6-48b3-bc04-8c8431f83655 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Joystick/Normal.png b/Spectacles-2-Unitree/Assets/Joystick/Normal.png new file mode 100644 index 00000000..c96bddf3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf0fb3e11d82337b4f59cbd22b7a1ddfbf021051f067e2eeebd6c75b24060232 +size 1370 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Normal.png.meta b/Spectacles-2-Unitree/Assets/Joystick/Normal.png.meta new file mode 100644 index 00000000..630e2cd0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 632949d2-aeaa-4d1c-99ca-13eb8485c1e0 + ImporterName: FileTextureImporter + PrimaryAsset: ! 632949d2-aeaa-4d1c-99ca-13eb8485c1e0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png b/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png new file mode 100644 index 00000000..b3daff1b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3095508bad9dfd6f255ace5e4f209ab6e7ccc012bac156c93b62e502ffe8bcc +size 2915 diff --git a/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png.meta b/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png.meta new file mode 100644 index 00000000..1f588739 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/Simple Frame.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 4862c6b3-6c6b-4b6d-a323-1fbe4c6ce2a1 + ImporterName: FileTextureImporter + PrimaryAsset: ! 4862c6b3-6c6b-4b6d-a323-1fbe4c6ce2a1 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3KlBOhEuurEHBuAKO3fAKx diff --git a/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph b/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph new file mode 100644 index 00000000..507ec63c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e4b3adac8255b848e2f2766c1924497ddeccdf591485f9c16b319260cb2d1e3 +size 491882 diff --git a/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph.meta b/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph.meta new file mode 100644 index 00000000..12883c13 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/image_unlit.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 61cf3610-8b8c-42d5-bfa3-16ad5e796e2d + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 61cf3610-8b8c-42d5-bfa3-16ad5e796e2d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Joystick/joystick box.png b/Spectacles-2-Unitree/Assets/Joystick/joystick box.png new file mode 100644 index 00000000..d9437744 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/joystick box.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7fb69650da91dadcf0faf99b62c04876e016e87defbc7c5e09374d5fb05ea0f +size 146 diff --git a/Spectacles-2-Unitree/Assets/Joystick/joystick box.png.meta b/Spectacles-2-Unitree/Assets/Joystick/joystick box.png.meta new file mode 100644 index 00000000..f1dfd15e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/joystick box.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 5e57c669-2619-4caf-b769-1f5e422bb9df + ImporterName: FileTextureImporter + PrimaryAsset: ! 5e57c669-2619-4caf-b769-1f5e422bb9df + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph b/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph new file mode 100644 index 00000000..cce9f7d4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5afd1a9df82b7e7e24c059cebc8d40287ab8dd862c5445c3bcf7eeedcd434ced +size 75712 diff --git a/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph.meta b/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph.meta new file mode 100644 index 00000000..98b9915e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Joystick/pbr.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! a897088d-8563-486d-ba79-098666bbca21 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! a897088d-8563-486d-ba79-098666bbca21 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/MaterialParams.png b/Spectacles-2-Unitree/Assets/MaterialParams.png new file mode 100644 index 00000000..b2b32e01 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/MaterialParams.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51e2b063c7245fdfdb21a2f4f221910c7553b6152bf23182c7c8e19496f0dea6 +size 1383 diff --git a/Spectacles-2-Unitree/Assets/MaterialParams.png.meta b/Spectacles-2-Unitree/Assets/MaterialParams.png.meta new file mode 100644 index 00000000..b0a74a9c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/MaterialParams.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 094909d2-1e56-43e1-88b6-4cd62fec2c4d + ImporterName: FileTextureImporter + PrimaryAsset: ! 094909d2-1e56-43e1-88b6-4cd62fec2c4d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Normal.png b/Spectacles-2-Unitree/Assets/Normal.png new file mode 100644 index 00000000..c96bddf3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf0fb3e11d82337b4f59cbd22b7a1ddfbf021051f067e2eeebd6c75b24060232 +size 1370 diff --git a/Spectacles-2-Unitree/Assets/Normal.png.meta b/Spectacles-2-Unitree/Assets/Normal.png.meta new file mode 100644 index 00000000..a330d250 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! f7c0ecfc-f7ba-44b8-bd24-62337451798a + ImporterName: FileTextureImporter + PrimaryAsset: ! f7c0ecfc-f7ba-44b8-bd24-62337451798a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/PBR 1.mat b/Spectacles-2-Unitree/Assets/PBR 1.mat new file mode 100644 index 00000000..b1e5e068 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 1.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 868e684f-66a0-4eb5-b284-1ede4e6ee66b +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - ENABLE_LIGHTING + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 2b90fb2b-deb9-498e-8ff6-ce0dbf4ac26c + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: a3034842-01f6-48b3-bc04-8c8431f83655 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: f7c0ecfc-f7ba-44b8-bd24-62337451798a + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! a897088d-8563-486d-ba79-098666bbca21 diff --git a/Spectacles-2-Unitree/Assets/PBR 1.mat.meta b/Spectacles-2-Unitree/Assets/PBR 1.mat.meta new file mode 100644 index 00000000..50899ddf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 1.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 3d89be36-5c51-4c14-834a-f41ef61abb66 + ImporterName: MaterialImporter + PrimaryAsset: ! 3d89be36-5c51-4c14-834a-f41ef61abb66 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/PBR 2.mat b/Spectacles-2-Unitree/Assets/PBR 2.mat new file mode 100644 index 00000000..4f272d8c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 2.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 287fa54d-7b08-4019-9355-c1fd2be52f31 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - ENABLE_LIGHTING + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 2b90fb2b-deb9-498e-8ff6-ce0dbf4ac26c + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: a3034842-01f6-48b3-bc04-8c8431f83655 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: f7c0ecfc-f7ba-44b8-bd24-62337451798a + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! a897088d-8563-486d-ba79-098666bbca21 diff --git a/Spectacles-2-Unitree/Assets/PBR 2.mat.meta b/Spectacles-2-Unitree/Assets/PBR 2.mat.meta new file mode 100644 index 00000000..31a812f6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 2.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! bc12bc49-e5af-4e03-a0b0-cf2368ceaf78 + ImporterName: MaterialImporter + PrimaryAsset: ! bc12bc49-e5af-4e03-a0b0-cf2368ceaf78 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/PBR 3.mat b/Spectacles-2-Unitree/Assets/PBR 3.mat new file mode 100644 index 00000000..a27d822b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 3.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! a5546dc4-5b1d-4c70-9d75-21324c4c3ced +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: false, y: false, z: false, w: false} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_LIGHTING + - ENABLE_NORMALMAP + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 2b90fb2b-deb9-498e-8ff6-ce0dbf4ac26c + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: a3034842-01f6-48b3-bc04-8c8431f83655 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: f7c0ecfc-f7ba-44b8-bd24-62337451798a + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! a897088d-8563-486d-ba79-098666bbca21 diff --git a/Spectacles-2-Unitree/Assets/PBR 3.mat.meta b/Spectacles-2-Unitree/Assets/PBR 3.mat.meta new file mode 100644 index 00000000..d588f402 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR 3.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! d40c914d-acdb-40e9-a01d-5e70788cf6c1 + ImporterName: MaterialImporter + PrimaryAsset: ! d40c914d-acdb-40e9-a01d-5e70788cf6c1 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/PBR.mat b/Spectacles-2-Unitree/Assets/PBR.mat new file mode 100644 index 00000000..2e765b48 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR.mat @@ -0,0 +1,72 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8c0f0f05-c59a-4920-856c-2b1d8cd6471e +- ! + CachedProperties: + - baseTex: + typeIdx: 9 + value: + id: 093e6eaf-54cf-48bd-8d5a-346e6dea3dd7 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + - baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + - baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: FrontAndBack + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: Disabled + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! d331a7aa-ff7b-4e86-ac1e-52679d144976 diff --git a/Spectacles-2-Unitree/Assets/PBR.mat.meta b/Spectacles-2-Unitree/Assets/PBR.mat.meta new file mode 100644 index 00000000..bdf7ab47 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/PBR.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 259698e5-906e-462e-8ee1-16a5404fcf10 + ImporterName: MaterialImporter + PrimaryAsset: ! 259698e5-906e-462e-8ee1-16a5404fcf10 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Pyramid.mesh b/Spectacles-2-Unitree/Assets/Pyramid.mesh new file mode 100644 index 00000000..340c1f38 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Pyramid.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c54299bc527a55e6f03650a888f5ac2e5a64706ec35d6abc583322af7900d21d +size 1932 diff --git a/Spectacles-2-Unitree/Assets/Pyramid.mesh.meta b/Spectacles-2-Unitree/Assets/Pyramid.mesh.meta new file mode 100644 index 00000000..8c81f17b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Pyramid.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 66867a8b-e0de-4ca1-895e-04f0a1fc4b12 + ImporterName: FileMeshImporter + PrimaryAsset: ! 66867a8b-e0de-4ca1-895e-04f0a1fc4b12 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Render Target.renderTarget b/Spectacles-2-Unitree/Assets/Render Target.renderTarget new file mode 100644 index 00000000..e0ffb996 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Render Target.renderTarget @@ -0,0 +1,13 @@ +- ! + PackagePath: "" + UseScreenResolution: true + Resolution: + x: 900 + y: 1600 + AntialiasingMode: Disabled + AntialiasingQuality: Ultra + MSAAStrategy: OnlyWhenRequired + ClearColorOption: BackgroundTexture + ClearColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + InputTexture: ! 996c6f4e-b2ad-4117-9e3e-3db82e6e97f5 + DepthBuffer: Auto diff --git a/Spectacles-2-Unitree/Assets/Render Target.renderTarget.meta b/Spectacles-2-Unitree/Assets/Render Target.renderTarget.meta new file mode 100644 index 00000000..3e13b15c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Render Target.renderTarget.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + RenderTarget: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + ImporterName: RenderTargetImporter + PrimaryAsset: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/Scene.scene b/Spectacles-2-Unitree/Assets/Scene.scene new file mode 100644 index 00000000..efda8226 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Scene.scene @@ -0,0 +1,11578 @@ +- ! + PackagePath: "" + objects: + - ! 00000000-0000-0065-0000-000000000064 + - ! 0005641c-028d-459a-0000-000000014b4d + - ! ff6c151e-214e-4216-8d76-8d4244e2a6e8 + - ! d387093b-00a9-4e77-827f-d97a6674158b + - ! f2a0b7dd-7855-4692-8183-9d685fa1f688 + - ! e18a374b-a352-425d-8fae-30aa7a0d0f2e + - ! c4c5d432-4097-4f51-857c-52583b0bf890 + - ! acac0dfd-0ae6-4e99-b5db-402200482e8d + - ! 978ad28a-83f6-4e96-9cba-ed38007c8cef + - ! a8731291-452c-41bd-9315-a850e2087380 + - ! 84bafc52-ea01-4f87-a412-867fae0effac + - ! e71cef26-eed8-428f-b446-42c030905fba + layers: ! + userLayers: + - | + id: 2 + name: Layer 1 + color: 0 + + HasOrtho: true + RenderOutput: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + RenderPreviewOutput: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + RenderOverlayOutput: ! 00000000-0000-0000-0000-000000000000 + PhysicsRootWorldSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Camera Object + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 00000000-0000-0065-0000-000000000065 + - ! e5553c8a-0b7e-4ef4-92d9-3e1318fb82c1 +- ! + PrefabRemaps: + [] + Name: Camera + Enabled: true + renderLayer: 1 + MipmapLevel: 0 + RenderOrder: 0 + Size: 20.000000 + Near: 1.000000 + Far: 10000.000000 + Fov: 63.541019 + ClearColor: ! + Mode: None + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + InputTexture: ! 00000000-0000-0000-0000-000000000000 + ClearDepth: ! + Mode: Value + Value: 1.000000 + InputTexture: ! 00000000-0000-0000-0000-000000000000 + Aspect: 1.000000 + CameraType: Perspective + DepthMode: Regular + DeviceProperty: All + AspectPreset: Custom + OitLayers: NoOit + RenderTarget: ! 923415f5-4245-4675-ade1-6d69d6d23e71 + DepthStencilRenderTarget: ! 00000000-0000-0000-0000-000000000000 + MaskTexture: ! 00000000-0000-0000-0000-000000000000 + RayTracing: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Lighting + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 00056e79-b066-62ca-0000-000000001406 + - ! 0005641c-028d-4630-0000-000000014b56 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Light + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 40.000000, y: 85.000000, z: 20.000000} + rotation: {x: 70.000000, y: 10.000000, z: 150.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0005641c-028d-463e-0000-000000014b59 +- ! + PrefabRemaps: + [] + Name: Light Source + Enabled: true + renderLayer: 1835007 + LightType: Directional + Intensity: 1.000000 + CastShadows: false + ShadowDensity: 0.440000 + ShadowBlurRadius: 4.000000 + ShadowTextureSize: 512 + AutoLightSourcePosition: true + AutoShadowFrustumSize: true + AutoShadowFrustumSizeExtend: 2.000000 + ShadowFrustumSize: 30.000000 + ShadowFrustumNearClipPlane: 1.000000 + ShadowFrustumFarClipPlane: 1000.000000 + UseEnvMapFromCamera: false + EnvMapFromCameraMode: Auto + UseEstimation: false + EstimationIntensity: 1.000000 + EstimationSharpness: 1.000000 + EnvMapExposure: 1.000000 + EnvMapRotation: 0.000000 + DiffuseEnvTexture: ! 00000000-0000-0000-0000-000000000000 + SpecularEnvTexture: ! 00000000-0000-0000-0000-000000000000 + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + DynamicEnvInputTexture: ! 00000000-0000-0000-0000-000000000000 + InnerConeAngle: 0.000000 + OuterConeAngle: 45.000000 + DecayType: None + DecayLimit: false + DecayRange: 40.000000 +- ! + PrefabRemaps: + [] + Name: Ambient Light + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 65.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 00056e79-b066-62f1-0000-000000001409 +- ! + PrefabRemaps: + [] + Name: Light Source + Enabled: true + renderLayer: 1835007 + LightType: Ambient + Intensity: 1.000000 + CastShadows: false + ShadowDensity: 1.000000 + ShadowBlurRadius: 0.000000 + ShadowTextureSize: 512 + AutoLightSourcePosition: false + AutoShadowFrustumSize: false + AutoShadowFrustumSizeExtend: 2.000000 + ShadowFrustumSize: 30.000000 + ShadowFrustumNearClipPlane: 1.000000 + ShadowFrustumFarClipPlane: 1000.000000 + UseEnvMapFromCamera: false + EnvMapFromCameraMode: Auto + UseEstimation: false + EstimationIntensity: 1.000000 + EstimationSharpness: 1.000000 + EnvMapExposure: 1.000000 + EnvMapRotation: 0.000000 + DiffuseEnvTexture: ! 2013a19b-93c1-4f21-b7ea-876a33550c7b + SpecularEnvTexture: ! d795fd46-e16b-4cb9-8dfb-4ef227298f7a + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + DynamicEnvInputTexture: ! 00000000-0000-0000-0000-000000000000 + InnerConeAngle: 0.000000 + OuterConeAngle: 45.000000 + DecayType: None + DecayLimit: false + DecayRange: 40.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Movement Speed: 1" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 40 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -12.000000 + bottom: -1.000000 + right: 12.000000 + top: 1.000000 + OverflowVertical: Truncate + OverflowHorizontal: Wrap + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + ring-2: ! 2b9a5b20-6a89-4fd1-906b-e97f4259712f + pinky-1: ! cf2d9e76-9520-473b-8b9b-68ce183d22ca + pinky-3_end_end_end: ! 1353e5b8-fa96-4236-9812-7fd080b04697 + ring-1: ! 7f36a885-824c-4329-8b11-919324b5c881 + RightHandModel: ! 780f2ffa-fc27-462d-85fd-d216d21e774a + index-3: ! d180e208-2df8-4507-8437-213a1fbd5da6 + wrist_to_ring: ! ebf022e3-0fd7-4f48-b695-a86d4509dbfb + index-1: ! 5bd739b3-039d-4f2e-bc80-61fd158ce1aa + pinky-2: ! 7cb41a88-1dcc-444c-8349-a62b24a8e765 + index-0: ! 77f1a5d3-8594-40b5-8085-79f1d46ddd71 + ring-3_end_end_end: ! 07d5618b-22f9-4656-87fd-b0198fa0aeb6 + RightHandMesh: ! 78778cbc-4979-40f8-b213-f0cab136c8aa + wrist_to_thumb: ! 309860a1-e8fd-49a7-8b08-343086fa08dd + index-3_end_end_end: ! a650b8d7-507a-404b-bfe5-9602e915dae8 + mid-3: ! 6229e282-4449-48f3-8ef5-b90c67ba62fd + index-3_end: ! 20841b1c-e2a6-42cf-9bd0-4fd466eae39c + index-3_end_end: ! ce9ff426-cb39-478d-8067-8dea5e623fc6 + pinky-0: ! 050bbf47-8842-4bc2-abe8-7a28fc5c70ab + pinky-3: ! 29d989ad-aee7-43c3-95e0-02735ba7dd2f + mid-1: ! 9827271d-d758-4004-bc20-03cf1e136d1c + mid-3_end: ! 771da37d-9459-45e0-8f98-9538710f0dc5 + thumb-3_end_end_end: ! 75b74ef8-ecbe-4864-bb69-4c09f5be1606 + ring-0: ! bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7 + mid-3_end_end: ! 4696df6f-6058-47bd-8129-72a773a76e75 + mid-3_end_end_end: ! a813a7a6-1822-4279-8348-2c314e6ab150 + RightHandRig: ! a3f4225f-153f-429a-8cd2-aa84d9db52ad + mid-3_end_end_end_end: ! a114455b-6a9f-4990-a3cc-fa88e4a4829a + pinky-3_end: ! 7bb17581-fb13-4afd-9cfb-15d0180ba723 + wrist_to_index: ! dddd8a38-ce19-4f71-8776-9826e6597567 + thumb-3_end_end: ! 9f9bcf5b-6b30-496e-b734-5aa240e969c5 + pinky-3_end_end_end_end: ! 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2 + ring-3_end: ! b297e024-8530-43a8-9271-1d093788af2f + mid-0: ! 0b1bf884-4efd-4b6d-83ac-82540696baec + ring-3_end_end_end_end: ! cb14c3ea-7067-409a-83f3-618dbe55e547 + ring-3_end_end: ! 933ca421-582e-407b-bfc6-206a10cef5f3 + thumb-0: ! 5173a6a1-dbb7-4e12-a52f-a3799a1fea13 + thumb-3_end: ! 9b586360-5bcd-4bd9-9646-5b5ef75f1788 + thumb-1: ! 9f93fce7-edb2-4d42-b09c-939416f49cc0 + ring-3: ! 71450838-42ba-49f9-b33d-58b64a9b54c9 + thumb-2: ! d2c2e4e9-c17c-4ecc-902f-2283f319023b + wrist: ! 826246a6-44ea-4331-85b3-702fa57389fb + thumb-3: ! 1b6d2315-e870-4a05-9817-029318f16b5a + mid-2: ! cfc52ae9-3c49-4c47-8299-82d37cdb1095 + wrist_to_mid: ! a9edf4cd-40ec-4fe4-83b1-2f9439932ef0 + pinky-3_end_end: ! 5da27569-8d52-4e61-a3ab-bb97294d4ce0 + index-3_end_end_end_end: ! 02a86b70-f0f0-41ad-87bd-21c32b796670 + index-2: ! be49fb74-bd52-43d9-8ea6-b79a6965e36d + thumb-3_end_end_end_end: ! 1dc67040-bae9-41b8-960f-b57a94672dfa + wrist_to_pinky: ! cd4ffac9-4a32-4dba-b0a2-db117c38b975 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000007, y: 11.453500, z: 0.000008} + rotation: {x: 1.584790, y: -17.344000, z: -21.859100} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cf2d9e76-9520-473b-8b9b-68ce183d22ca + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002793, y: 3.304380, z: 0.000052} + rotation: {x: 1.238250, y: -0.000460, z: 0.010196} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 80b63097-b1ef-4467-bdaa-a0a482172316 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3e4c1312-d815-4f3f-9baa-263912eede93 + - ! 98b72d06-2bd6-4e40-87ef-9f46c5cd7cf2 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000001} + rotation: {x: -0.000081, y: -0.000080, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cb14c3ea-7067-409a-83f3-618dbe55e547 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + ScriptAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + mouseTargetingMode: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + mouseTargetingMode: ! 2.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.483100, z: -0.000001} + rotation: {x: 1.935390, y: 5.930260, z: 3.282900} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9827271d-d758-4004-bc20-03cf1e136d1c + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 30.000000, z: 30.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: -4 + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! b3f280b7-37fb-401c-b32a-585e6aa48f44 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[LEGACY] InteractorLineVisual" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3f2dd09b-edbc-4994-85a8-a366bf77ca69 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.166710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000019, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 63462f25-ed20-4163-b0fe-197f3a97f011 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 06ca2280-edb5-4e52-9f1d-f3220aaace7d + Components: + - ! d321ec87-9254-4ac4-83b5-a231ad981be2 + - ! 0e1e8548-eb2b-418e-88ad-04d72612c9cd +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Zero Torque + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dcde9057-44f4-4eb5-b440-646786b624c5 + - ! ed739757-4dfd-439a-bbd9-199e59f6af80 +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.549810, z: -0.000001} + rotation: {x: -0.000000, y: 0.176026, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 511aa840-3b12-48da-8eb3-6d4a20316ec0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: -0.000148, y: 0.000148, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[REQUIRED] Core" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ec33c966-ab83-4e2c-9dd1-9abe30a16e47 + - ! 674c121a-0fd0-437d-879c-9ce6b8f935fb + - ! 92490a16-2530-449b-8ee9-f65ff2095dd2 + - ! b27cfdfa-9f62-4102-83e8-b9bedf8c2910 + - ! dd368761-3c9f-4261-afbf-469cb4681d3d + Components: + [] +- ! + PrefabRemaps: + [] + Name: Cylinder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.760220, z: 0.000000} + rotation: {x: 90.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d642e8f4-b3d7-4008-a742-54a1cf702dcf +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Top + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Hand Control Status + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.490000 + bottom: 0.000000 + right: 7.500000 + top: 0.000000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 401e73dc-9551-455a-b594-3b4bda60750c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! dcde9057-44f4-4eb5-b440-646786b624c5 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.009104, y: 2.837160, z: -0.000745} + rotation: {x: -88.447800, y: 0.630570, z: -5.443090} + scale: {x: 1.000000, y: 1.000000, z: 0.999998} + hasSegmentScaleCompensation: false + Children: + - ! 7d7953db-e981-48fc-b8af-77040f8455cd + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.122509, y: 3.547690, z: -0.000037} + rotation: {x: -119.537003, y: -11.132400, z: -6.501390} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9b586360-5bcd-4bd9-9646-5b5ef75f1788 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.824800, z: 0.000000} + rotation: {x: -4.158420, y: -5.389360, z: 8.544330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e117ed6-6fbe-4edb-941c-63a96b698e39 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0e45cd00-9e1f-43e0-8111-a4c4cfefae61 + - ! 4ce3b575-cccf-4cf1-8830-9400dce4478a +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 81a063f9-3e18-467f-b8f4-3a3af1063337 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002904, y: 3.650310, z: -0.000110} + rotation: {x: -2.676430, y: -0.000566, z: -0.015133} + scale: {x: 0.999999, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 72ba5fa0-3395-495c-8d87-22bc85f50855 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! a047e555-f98b-4da9-af51-90992dd2fe13 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: -0.000002} + rotation: {x: -0.000039, y: -0.000040, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ce9ff426-cb39-478d-8067-8dea5e623fc6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 6feb078d-f402-4571-b43d-6190639f32a5 + _offIcon: ! d57003c8-6698-4b62-a29b-8c04ec378351 + _isToggledOn: false + editEventCallbacks: true + customFunctionForOnStateChanged: ! 968c4bf8-5a61-4ef0-b0d6-d05d415cf337 + onStateChangedFunctionNames: ! + - toggleJoystick + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 38ccbdc1-6e41-4879-ac50-2004a58aa2ca + - ! bf393b64-9dc9-40e5-ab5a-3ca3a03520ec +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! cc435628-7237-4d1c-814c-b9ba17297299 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! d40c914d-acdb-40e9-a01d-5e70788cf6c1 + Mesh: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: left + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! cc435628-7237-4d1c-814c-b9ba17297299 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 48b3f9a1-7c28-454e-baf2-f3a3b68db600 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! eacf8e40-e953-4ffc-bd26-bff04f254c11 + Mesh: ! 00000000-0000-0000-0000-000000000000 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - StandUp + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 0ad2a884-4ade-40e9-bf03-0d8820ed43ce + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 632b18e6-6d05-440d-a0a1-776f550490b8 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + stepBehavior: true + _stepSize: true + toggleDuration: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! -4.000000 + _maxValue: ! 4.000000 + startValue: ! 1.000000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 868eb3d3-a88e-4554-9f72-dd74fbca5b57 + sliderMax: ! 9858857a-ac1c-4288-a641-24504e767312 + _sliderKnob: ! d99ee51e-bced-429c-9b7c-b05cbd89762d + editEventCallbacks: true + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 788f9d33-db4a-46ec-aceb-4bf2c2834849 + onValueUpdateFunctionNames: ! + - updateRotationSpeed + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008174, y: 2.218150, z: 0.000077} + rotation: {x: 84.965103, y: 6.336930, z: -173.675003} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7bb17581-fb13-4afd-9cfb-15d0180ba723 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Rotation Speed: 1" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 40 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -12.000000 + bottom: -1.000000 + right: 12.000000 + top: 1.000000 + OverflowVertical: Truncate + OverflowHorizontal: Wrap + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleWaveHand + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.406799, y: 11.969130, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! aa8865d4-ef24-472e-881a-72fd5db06e6a + - ! 2f560299-7197-48eb-80ed-189f279cc540 + Components: + - ! 42b826c8-3a14-4d3c-8a71-f67458d6c44b + - ! 4febef3a-10f6-4fe7-86a5-dfcba1dc4c88 + - ! a8e56dad-5245-427b-8445-9a496e70581a + - ! 356b792f-1193-4802-8ca4-3e1bb0c884df + - ! c5bdb606-a8c7-4e73-b37f-4200f5051e28 + - ! c67a6cbe-6dbb-4508-a24c-4e6208d17668 + - ! 4b976c50-ebc0-4292-ab07-baf2dddbb6fa + - ! 4d50350e-23b3-4e71-a605-3bd10275c5bb + - ! edea7bb2-d448-492a-b2c4-2e8917f55eda +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001204, y: 3.309390, z: 0.000044} + rotation: {x: 0.145073, y: -0.000050, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 71450838-42ba-49f9-b33d-58b64a9b54c9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.192331, y: 6.274080, z: -6.174470} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1b99283b-6388-4d39-a423-7be97ff2f32d + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! ed8b9145-74d6-4edf-bfc1-1e72eb21872f + knobObject: ! d99ee51e-bced-429c-9b7c-b05cbd89762d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 062f45b9-c39d-4482-8ed1-ec8082a92d9a + - ! 80eab401-1efa-4a10-9577-075bd52ec6f9 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fd47002c-4bb0-4e31-a31c-11f9c3e29dd6 + - ! 33efc72e-5bdc-470c-bce3-d5649778db6d +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 27.434401, y: -41.097198, z: -59.864601} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5173a6a1-dbb7-4e12-a52f-a3799a1fea13 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 09a32fc9-c161-4ab3-abc8-692a5a11d528 + - ! edffa322-6ffa-42f4-97a1-2628efe52119 +- ! + PrefabRemaps: + [] + Name: LeftHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000001, z: -0.000001} + rotation: {x: -90.000000, y: -0.000000, z: -0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9f2b3f06-77a1-4255-830d-ad50801287bd +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + mid-3_end_end_end_end: ! f9d02a8c-71a4-411f-a21e-a7b3329c62d6 + LeftHandRig: ! 531e560d-ffa5-433d-8224-6c252eb6a9bb + ring-2: ! 74914d99-aae6-4a1c-b4ec-d949b2a9253c + LeftHandModel: ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + pinky-1: ! 05ab905d-7685-4e29-9db5-9042078af2d6 + pinky-3_end_end_end: ! dcf6aa57-0caa-4b44-a73b-2e33da4f1428 + ring-1: ! 7e117ed6-6fbe-4edb-941c-63a96b698e39 + index-3: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + wrist_to_ring: ! 2d1055e9-e5d5-49f7-8955-de8f46da0f6a + index-1: ! a72bed4c-f7e3-4691-93f3-d06d66d75dd0 + pinky-2: ! 80b63097-b1ef-4467-bdaa-a0a482172316 + index-0: ! e9344e0a-57f1-4226-9a18-a84052078b1b + LeftHandMesh: ! 31df5cf9-9877-4359-9161-92964449a557 + wrist_to_pinky: ! eb361989-1d4a-41f7-a205-235ce6f4e3b9 + wrist_to_thumb: ! 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f + index-3_end_end_end: ! f3c8087e-8414-4601-833d-96cf682f94d3 + mid-3: ! 72ba5fa0-3395-495c-8d87-22bc85f50855 + index-3_end: ! 7d7953db-e981-48fc-b8af-77040f8455cd + index-3_end_end: ! a53cac7a-4a63-4351-a6da-b868ffac9c0a + pinky-0: ! 50f48cde-a492-4587-8b76-26cff1adec60 + pinky-3: ! cea83226-8c66-44d7-895a-2480d9cc1c35 + mid-1: ! 850751ef-604a-41bc-a846-0701b76493b1 + thumb-3_end_end_end: ! 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a + mid-3_end: ! 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e + mid-3_end_end: ! 63462f25-ed20-4163-b0fe-197f3a97f011 + ring-0: ! 1b99283b-6388-4d39-a423-7be97ff2f32d + pinky-3_end: ! b2d002f5-2b50-4f66-8c0d-93d5dba56556 + wrist_to_index: ! f154d1c1-2595-4578-acc2-6872637af31a + thumb-3_end_end: ! d9e2d13e-9f8c-4798-83f1-83fed0cdb757 + mid-0: ! 711f9787-d880-4475-8f0a-0cf6b2492a6b + ring-3_end_end_end_end: ! 27db1592-a7a2-4e26-b369-afc71511fb9e + ring-3_end: ! e8194f5f-aab4-4dff-8e59-92d2aaf9c042 + pinky-3_end_end_end_end: ! 162925ed-6a4c-401a-a521-86902851061f + mid-3_end_end_end: ! 8dbfcb2b-c189-46eb-960f-45c157d8484a + thumb-2: ! a3ea66da-0ca8-4958-8d69-6f5045fa706c + ring-3: ! 4971d6a8-a5fe-431e-b815-07883d1bd9b4 + ring-3_end_end: ! 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3 + thumb-0: ! 6480de4a-e83a-4ebf-919e-d73bc4fd2eee + thumb-3_end: ! 411b54bc-1db6-4fe9-908b-1f4f0a372ce0 + thumb-1: ! 8e8470af-1ad4-4317-96d6-2bd90d653cbb + wrist: ! 821f1d70-8d79-44db-bc8b-fabf613822c0 + thumb-3: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + mid-2: ! 1f2cf37f-fd91-492c-a63b-884a08cd9215 + wrist_to_mid: ! 86412b42-c0cf-4fc3-a8a2-fe90221abc59 + index-3_end_end_end_end: ! 691be975-a6fd-42b9-a51a-bcdeebedb743 + index-2: ! 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91 + ring-3_end_end_end: ! 66d9ff94-deb4-4e42-bc41-0182a168c169 + thumb-3_end_end_end_end: ! 511aa840-3b12-48da-8eb3-6d4a20316ec0 + pinky-3_end_end: ! 3f428eaa-6547-40ec-865e-50071201a35e +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! a047e555-f98b-4da9-af51-90992dd2fe13 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 019d2db1-8194-4640-8ede-4ba7b2dff2ed +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Wave Hand + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 81a063f9-3e18-467f-b8f4-3a3af1063337 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 4c121113-c3c2-4ff8-ae97-2e9a47526b3d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Logs + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -18.290873, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5c1ed1b0-5ff2-4ae1-b238-a1986f98e13b +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 52a3f271-30a0-4e9c-9f47-c80145bab1b2 +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: -0.000003} + rotation: {x: 0.000050, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! dcf6aa57-0caa-4b44-a73b-2e33da4f1428 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 09a32fc9-c161-4ab3-abc8-692a5a11d528 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008350, y: 3.222920, z: -0.000875} + rotation: {x: -0.656684, y: 0.000193, z: -0.059364} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: -0.000001} + rotation: {x: -0.000121, y: 23.491301, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d9e2d13e-9f8c-4798-83f1-83fed0cdb757 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - ShakeHand + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 6bb4dde2-84c0-44f3-913e-a23777663c7b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - Quit + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a28bd7b9-95bb-4620-8ada-11042270218b + - ! 460f5657-1d0b-461d-a2f8-e98899b9b38c +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Pyramid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 90.000000, y: 0.000000, z: 0.000000} + scale: {x: 40.000000, y: 40.000000, z: 40.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9d55ef31-fd85-4d6f-8df4-54699827b626 +- ! + PrefabRemaps: + [] + Name: HandVisuals + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b55b19ef-83c9-4922-aaea-ded86b65a663 + - ! abb42942-9861-46af-946b-236bb527035f + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sit Down + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000001} + rotation: {x: 0.000103, y: 0.000102, z: 0.000010} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a813a7a6-1822-4279-8348-2c314e6ab150 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0a7e8dd9-b679-4f8d-92a4-1c5d1ad5c9da + - ! 99d3aa5d-9a49-472e-9f48-d29dc003c286 +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2a1a3a7f-745d-4ab5-965d-e998b794c193 +- ! + PrefabRemaps: + [] + Name: ToggleJoystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380700, y: -8.216920, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! fb7f888e-eec3-420a-810c-78b850b10d8f + - ! 6feb078d-f402-4571-b43d-6190639f32a5 + - ! d57003c8-6698-4b62-a29b-8c04ec378351 + Components: + - ! e1782747-92cb-44d1-9101-0e9a9ab8696f + - ! 78cccb70-ee47-4e94-abec-128c2128ee8a + - ! 0f4f5b13-10b7-444c-a741-228e705fea39 + - ! 20f6981f-ecab-47a3-a2d8-cff1906b5585 + - ! 49bcc4c0-efed-4ddd-9fc0-392080ef64aa + - ! bd29209e-c7d8-4a7e-a77f-d4e52cb93a6b + - ! 23320378-2a70-4f00-a9fd-ea52785bc3e6 + - ! 0c7297e0-c130-4b84-be18-cc137bb5cd47 + - ! fa528bf1-6a6c-4f21-945f-159def2281f3 +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 94b108e4-4ec0-4f3d-9637-cbf5a66888e2 + - ! 1040ec0a-89a1-40e0-bbf1-f22974a27c49 + Components: + - ! 806b879d-3240-46ae-ab72-f5b31d6b1570 +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001444, y: 2.703710, z: 0.000020} + rotation: {x: 88.973000, y: 4.975880, z: 4.973150} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e8194f5f-aab4-4dff-8e59-92d2aaf9c042 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! b3f280b7-37fb-401c-b32a-585e6aa48f44 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - WaveHand + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: HandTrackingStatus + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -9.004718, z: 2.187569} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 15a700df-0da4-4bf4-9405-749b0c3f3ab9 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000004, y: 11.453500, z: 0.000011} + rotation: {x: -10.793700, y: -13.884800, z: 21.429600} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 05ab905d-7685-4e29-9db5-9042078af2d6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000009, y: 4.399180, z: 0.000004} + rotation: {x: 1.097870, y: 44.900902, z: 1.556590} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f93fce7-edb2-4d42-b09c-939416f49cc0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: World Query Disabled + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: true + ScriptAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + ScriptInputsDefault: + _beginColor: true + _endColor: true + lineWidth: true + lineLength: true + lineStyle: true + shouldStick: true + _interactor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + lineMaterial: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + _beginColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _endColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + lineWidth: 0.500000 + lineLength: ! 160.000000 + lineStyle: ! 2.000000 + shouldStick: true + _interactor: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + - ! 821f1d70-8d79-44db-bc8b-fabf613822c0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a004af16-4f4c-4946-bce2-40a1204ea799 + Components: + - ! 934bd16f-6484-4ebb-9eaf-9bc030e387b2 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 401e73dc-9551-455a-b594-3b4bda60750c + - ! ee6dba04-bd0c-4068-92d3-5ea9b05dd2e7 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + Joystick Enabled + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 784b08c7-c4dd-4b7e-b6d2-bc9f660dc068 + - ! febd1a2b-abb0-4020-ab59-da7642ee6236 +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + handType: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: right + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleSitDown + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380723, y: 7.969129, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 65a5cc2b-1732-4bfb-8329-cd696b9d9790 + - ! 4293e56b-500a-42fb-888b-a2b40f472141 + Components: + - ! 5ac56aef-627d-414a-b9a8-3d2ad2d86e7e + - ! 79796030-53cb-4be3-adc7-884f9ea5c2e6 + - ! f9655933-40b9-41a3-aff3-4c922e595b4e + - ! 2e2f73ad-9d78-4091-a027-d811133bc102 + - ! 5b7851de-0e24-4b2a-a166-0b397b1727d4 + - ! 5ec310aa-7653-4e69-bc53-082b3dc7043a + - ! 8b24376f-30a4-42a7-b86d-2c0504b67a9c + - ! 9f1c29b8-106d-4bab-b503-010823c8d2da + - ! d17185fd-2854-4cb6-8eac-99072cea9e99 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 5a57ee47-87c7-4a79-ba50-970c9cba9a30 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.017495, y: 3.481400, z: 0.000180} + rotation: {x: -8.118590, y: -0.000575, z: 0.000047} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! be49fb74-bd52-43d9-8ea6-b79a6965e36d + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Top + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Logs will go here... " + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 40 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -12.000000 + bottom: -7.000000 + right: 12.000000 + top: 2.250000 + OverflowVertical: Truncate + OverflowHorizontal: Wrap + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000050, y: -0.000056, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1353e5b8-fa96-4236-9812-7fd080b04697 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7b9fb5ef-6166-490c-9de1-68dcd5c5005c + Components: + - ! 18b749e0-b955-48f1-ae8d-4617f4dfba79 + - ! 7e586840-b53c-4da4-8abd-2b2593f6e0b2 + - ! a954891a-879b-4e43-9344-c244f52f98b2 + - ! 640ae996-bd1e-4d95-a126-21df05f0677b + - ! ccabf131-4f86-45bc-b0ec-4246397d2c30 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! cf6e365c-8be7-439f-b295-cf8f1aea0fe6 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 0e45cd00-9e1f-43e0-8111-a4c4cfefae61 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.122141, y: 3.547710, z: 0.009542} + rotation: {x: -59.788200, y: 5.800900, z: 165.218002} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 411b54bc-1db6-4fe9-908b-1f4f0a372ce0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! cd2fc167-31d8-4f47-b7df-30e173e8e852 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 76b522ae-e38c-4432-ada0-59354b4b58d9 + - ! bec133a6-8f51-4386-8fe5-4ff02c361db7 +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.010478, y: 3.166710, z: 0.000270} + rotation: {x: -86.458298, y: -5.335180, z: -5.675670} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 771da37d-9459-45e0-8f98-9538710f0dc5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleStandUp + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380723, y: 11.969130, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! b3e5c45c-126b-460e-a068-625f8d6f5d83 + - ! 75f06a71-2897-421b-ad76-29a8983210d0 + Components: + - ! 59b4b9db-b388-40cc-b917-8831b4479e46 + - ! 4f040af0-c65d-44f6-a600-7c34cece91e0 + - ! ad791e28-7e1c-4418-b0b5-75de52906044 + - ! bd0af0e9-8632-40b6-ab30-5a09f29012e9 + - ! 289e5384-4ac5-4dd5-abdf-d126034b8f71 + - ! 6847daa7-4f9b-4a9e-a46f-ff5c11989ce3 + - ! bbf49faa-a1c9-4731-919c-58a06ded75d5 + - ! 24020463-3f56-4b00-8f14-14defe6fb59c + - ! 41fadbbc-bba9-49bd-90de-5d852d4e2d34 +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: -0.000003} + rotation: {x: 0.000035, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8dbfcb2b-c189-46eb-960f-45c157d8484a + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.100000 + meshVisuals: ! + - ! 47b59699-6efd-407b-af2a-b65f8d527973 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000005, y: 4.399180, z: -0.000010} + rotation: {x: -1.007350, y: 44.900501, z: -1.551620} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8e8470af-1ad4-4317-96d6-2bd90d653cbb + Components: + [] +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 1a07bc1a-e0ce-487c-b052-89f2fc912535 + knobObject: ! 5e2343fe-d615-4c5a-a44c-fb83d8b60caf + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cf6e365c-8be7-439f-b295-cf8f1aea0fe6 + - ! 3a192c57-3c06-4cfa-baa3-3a896bb611e1 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 27db1592-a7a2-4e26-b369-afc71511fb9e + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 22e40d6c-4405-4a2f-9eda-9f5e0d425a75 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - WaveHandTurn + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 6bb4dde2-84c0-44f3-913e-a23777663c7b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 934bd16f-6484-4ebb-9eaf-9bc030e387b2 + useGlowMesh: true + glowRenderMeshVisual: ! 83472e55-1d64-4ec2-ac60-06c87a08281a + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000025} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 66d9ff94-deb4-4e42-bc41-0182a168c169 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Stand Up + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + stepBehavior: true + _stepSize: true + toggleDuration: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: -2.500000 + _maxValue: 3.800000 + startValue: ! 1.000000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 94b108e4-4ec0-4f3d-9637-cbf5a66888e2 + sliderMax: ! 1040ec0a-89a1-40e0-bbf1-f22974a27c49 + _sliderKnob: ! 5e2343fe-d615-4c5a-a44c-fb83d8b60caf + editEventCallbacks: true + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 788f9d33-db4a-46ec-aceb-4bf2c2834849 + onValueUpdateFunctionNames: ! + - updateMoveSpeed + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! e3ce5efc-36ab-46d8-988e-4b13c8fd50d7 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 531e560d-ffa5-433d-8224-6c252eb6a9bb + - ! 31df5cf9-9877-4359-9161-92964449a557 + Components: + - ! 32346fd9-8168-4666-87d9-78060a1ebed2 +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7438ea6d-1790-4ec2-a664-50cc9f0f4175 + - ! 550f36e7-5958-405e-9b74-e2695cd8d339 +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.483000, z: -0.000001} + rotation: {x: 1.265800, y: 6.113890, z: -3.274570} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 850751ef-604a-41bc-a846-0701b76493b1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001444, y: 2.703720, z: 0.000001} + rotation: {x: 88.027298, y: -5.497920, z: 5.333360} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b297e024-8530-43a8-9271-1d093788af2f + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.010479, y: 3.166700, z: 0.000210} + rotation: {x: -87.477303, y: 5.565590, z: -5.001890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: InteractorCursors + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fc6a94ee-23d6-4637-a73b-30ac1b571eca +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 81c9488e-e654-4cc0-a3d7-22bd36378150 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001204, y: 3.309410, z: 0.000061} + rotation: {x: 0.145060, y: 0.000496, z: 0.002001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4971d6a8-a5fe-431e-b815-07883d1bd9b4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: -0.000002} + rotation: {x: 0.000000, y: 0.000028, z: 0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1dc67040-bae9-41b8-960f-b57a94672dfa + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 401e73dc-9551-455a-b594-3b4bda60750c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f4029e40-76bf-4921-b70b-e4ce76a7bac1 + - ! 6b376b45-f8ef-456d-b8cd-673410d85157 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleWaveHandTurn + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.406799, y: 7.969129, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! fe19f00e-ce61-4a1b-853d-7f74a4ef5f43 + - ! 91b08be7-2e80-48cf-9291-a18f3740cb7a + Components: + - ! 72ee1fc0-ca21-4296-8206-2895421f7de7 + - ! ba897858-966a-4ae4-aa02-edf2b06090f7 + - ! ff425cfc-c998-4146-9026-3d99ebe6dc79 + - ! f9aa6167-feb9-4739-b9f2-fb35e0f02014 + - ! ba528c32-9d21-4502-a71c-638bc92d72a4 + - ! 32e07a90-4812-4d0c-900f-22ef1c50ad07 + - ! 28507168-9515-441f-961f-25dd62bdcfc7 + - ! 68227795-880b-417f-a5cf-5a619aa035bb + - ! 20824460-067b-4f96-be7d-967f63b76842 +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000002} + rotation: {x: -0.000207, y: -0.000205, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4696df6f-6058-47bd-8129-72a773a76e75 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000003, y: 11.787900, z: -0.000003} + rotation: {x: 9.215320, y: 17.707500, z: 16.168699} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5bd739b3-039d-4f2e-bc80-61fd158ce1aa + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a3f4225f-153f-429a-8cd2-aa84d9db52ad + - ! 78778cbc-4979-40f8-b213-f0cab136c8aa + Components: + - ! 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: RightHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! de62f5f3-2f86-4c98-b357-a44d603496f1 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: RobotDecoyController + Enabled: true + ScriptAsset: ! ed8de5e7-d591-4775-8fe0-e8285af6851a + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + robotDecoy: ! e71cef26-eed8-428f-b446-42c030905fba + mainCamera: ! 00000000-0000-0065-0000-000000000065 + toggleButton: ! 7d029e39-1a82-4f11-a417-8ad837ebbd4d + connectToRobot: true + moveSpeedTitle: ! 019d2db1-8194-4640-8ede-4ba7b2dff2ed + rotationSpeedTitle: ! 2a1a3a7f-745d-4ab5-965d-e998b794c193 + coordinationClient: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 81a063f9-3e18-467f-b8f4-3a3af1063337 + - ! a8f0df4c-baa3-4bdc-a578-3cb1d0c792e4 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f6c6acc9-65a3-4daf-a525-5d8123292819 + Components: + - ! 452a2425-2df7-40e3-85fa-867870555398 +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000001} + rotation: {x: 0.000101, y: -0.000115, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5da27569-8d52-4e61-a3ab-bb97294d4ce0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: High Stand + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: MovementSpeed + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.790000, y: -14.707773, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.600000, y: 0.600000, z: 0.600000} + hasSegmentScaleCompensation: false + Children: + - ! 33eb29b1-27ea-4816-8f9c-9a24d93610f9 + - ! b6970f50-0502-4f1e-adcd-239cc7b20506 + - ! 8186bd87-72a6-458d-af21-4a468e3de265 + - ! 5e2343fe-d615-4c5a-a44c-fb83d8b60caf + - ! 49385e6e-1ce4-41bf-9992-21641cab1e4f + Components: + - ! cf68964f-95f7-4acd-829c-0320a6b61935 + - ! 6d26738a-6837-4d27-84c4-9cfa3d9cd4c1 + - ! 6523a018-8cba-448a-9746-57d5e5eb9285 + - ! 04b93546-517c-4bda-a880-70056e73f152 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! dcde9057-44f4-4eb5-b440-646786b624c5 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.005382, y: 2.681950, z: -0.000140} + rotation: {x: -5.666390, y: -0.000025, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 29d989ad-aee7-43c3-95e0-02735ba7dd2f + Components: + [] +- ! + PrefabRemaps: + [] + Name: ToggleWorldQuery + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.549918, y: -8.216920, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 54ac8c59-fad7-4aea-a56a-0a2cb3382074 + - ! 8b5cb14f-96c5-45d9-b2c1-3ebdbfbad7c9 + - ! fddda9e4-571b-4002-b25f-fbbd75ac5b15 + Components: + - ! a0ccd4f8-b81a-416f-9b2d-a12bb004fde3 + - ! 32bd3841-eba4-4a42-8c7b-43a3bdb404dd + - ! 67ed4e43-e34c-4342-b3c1-7088b65d0a1c + - ! d7124ec5-30a4-4184-afcc-e764860c6eee + - ! 15ba581f-c8e9-4b9c-a857-91e83a21c452 + - ! daf8dd01-905e-402c-ab8f-47667ab9c623 + - ! bdad316c-315e-4a24-b345-060b47227095 + - ! 75c89fbc-ed95-4f95-b990-7e75760d942a + - ! 87dbbd4a-aef3-4925-8d40-1abae102c105 +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: -0.000113, y: -0.000000, z: -0.000031} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a53cac7a-4a63-4351-a6da-b868ffac9c0a + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002705, y: 3.534420, z: -0.000008} + rotation: {x: 1.238040, y: -0.000494, z: 0.017060} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 74914d99-aae6-4a1c-b4ec-d949b2a9253c + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002705, y: 3.534420, z: 0.000029} + rotation: {x: 1.238160, y: -0.000262, z: -0.000026} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2b9a5b20-6a89-4fd1-906b-e97f4259712f + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.005385, y: 2.681950, z: -0.000095} + rotation: {x: -5.666190, y: -0.004601, z: -0.046291} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cea83226-8c66-44d7-895a-2480d9cc1c35 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleShakeHand + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.406799, y: 3.969129, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 793f2b53-e65a-4b54-9ee7-e8cec872cf0b + - ! 5818d12d-54e0-4d23-a654-01612b7d0334 + Components: + - ! e65f2278-a38c-4c85-89f3-8dea992b9cb1 + - ! 7ea9943a-b2bd-427f-bf09-75acc0027983 + - ! aa8a869b-0e4f-4900-887a-74922e45d259 + - ! 328afe2c-0dcd-4ba1-bc04-5df2ecd8d04d + - ! f3ab4bf0-0769-4a4a-93e7-7e4d710cfcb7 + - ! 368f4c18-aa50-46f6-8377-1bc58218a631 + - ! b616cc4c-4fcd-466d-b4cb-7ff5675109d0 + - ! 41992fb4-2d3b-4c74-8f02-6176a3ad50d1 + - ! 1e665b87-3779-4bd6-8974-3187c241bfd2 +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1a07bc1a-e0ce-487c-b052-89f2fc912535 + - ! d24d6552-cebc-4c3d-99b5-968f655de32c +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleStopDamp + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.406799, y: -0.030871, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! d64589d5-72b9-4b77-9039-59635abd92a8 + - ! 4867d241-3b07-4c9a-98fc-b273341d72a9 + Components: + - ! 3225530e-71f2-40b0-a713-b2c0e8a69a01 + - ! ea5a3f65-a966-4c70-9270-f94c188391df + - ! ace0df05-0665-4cff-878b-9a1e4378ff4c + - ! fa292d42-2152-4906-9939-9413efd723d7 + - ! 73b5275b-3155-4db8-b642-0aa1a77dbafe + - ! 24bd48ac-63d9-45f1-b792-68969c2c65aa + - ! b5a6ac6c-be3c-441e-b034-8414fe02a95b + - ! 86779282-c48e-4880-804e-4794b0d7ba97 + - ! f372fdfa-88ed-4be7-aef4-fe588f505b9b +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000006, y: -0.000002, z: -0.000000} + rotation: {x: 157.399994, y: -83.865097, z: 115.817001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f + - ! f154d1c1-2595-4578-acc2-6872637af31a + - ! 86412b42-c0cf-4fc3-a8a2-fe90221abc59 + - ! 2d1055e9-e5d5-49f7-8955-de8f46da0f6a + - ! eb361989-1d4a-41f7-a205-235ce6f4e3b9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000006, y: -0.000000, z: -0.000002} + rotation: {x: -176.654007, y: -5.519800, z: -92.680099} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 309860a1-e8fd-49a7-8b08-343086fa08dd + - ! dddd8a38-ce19-4f71-8776-9826e6597567 + - ! a9edf4cd-40ec-4fe4-83b1-2f9439932ef0 + - ! ebf022e3-0fd7-4f48-b695-a86d4509dbfb + - ! cd4ffac9-4a32-4dba-b0a2-db117c38b975 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: "[PlaceholderJoystick]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.013405, y: 3.861870, z: 0.000233} + rotation: {x: -4.535240, y: -0.003456, z: -0.026343} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1f2cf37f-fd91-492c-a63b-884a08cd9215 + Components: + [] +- ! + PrefabRemaps: + [] + Name: TempLog + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -5.000000, y: -28.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c73f87d7-e7e0-4893-8671-758129235afc +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.519104, y: -5.758140, z: 5.627940} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 711f9787-d880-4475-8f0a-0cf6b2492a6b + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: 4 + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - StopDamp + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f90a02bd-fe5f-4484-b58c-4524478d1b12 + Components: + - ! a0d4ebb2-2c68-4481-9bf7-efe425aef596 + - ! 0ec58613-5aaf-4fd3-81a7-d98abde63ad9 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Quit + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3f955f91-5659-4ca4-ae29-ea3be7cb2753 + - ! d2e1c0d9-e127-4860-8525-83578e4d77f8 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleZeroTorque + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380723, y: -4.030871, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! c8fc253e-5082-4f6b-a0fc-f48f3f853164 + - ! a6dfa9b3-a7fb-4daa-874c-554e9630498a + Components: + - ! 171eef65-72d2-48a1-8aba-c206fefdc334 + - ! 24cb1b33-04c2-4e8e-8550-b4867b53b35c + - ! 99a0eeac-bad5-481e-afd9-0b2196e8ae44 + - ! 41927d3b-bb7e-4caf-83d3-f5f9a766040e + - ! bd3a50e2-d015-46d5-9362-07d9d27eb144 + - ! b42d50a4-40d0-4397-911e-5cdf16044f1d + - ! 177b140d-3ce2-4aa0-8686-f673db48cb11 + - ! a2c0e299-1df9-4ee2-8a0b-2290102f4c68 + - ! 36f98281-44d0-4079-891d-92b5edbd97e6 +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 26.024099, y: -37.686901, z: 24.403400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6480de4a-e83a-4ebf-919e-d73bc4fd2eee + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166710, z: -0.000003} + rotation: {x: -180.000000, y: -0.000000, z: -180.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f9d02a8c-71a4-411f-a21e-a7b3329c62d6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.067402, y: 3.518870, z: -0.005366} + rotation: {x: 14.034800, y: -0.274095, z: 1.092330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a3ea66da-0ca8-4958-8d69-6f5045fa706c + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cc435628-7237-4d1c-814c-b9ba17297299 + - ! b0568e80-6289-4a96-85c5-c198fdb59023 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4d7d6431-985a-4279-b01e-9801d36f64b5 + - ! d4c07182-9d4c-4284-901e-e20193ba7116 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RightHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703720, z: -0.000000} + rotation: {x: 0.000283, y: 0.000276, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 07d5618b-22f9-4656-87fd-b0198fa0aeb6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 61d115d3-d3f8-4651-91b8-2557757a78cf + Components: + - ! 664c170d-3bcc-4ede-bd6d-4663ed1cf004 + - ! f809084b-933a-4ba8-b8bd-2809f7edaa47 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + allowScaling: true + autoScaleContent: true + isContentInteractable: true + allowTranslation: true + xAlways: true + yAlways: true + worldSnapping: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 30.000000, y: 35.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: true + autoScaleContent: true + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 8.000000, y: 8.000000} + maximumSize: ! {x: 200.000000, y: 200.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: true + itemSnapping: true + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: JoystickToggle + Enabled: true + ScriptAsset: ! 8bcd5be4-b37d-4c4f-805f-127ba98222d3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystick: ! ab3413cb-af5e-4214-a958-733f5a1b116c + joystickPlane: ! ef476ed2-a3ee-4580-b45e-7bb5c5449987 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: HandControl + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f5944c92-188f-41b7-870c-950c91dfa3fd + Components: + - ! f63855b4-0474-4692-951d-42a625184eab +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013406, y: 3.861870, z: 0.000154} + rotation: {x: -4.535300, y: 0.000290, z: 0.000017} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cfc52ae9-3c49-4c47-8299-82d37cdb1095 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fbb26a6b-aed0-4b5e-9ec1-fe16f062f894 + Components: + - ! 0523a624-a5cb-4e24-a1f5-80e5fdfeda1a + - ! 77996105-d6ce-4674-a4d4-05c1c54d3849 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "3,8" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Stop/Damp + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 09a32fc9-c161-4ab3-abc8-692a5a11d528 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RotationSpeedSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.790000, y: -11.876097, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.600000, y: 0.600000, z: 0.600000} + hasSegmentScaleCompensation: false + Children: + - ! 489f263f-f748-47e7-bcee-e5c743e2a183 + - ! 2f4d3cf6-14aa-4c0c-ac86-6e39e1f07716 + - ! b8338169-84f8-4154-b1ba-f4a5ba02f1eb + - ! d99ee51e-bced-429c-9b7c-b05cbd89762d + - ! a900ab98-43df-4d17-b155-68be867e07f7 + Components: + - ! 8504d584-bcd2-4d1d-8276-607e13205a8b + - ! 294f102a-2192-4196-9d61-2db4761c152c + - ! 2f1606ba-5037-4149-a6d4-3b792a459df9 + - ! 2e8e25f5-77c8-42f6-b3a6-0d5f6f1882e4 +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000001} + rotation: {x: -0.000096, y: -0.000037, z: 0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f9bcf5b-6b30-496e-b734-5aa240e969c5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bc12bc49-e5af-4e03-a0b0-cf2368ceaf78 + Mesh: ! 66867a8b-e0de-4ca1-895e-04f0a1fc4b12 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - HighStand + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d54c5bc8-117f-46c9-8138-593f13135481 + - ! fe3b68dc-568f-44dd-82ff-ff61325b2937 +- ! + PrefabRemaps: + [] + Name: Frame + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 25.000000, y: 25.000000, z: 25.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c0325b43-803e-4454-a365-657fc8b9461e +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - SitDown + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + Mesh: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + Skin: ! 32346fd9-8168-4666-87d9-78060a1ebed2 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.067615, y: 3.518870, z: 0.000095} + rotation: {x: 14.081600, y: -0.000034, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d2c2e4e9-c17c-4ecc-902f-2283f319023b + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549800, z: -0.000001} + rotation: {x: 0.000059, y: -0.000014, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 75b74ef8-ecbe-4864-bb69-4c09f5be1606 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 83472e55-1d64-4ec2-ac60-06c87a08281a +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - ZeroTorque + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.054705, y: 3.957050, z: -0.004463} + rotation: {x: -2.614390, y: -0.009460, z: -0.205101} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 60037818-559f-4345-ac44-f7c5dfc86f3c + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 826246a6-44ea-4331-85b3-702fa57389fb + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Unitree Controls + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: 0.000189, y: -0.000000, z: 0.000044} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f3c8087e-8414-4601-833d-96cf682f94d3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 02a86b70-f0f0-41ad-87bd-21c32b796670 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4c4dbf52-995d-4ed4-bf70-3d215a55cb7c + - ! 1081da87-aa93-4489-93a9-39ced16521ba +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.017407, y: 3.481390, z: 0.001771} + rotation: {x: -8.084740, y: -0.103266, z: -0.728726} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Joystick Disabled + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000104, y: 0.000103, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a114455b-6a9f-4990-a3cc-fa88e4a4829a + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[CoordinationClient]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f66b5205-8eab-4f80-9235-50fe346b7a08 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 868eb3d3-a88e-4554-9f72-dd74fbca5b57 + - ! 9858857a-ac1c-4288-a641-24504e767312 + Components: + - ! ec9c2852-48ed-499f-9743-8784847c1a5f +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.519322, y: -5.969350, z: -5.521840} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0b1bf884-4efd-4b6d-83ac-82540696baec + Components: + [] +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3e1bef3e-4830-4ef6-ae21-b9167e6bb500 + - ! 3fb4bc39-89ac-48e3-9f83-dbdb3319be26 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 3.645104, y: 3.645104, z: 3.645104} + hasSegmentScaleCompensation: false + Children: + - ! 146182ed-73d5-41fb-b9df-d7c80cbade4f + Components: + - ! 3f71c4a7-185c-4003-97d2-bd323ab6e751 + - ! 4fe0cd9d-2c0c-407c-a40b-1431e546e902 + - ! dedb9528-82c3-46e6-b5c8-8254a55166d4 + - ! 47b59699-6efd-407b-af2a-b65f8d527973 + - ! 6476c7fb-5b18-4749-8554-8ad486410450 + - ! 5e99999c-e14e-49e4-a739-395557be6424 + - ! e05c740a-5657-4ee5-8b53-9d1290ab05b1 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 0e45cd00-9e1f-43e0-8111-a4c4cfefae61 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RightHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 780f2ffa-fc27-462d-85fd-d216d21e774a + Components: + - ! efcda464-fbc4-45be-93af-a83450f936fa +- ! + PrefabRemaps: + [] + Name: "[OPTIONAL] Visuals" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4527c113-2c46-40b1-bb7d-3acd00e22bd2 + - ! 7384c798-527a-41b9-862e-c12bc86376d3 + - ! 0deb320d-887e-4b1a-b988-f11b2c4d951b + Components: + [] +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + constantPadding: true + allowScaling: true + autoScaleContent: true + isContentInteractable: true + allowTranslation: true + xAlways: true + yAlways: true + useSnapping: true + worldSnapping: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 25.000000, y: 25.000000} + border: ! 0.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: true + autoScaleContent: true + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 8.000000, y: 8.000000} + maximumSize: ! {x: 200.000000, y: 200.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: true + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SingleObjectRaycaster + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f391ff36-ac7f-4b1b-be55-f3bbb992071c +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 08614d83-f067-4740-a346-a0b10d1ffd62 +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000002} + rotation: {x: -0.000202, y: -0.000189, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 933ca421-582e-407b-bfc6-206a10cef5f3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000011, z: -0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3f428eaa-6547-40ec-865e-50071201a35e + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + On + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6bb4dde2-84c0-44f3-913e-a23777663c7b + - ! 80060ce0-332b-4a98-8597-144db3c955f4 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 4c121113-c3c2-4ff8-ae97-2e9a47526b3d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + Components: + - ! dd01563a-be2b-4815-85ad-bf139803cc1f +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! afe74cb3-eabd-490a-a5cb-6dac062dbb4c + - ! e92e73f3-3ac4-4873-b724-a155ac67da7d +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ed8b9145-74d6-4edf-bfc1-1e72eb21872f + - ! 98d603c0-aa2d-407e-bda7-285005350b77 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 76e075a7-0dc7-402b-a76b-824cabac4426 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! dcf513cc-3b47-48eb-a7c8-1825fba52216 + Mesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 8cf7c6c1-134c-4ef6-91e0-6c18eb359298 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 7d029e39-1a82-4f11-a417-8ad837ebbd4d + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.824800, z: -0.000000} + rotation: {x: -2.274930, y: -6.337840, z: -8.604530} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7f36a885-824c-4329-8b11-919324b5c881 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008392, y: 3.222930, z: -0.000121} + rotation: {x: -0.204897, y: -0.651952, z: -2.287250} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d180e208-2df8-4507-8437-213a1fbd5da6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "-2,5" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Off + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c412b735-9316-498c-9999-21f28326f2a7 + FlipX: false + FlipY: true + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + - 146182ed-73d5-41fb-b9df-d7c80cbade4f: c584c132-37b0-4945-831d-fe91dd59ef35 + - 3f71c4a7-185c-4003-97d2-bd323ab6e751: fe131a8f-0219-45ea-ade8-fc0f1d7c48d2 + - 47b59699-6efd-407b-af2a-b65f8d527973: 4504672c-47d6-4351-b0f7-bdbcddeefd77 + - 4fe0cd9d-2c0c-407c-a40b-1431e546e902: 22ce32c6-57f8-4526-9f66-6d7d2805d5ae + - 5e99999c-e14e-49e4-a739-395557be6424: ea29a1e8-1895-4e61-abfe-6ee850841dd1 + - 6476c7fb-5b18-4749-8554-8ad486410450: e2719e11-8f89-4bdb-b462-7fc9315f7ec2 + - ab3413cb-af5e-4214-a958-733f5a1b116c: 25a7a1ab-5e91-4626-8d76-670866dfa5a7 + - baeb79f7-2beb-459a-868b-d93966b14ebe: 7bc670b3-df3f-44c6-ae49-73b4ea111638 + - c05ef247-07cb-46fe-bf02-b98e61a09ec0: a0d1c19f-3a8c-4c92-a02b-f115e89fb3ce + - d642e8f4-b3d7-4008-a742-54a1cf702dcf: 94fb5544-22f6-43b0-a482-ee45d1056712 + - dedb9528-82c3-46e6-b5c8-8254a55166d4: 9f8f7a3f-199b-40b1-8c46-0869a8c8e457 + - e05c740a-5657-4ee5-8b53-9d1290ab05b1: 4eba8cc3-7469-47be-9833-a8e502fe50e8 + - ef476ed2-a3ee-4580-b45e-7bb5c5449987: e7a4755d-7eb1-47d7-b744-c8e4232212fa + Name: Joystick + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -18.902494, z: 13.276752} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ab3413cb-af5e-4214-a958-733f5a1b116c + - ! ef476ed2-a3ee-4580-b45e-7bb5c5449987 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: RobotDecoyController + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 788f9d33-db4a-46ec-aceb-4bf2c2834849 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: true + customFunctionForOnButtonPinched: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + onButtonPinchedFunctionNames: ! + - LowStand + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 2b6ad40f-bb8f-4dda-8f4b-48b70fca5bac + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 3e1bef3e-4830-4ef6-ae21-b9167e6bb500 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 99936a85-4312-46d4-8275-b7b22fef2839 + - ! 87dd204e-aaae-43f1-8eb5-86a90135e006 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Bottom + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ab378422-6af3-48c1-a4a9-ffb1d6efb060 + - ! 7c202853-788f-4cb8-a277-bbada432c38b +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4c121113-c3c2-4ff8-ae97-2e9a47526b3d + - ! 19439ee3-a79f-4884-8678-6714412597a3 +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703720, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 452a2425-2df7-40e3-85fa-867870555398 + useGlowMesh: true + glowRenderMeshVisual: ! a530ce55-543b-4c8c-84fa-48481af11c2d + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleQuit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.406799, y: -4.030871, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 10d1b28b-5ffa-4c0a-8707-908aa84b066b + - ! c6ecd432-79aa-4298-a3fd-1419c50ad565 + Components: + - ! 8052dba3-2b58-4bc3-b2c3-3af7775a1bba + - ! f0452f13-a14a-4e29-ace3-7311fca72282 + - ! b6c46cc6-6f36-40e3-abb1-99da97fde3cc + - ! 99249007-b421-4e0c-a4ff-ecfac8a0dfbd + - ! 60b42e5f-33a6-421f-b4c4-bad4274c7a93 + - ! 7c503f86-84b1-4043-ac69-9c8d47278e04 + - ! d218c98a-2ba1-4064-8598-38970963dd35 + - ! 4220fe42-c1c9-4d2f-b22e-373db47b3a69 + - ! 19db0e2c-a787-46e8-b1eb-a559c540d8ff +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.918454, y: 18.264400, z: 17.580700} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 050bbf47-8842-4bc2-abe8-7a28fc5c70ab + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000000} + rotation: {x: 0.000038, y: 0.000042, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a650b8d7-507a-404b-bfe5-9602e915dae8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008175, y: 2.218150, z: 0.000011} + rotation: {x: 83.677002, y: -4.512030, z: -172.722000} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b2d002f5-2b50-4f66-8c0d-93d5dba56556 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002791, y: 3.304380, z: 0.000029} + rotation: {x: 1.238300, y: 0.000079, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7cb41a88-1dcc-444c-8349-a62b24a8e765 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002905, y: 3.650320, z: -0.000094} + rotation: {x: -2.676470, y: 0.000075, z: -0.000412} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6229e282-4449-48f3-8ef5-b90c67ba62fd + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! cf6e365c-8be7-439f-b295-cf8f1aea0fe6 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.009134, y: 2.837150, z: 0.000078} + rotation: {x: -87.845497, y: -5.462180, z: -5.671890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 20841b1c-e2a6-42cf-9bd0-4fd466eae39c + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! e71cef26-eed8-428f-b446-42c030905fba + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: false + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: ! Y + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.054883, y: 3.957040, z: -0.000166} + rotation: {x: -2.622440, y: -0.000180, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1b6d2315-e870-4a05-9817-029318f16b5a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + World Query Enabled + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 28 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! d4ebbab1-95ff-4bb9-b80f-75c1350d830a + _offIcon: ! 2170c13f-5325-47ca-93c8-cba24100aa0f + _isToggledOn: false + editEventCallbacks: true + customFunctionForOnStateChanged: ! 788f9d33-db4a-46ec-aceb-4bf2c2834849 + onStateChangedFunctionNames: ! + - toggleTargetMovement + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[ContainerFrameUI]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! daaa4347-1049-4c69-908c-884fdc3fcdf5 + - ! f2df7859-2149-4205-bf6a-bbb7acf6b98b + Components: + - ! 95ed011f-c8a5-469d-8a2b-cd95475e2dc9 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Wave Hand Turn + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 01349eb6-89ae-43c5-b0e3-8810e6a951b1 + - ! b2ec8889-cb45-40e5-8777-04af18d8a603 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 87a14b1e-b517-4462-b398-0558389ac661 + - ! a74fed55-7475-4ed2-b6be-ef5e22f4f94e +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! c3a5c848-4468-48d2-9df0-0c9778bb7552 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0ad2a884-4ade-40e9-bf03-0d8820ed43ce + - ! 61b5fb52-e745-46f5-a996-9d6825cb9ca8 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 8b5cb14f-96c5-45d9-b2c1-3ebdbfbad7c9 + _offIcon: ! fddda9e4-571b-4002-b25f-fbbd75ac5b15 + _isToggledOn: false + editEventCallbacks: true + customFunctionForOnStateChanged: ! 0a517718-65ce-4c61-bf5e-692b0f5f300b + onStateChangedFunctionNames: ! + - toggleEnabled + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ConfigurationValidator + Enabled: true + ScriptAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5496c3ed-352c-4897-bd69-c31c47445f98 + Components: + - ! f7476a91-47fe-4a26-b8a7-d2e2395fc703 + - ! cb706ab7-e5fb-419b-bd51-815dadd31817 + - ! 6bbca600-6f27-4f4e-b9de-809ec96814d7 + - ! c6d9daaf-c446-4f11-9342-92853d0d9d37 + - ! 698df2f2-339d-44e8-a366-68022ee65398 +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549810, z: -0.000001} + rotation: {x: 0.000118, y: -23.667299, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Controls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e01f28f1-602b-4d5f-8baa-63b0f3957776 + - ! 632b18e6-6d05-440d-a0a1-776f550490b8 + - ! 5a57ee47-87c7-4a79-ba50-970c9cba9a30 + - ! dc051874-b260-4377-a155-f5e61e9c3b29 + - ! e19d0771-e588-4e06-bc70-9b4cf2b478b8 + - ! 8cf7c6c1-134c-4ef6-91e0-6c18eb359298 + - ! 2b6ad40f-bb8f-4dda-8f4b-48b70fca5bac + - ! 76e075a7-0dc7-402b-a76b-824cabac4426 + - ! 8129d649-1060-4775-b6e8-c1f0a0cb3b88 + - ! 81c9488e-e654-4cc0-a3d7-22bd36378150 + - ! cd2fc167-31d8-4f47-b7df-30e173e8e852 + - ! 48b3f9a1-7c28-454e-baf2-f3a3b68db600 + - ! 7d029e39-1a82-4f11-a417-8ad837ebbd4d + - ! e3ce5efc-36ab-46d8-988e-4b13c8fd50d7 + - ! 9b31c612-7446-427b-a3a7-30eaded0bed7 + - ! 7c3a2b93-f045-4787-ad70-e059a9cba020 + - ! 3d471066-56f7-4b19-801c-5a11e2533cc6 + - ! c05ef247-07cb-46fe-bf02-b98e61a09ec0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleHighStand + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380723, y: 3.969129, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 316c6b09-919a-4c9b-817d-941343e76504 + - ! c8b70fdf-a5a1-475f-949b-dd0ff4d8f475 + Components: + - ! c41b7d76-80cf-4d7e-99ee-7f1e52066173 + - ! 803d7b86-543f-40f0-b788-90f5ebaccbb4 + - ! d1288f37-550b-4b2c-b0d6-b0225928e5a5 + - ! fced7711-4fed-4154-8c0f-46f00ba4c118 + - ! dcaf39c9-f562-4763-81ac-aaf1b7240a34 + - ! 9a42f458-79ca-4ebe-ab9f-870c682bc937 + - ! 51b5f3ba-bdbe-4c35-b59e-74aaddf65ed3 + - ! 9d7ef126-a0f2-4dcc-8689-494da80c5841 + - ! 40850a6b-3960-44dd-bd2c-8bec441a435b +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! dc051874-b260-4377-a155-f5e61e9c3b29 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: -0.000051, y: -0.000000, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 162925ed-6a4c-401a-a521-86902851061f + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: left + selectVisual: Default + handInteractor: ! 22e40d6c-4405-4a2f-9eda-9f5e0d425a75 + handMesh: ! 9f2b3f06-77a1-4255-830d-ad50801287bd + root: ! 6f50df52-5045-47a8-839c-bbd20bc99bb5 + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f2db0563-6c95-499d-8ddb-aa5cfaaf22f2 +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.143142, y: -18.425200, z: -17.556000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 77f1a5d3-8594-40b5-8085-79f1d46ddd71 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03d33697-6495-4e15-9a2d-646411a514a9 + Mesh: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + Skin: ! 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! ab3413cb-af5e-4214-a958-733f5a1b116c + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.539581, y: 16.625523, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a45d9874-f37c-41c9-b74b-fc5b8b804b30 +- ! + PrefabRemaps: + [] + Name: Joystick + Enabled: true + ScriptAsset: ! 9b59ee1c-abca-4e6b-9e2e-a9a5884bc389 + ScriptInputsDefault: + moveSpeed: true + deadzone: true + cardinalWindowDegrees: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + joystickObject: ! ab3413cb-af5e-4214-a958-733f5a1b116c + robotObject: ! 84bafc52-ea01-4f87-a412-867fae0effac + rightIndexFinger: ! d180e208-2df8-4507-8437-213a1fbd5da6 + leftIndexFinger: ! 1ab3fbdf-e28e-45a8-943d-76938ac530b4 + rightThumb: ! 1b6d2315-e870-4a05-9817-029318f16b5a + leftThumb: ! 60037818-559f-4345-ac44-f7c5dfc86f3c + moveSpeed: ! 0.000000 + deadzone: 0.100000 + cardinalWindowDegrees: ! 15.000000 + client: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: "[JoystickToggle]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 968c4bf8-5a61-4ef0-b0d6-d05d415cf337 +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleLowStand + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.380723, y: -0.030871, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 900e5a78-b066-4559-8343-f49e5200f828 + - ! 9e2aee65-c1e1-4564-8994-35146ea2f741 + Components: + - ! 9ffd8802-4f12-46b8-b08d-c744a3cf53a4 + - ! 784078cd-3670-4bf8-86f2-0d5c45172416 + - ! 6ece8394-0959-4287-84eb-e2672e8eedcc + - ! 218c46f0-d189-4bb4-8170-c199bc644f9e + - ! e40f930a-f07d-4db2-b9a2-468fd659a6f4 + - ! 2330ba64-a5e4-49ce-93cd-c24554f4784f + - ! 922901f9-ca12-47ed-8dd8-eb0a86f812c6 + - ! c4ddc22c-74c5-466c-ada3-5b189c2131ef + - ! 219bab13-6bc4-4f0a-8db1-e95446771516 +- ! + PrefabRemaps: + [] + Name: ToggleMovement + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 13.500000, y: -8.352104, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 1c35cd1b-52b1-438b-a3d0-971b7aec95cc + - ! d4ebbab1-95ff-4bb9-b80f-75c1350d830a + - ! 2170c13f-5325-47ca-93c8-cba24100aa0f + Components: + - ! 2905ec1b-bbef-49a0-a4a7-c48b80a7b741 + - ! d010469a-d018-4b47-ae6f-c450d534adfe + - ! 409d7923-eb00-4912-aa4b-0e02cd411b00 + - ! d37ff05a-3ea9-461d-9e94-4a5419300735 + - ! 5f52c1db-ee4a-41ed-956b-3b025ba467f1 + - ! a9060ce3-fa90-4c1e-b28b-e9a2ff121203 + - ! 6d5d414f-fc41-4530-86de-0241ccd988a6 + - ! ab44febc-0bce-42ba-98e2-94f40d3de8d1 + - ! 19a8a2d3-7cbd-421f-b641-c5e512274125 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! e19d0771-e588-4e06-bc70-9b4cf2b478b8 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Device Tracking + Enabled: true + DeviceTrackingMode: World + RotationOptions: ! + InvertRotation: false + SurfaceOptions: ! + EnhanceWithNativeAR: false +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: DecoyRobot + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4470d3cb-bc7d-48ec-96dc-fe8a683a9980 + Components: + - ! a3701fc3-406f-488d-a200-96b098c6283a + - ! 0b7c5bcb-4b5b-4514-aebc-3224190ca0e0 + - ! d26d5fd1-2ba0-495a-b8c6-633d6cd8f8f4 +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000000, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 11.787900, z: -0.000005} + rotation: {x: 0.059034, y: 19.848200, z: -15.906400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a72bed4c-f7e3-4691-93f3-d06d66d75dd0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.905911, y: 15.703600, z: -17.047701} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 50f48cde-a492-4587-8b76-26cff1adec60 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.192403, y: 6.380900, z: 6.216870} + scale: {x: 1.000000, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Configuration + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d8ffb52f-2569-42b3-a616-c75eb7fe7e36 + - ! f66a2c0c-ecc0-41a4-be4a-21ad0c1b6cb7 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 3e1bef3e-4830-4ef6-ae21-b9167e6bb500 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: JoystickPlane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -3.230324, z: 0.000000} + rotation: {x: -90.000008, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! baeb79f7-2beb-459a-868b-d93966b14ebe +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: right + selectVisual: Default + handInteractor: ! 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79 + handMesh: ! de62f5f3-2f86-4c98-b357-a44d603496f1 + root: ! 780f2ffa-fc27-462d-85fd-d216d21e774a + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.140613, y: -15.148800, z: 17.637899} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e9344e0a-57f1-4226-9a18-a84052078b1b + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandControlVideo + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 30.000000, y: 0.000000, z: -100.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f0d9ca2-8803-4532-921f-97374340c509 + - ! 4f3aeb72-6173-48d8-9f75-066ce9aec932 + - ! 8546cc19-ed81-434b-bd0c-190d4994be13 + Components: + - ! abe19e32-391e-4423-9ecd-7d3304d43228 +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + ScriptAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: true + touchpadDragThreshold: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + spherecastDistanceThresholds: ! + - 0.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: ! 250.000000 + touchpadDragThreshold: 0.050000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Box + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 35.000000, y: 45.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 220b9f97-86f5-482c-8abc-c1d5f5d12a99 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 0ad2a884-4ade-40e9-bf03-0d8820ed43ce + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SingleObjectRaycaster + Enabled: true + ScriptAsset: ! 4a953906-5131-40bb-8522-f05a0d213b4f + ScriptInputsDefault: + filterEnabled: true + isEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetObject: ! 6c356ea2-7d6b-4fa2-8bba-efc695359cbd + objectToSpawn: ! aab7eac5-7070-4adf-a352-c52c8e12c818 + filterEnabled: false + isEnabled: true + decoyController: ! 788f9d33-db4a-46ec-aceb-4bf2c2834849 + objectsToCheck: ! + - ! f2df7859-2149-4205-bf6a-bbb7acf6b98b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 8129d649-1060-4775-b6e8-c1f0a0cb3b88 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000002} + rotation: {x: -0.000076, y: -0.000000, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 691be975-a6fd-42b9-a51a-bcdeebedb743 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: axesStub + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 238d8130-1751-4b0e-9caf-542d5dd36ffb +- ! + PrefabRemaps: + [] + Name: HandControl + Enabled: true + ScriptAsset: ! bf0dcaf4-1705-45b7-9755-24fab97ebdb4 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + camera: ! 00000000-0000-0065-0000-000000000065 + handTrackingStatus: ! 15a700df-0da4-4bf4-9405-749b0c3f3ab9 + tempLog: ! c73f87d7-e7e0-4893-8671-758129235afc + axesSceneObject: ! f5944c92-188f-41b7-870c-950c91dfa3fd + coordinationClient: ! f66b5205-8eab-4f80-9235-50fe346b7a08 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SIKLogLevelConfiguration + Enabled: true + ScriptAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + ScriptInputsDefault: + _debugModeEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + logLevelFilter: 3 + _debugModeEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: CoordinationClient + Enabled: true + ScriptAsset: ! 7fa9f4e5-b8c5-4245-a654-0357c26aaddf + ScriptInputsDefault: + serverUrl: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + serverUrl: "wss://spectaclexr.com/ws" + logs: ! 5c1ed1b0-5ff2-4ae1-b238-a1986f98e13b + img_sim: ! c0325b43-803e-4454-a365-657fc8b9461e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a530ce55-543b-4c8c-84fa-48481af11c2d +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2e3422d1-8ae9-4d21-8a95-e7201f139890 + - ! 0b9c456b-e4ec-4df6-9110-2cf67e457461 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b3f280b7-37fb-401c-b32a-585e6aa48f44 + - ! 3559cef7-705a-4d47-8a00-c89ec53fc963 +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 788e26dd-0be0-4990-ac0f-a2ff2938dc6c + - ! 86499ec9-1d4a-44fe-8fde-94bdda6d6e21 +- ! + PrefabRemaps: + [] + Name: CursorController + Enabled: true + ScriptAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2c3c743b-2fbd-496c-be27-6be254ba9a5b + - ! 5204358e-6292-4d04-9ebe-6c8f92e42668 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a047e555-f98b-4da9-af51-90992dd2fe13 + - ! 83493966-342a-4cf2-890c-4d27e5ae12b5 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Low Stand + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Shake Hand + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + - 02a86b70-f0f0-41ad-87bd-21c32b796670: 8f5b51cb-131a-42fa-9ea7-67cee50d6af2 + - 03f7bc43-5636-41fb-a9fc-1dbf378a0dd5: e3a7a944-c642-433e-b640-41b775d7e247 + - 050bbf47-8842-4bc2-abe8-7a28fc5c70ab: 6b721f55-2fde-4515-8a98-e0623db0c62c + - 05ab905d-7685-4e29-9db5-9042078af2d6: 93d669d1-3439-4d61-ab72-99f1c6f76a81 + - 07d5618b-22f9-4656-87fd-b0198fa0aeb6: d0f8de20-470a-4599-b195-7ae175fbfc78 + - 08614d83-f067-4740-a346-a0b10d1ffd62: 055525b2-7c1a-4f70-9358-23e0d7d156b8 + - 0b1bf884-4efd-4b6d-83ac-82540696baec: 283ab8bc-80c5-48db-8f22-6b4ab6e6cffe + - 0deb320d-887e-4b1a-b988-f11b2c4d951b: edcde6ca-b40c-4768-a7d2-dd31da71277a + - 0ff1487a-e8d6-4aaf-9067-a61f2fa4c77e: ad14db46-53e1-460c-a8bf-8c26bd57f37c + - 11e7d38c-6fbb-4f05-b89d-a44a9ae8336a: 0473b266-866f-4f68-af21-9d3530e1914f + - 1353e5b8-fa96-4236-9812-7fd080b04697: 04ac8134-d110-4511-b25a-891f2f66584b + - 142880c6-721e-45a0-bdb5-e75cc9a91f53: c4bd0335-b377-414d-8521-c473e35c5774 + - 162925ed-6a4c-401a-a521-86902851061f: 5fb8a5cc-ee0c-4abd-bff7-cb1d3aa2a5bc + - 1ab3fbdf-e28e-45a8-943d-76938ac530b4: 12ba946a-1a8e-4e95-87e5-087ec0b249cc + - 1b6d2315-e870-4a05-9817-029318f16b5a: f4788f9e-4139-4eef-90bc-771177044cd8 + - 1b99283b-6388-4d39-a423-7be97ff2f32d: 9c6e9559-53cb-4842-afc9-a9cf725bce0a + - 1dc67040-bae9-41b8-960f-b57a94672dfa: ae4a9bad-4c46-4bf3-8553-28e8b9416cce + - 1f2cf37f-fd91-492c-a63b-884a08cd9215: 15d70faf-f504-434b-bc7b-bb474fac2980 + - 20841b1c-e2a6-42cf-9bd0-4fd466eae39c: 95dea6d2-2c8c-477b-a1f3-e372e02e6a0b + - 22e40d6c-4405-4a2f-9eda-9f5e0d425a75: b935b9b7-3c38-42b9-8045-c6609e019a8f + - 258ea60f-f57b-4a6f-9bd2-98a9b9b438a2: 7e835154-746f-4b08-a586-447595fc19a1 + - 27db1592-a7a2-4e26-b369-afc71511fb9e: 72e54688-1bc6-48fc-89bb-5fc41b166ae0 + - 29d989ad-aee7-43c3-95e0-02735ba7dd2f: db24ae45-9fd3-4bac-a406-0cad45a3f045 + - 2b9a5b20-6a89-4fd1-906b-e97f4259712f: 0d34b376-2158-453b-931e-0189d0cf2dfa + - 2d1055e9-e5d5-49f7-8955-de8f46da0f6a: e8f1e2a0-17f6-445d-ad3b-100743436988 + - 309860a1-e8fd-49a7-8b08-343086fa08dd: a227f4f5-bb8b-4083-8ff3-76b300794afe + - 31df5cf9-9877-4359-9161-92964449a557: aff70df1-490d-4236-bfe7-1c9fcd1a028a + - 32346fd9-8168-4666-87d9-78060a1ebed2: 1f7bf313-445c-40f6-92ad-a40a50dea575 + - 3f2dd09b-edbc-4994-85a8-a366bf77ca69: 9f23857f-0354-4c96-a54d-0a74653401b0 + - 3f428eaa-6547-40ec-865e-50071201a35e: 4756a1da-6124-4cbb-af0c-1631649652f6 + - 40a2ea5b-f164-48c5-8ffc-c3dfcacc6d91: db9cf02a-a38c-47aa-b059-2faab8f74c75 + - 411b54bc-1db6-4fe9-908b-1f4f0a372ce0: ea14478c-a162-45e4-a7a7-af2ac18b7d4c + - 4527c113-2c46-40b1-bb7d-3acd00e22bd2: 94f70a69-9105-4332-988c-b375881b7bd9 + - 4696df6f-6058-47bd-8129-72a773a76e75: e0925a50-c8a1-4759-9d26-eac6079b1fdb + - 4971d6a8-a5fe-431e-b815-07883d1bd9b4: 2878109d-8f26-4010-b916-efdc9fecbdf8 + - 50f48cde-a492-4587-8b76-26cff1adec60: 2a62abd3-948e-4fb7-bacd-e846fe772fc8 + - 511aa840-3b12-48da-8eb3-6d4a20316ec0: a92fd0a3-ee3a-4273-a91b-d625d14ce8d2 + - 5173a6a1-dbb7-4e12-a52f-a3799a1fea13: 4f009679-ee66-4a0c-8747-6163b9934265 + - 52a3f271-30a0-4e9c-9f47-c80145bab1b2: 34e94d3a-2900-4f04-bbdd-8be35309a24f + - 531e560d-ffa5-433d-8224-6c252eb6a9bb: 64c3ab11-f5ff-4e18-91b8-c697a26228bd + - 58d2a4c0-8eba-4ef1-b77e-c7f7d1192d79: d6371ebf-1d3b-4bfa-bdd8-c0a7fabf8f39 + - 5bd739b3-039d-4f2e-bc80-61fd158ce1aa: 633241a4-412e-4a33-acb2-8487ae2291c9 + - 5da27569-8d52-4e61-a3ab-bb97294d4ce0: 02d483b7-4973-456a-94a1-5973d02ed09f + - 60037818-559f-4345-ac44-f7c5dfc86f3c: 50cf7888-914f-493a-8fcd-16a430ffe91e + - 6229e282-4449-48f3-8ef5-b90c67ba62fd: 5a63eead-ba79-4ecd-b8cd-509fbea8a4f2 + - 63462f25-ed20-4163-b0fe-197f3a97f011: 95f1c1ea-6b70-4e98-80bd-216ce18becb4 + - 6480de4a-e83a-4ebf-919e-d73bc4fd2eee: 3ab55c9b-dd82-4532-943e-d1df8f009177 + - 66d9ff94-deb4-4e42-bc41-0182a168c169: 12549dba-74cb-48d3-a50f-73daa0d64196 + - 674c121a-0fd0-437d-879c-9ce6b8f935fb: d1349dfb-66e5-406a-bab7-cbedc09f0583 + - 691be975-a6fd-42b9-a51a-bcdeebedb743: 7976d725-6d53-4c31-a2c3-f96d25c2b921 + - 6b078b1c-99b5-4d40-81a0-46d9ea3bb1e3: a0534ec9-6292-40ec-b6cd-859f7738f85f + - 6f50df52-5045-47a8-839c-bbd20bc99bb5: 1d1c8de5-b019-4d0a-adc6-1ad389890762 + - 711f9787-d880-4475-8f0a-0cf6b2492a6b: 2536fae3-02cb-4aa5-8c55-952afc929db0 + - 71450838-42ba-49f9-b33d-58b64a9b54c9: 94200c52-425a-43b6-8893-512b230a7726 + - 72ba5fa0-3395-495c-8d87-22bc85f50855: 1d87de05-c879-4ac1-8782-eaceafb0ab7c + - 7384c798-527a-41b9-862e-c12bc86376d3: b3bcf351-f103-47df-a4e8-fd46dbd2a734 + - 74914d99-aae6-4a1c-b4ec-d949b2a9253c: 24d6dc84-ed70-4a53-a3c4-9224488ec60a + - 75b74ef8-ecbe-4864-bb69-4c09f5be1606: bf692fb0-1af3-476e-97cd-092308e529f6 + - 771da37d-9459-45e0-8f98-9538710f0dc5: 0003afb6-e082-42ab-b89f-d22eb256f228 + - 77f1a5d3-8594-40b5-8085-79f1d46ddd71: cb2a32d4-1a84-411d-aa42-bf42bfa144e4 + - 780f2ffa-fc27-462d-85fd-d216d21e774a: 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa + - 78778cbc-4979-40f8-b213-f0cab136c8aa: efcdb1e4-82aa-48d7-adff-ea83aadec8f0 + - 7bb17581-fb13-4afd-9cfb-15d0180ba723: 3b52e609-bccb-4474-8396-af04afb47613 + - 7cb41a88-1dcc-444c-8349-a62b24a8e765: bb7fd053-b7b8-4148-9784-7a4ecfe99c2b + - 7d7953db-e981-48fc-b8af-77040f8455cd: 66b39338-c86b-4347-b964-852a182ec082 + - 7e117ed6-6fbe-4edb-941c-63a96b698e39: 822c9dec-583d-4588-bf8f-9e76769d9791 + - 7f36a885-824c-4329-8b11-919324b5c881: 7f240caf-60c7-4d5e-b716-5090899a20ce + - 80b63097-b1ef-4467-bdaa-a0a482172316: 0f43b8a1-5f63-44c3-9ba0-32318363dc57 + - 821f1d70-8d79-44db-bc8b-fabf613822c0: 33423227-0e0f-43a6-a69d-a713b9653e99 + - 826246a6-44ea-4331-85b3-702fa57389fb: 47ceb1fa-65b6-498e-af35-6f5af78c2618 + - 850751ef-604a-41bc-a846-0701b76493b1: 951124b2-906c-4f4f-8422-a881e9d98b4a + - 86412b42-c0cf-4fc3-a8a2-fe90221abc59: 4ca9e76a-f818-4a4f-954e-2777667c610a + - 8d12c0a3-c20a-4dd4-b82e-4aa3489ca78f: 37803923-6d4a-4268-aba1-ef5d1d23cd46 + - 8dbfcb2b-c189-46eb-960f-45c157d8484a: 4b527cf4-3e27-4559-b291-0a0b985b4717 + - 8e8470af-1ad4-4317-96d6-2bd90d653cbb: e417673c-029b-4df2-b240-55edb111620f + - 92490a16-2530-449b-8ee9-f65ff2095dd2: 345fde54-ce8d-467e-bc01-3c54e0129ca0 + - 933ca421-582e-407b-bfc6-206a10cef5f3: 5cc46581-44dd-43e4-a2c1-e2bd294a97e6 + - 9827271d-d758-4004-bc20-03cf1e136d1c: 1abd5650-e4e3-4218-9dfe-2d518a0b161b + - 9b586360-5bcd-4bd9-9646-5b5ef75f1788: eafdc1ea-a52b-486f-af4a-13a4f947b89f + - 9f2b3f06-77a1-4255-830d-ad50801287bd: eb708bc5-ef13-451c-b7b2-46398c05d999 + - 9f93fce7-edb2-4d42-b09c-939416f49cc0: 0b203467-22aa-4c6c-a7de-22b8f87e0ad6 + - 9f9bcf5b-6b30-496e-b734-5aa240e969c5: c3c87762-eca6-4731-87a2-f7596e7c0479 + - a114455b-6a9f-4990-a3cc-fa88e4a4829a: 59d49307-84ec-4eb8-aa0f-22f915eb8a4f + - a3ea66da-0ca8-4958-8d69-6f5045fa706c: 009892ac-73e5-4967-bd85-efc71c49f0a7 + - a3f4225f-153f-429a-8cd2-aa84d9db52ad: fb7196a9-d764-4f20-bf77-8d5722266d27 + - a53cac7a-4a63-4351-a6da-b868ffac9c0a: c609db94-d0da-4230-a62a-7f71134c5356 + - a650b8d7-507a-404b-bfe5-9602e915dae8: 861c2385-029b-4a3f-bb80-aad4ce6de18d + - a72bed4c-f7e3-4691-93f3-d06d66d75dd0: 32b9372e-60ad-430c-87fe-a43f6258b4e5 + - a813a7a6-1822-4279-8348-2c314e6ab150: 224e1b84-2cd6-40dc-8b4d-39e26681bfd1 + - a9edf4cd-40ec-4fe4-83b1-2f9439932ef0: 341ee23b-b82c-4f55-b23d-193c0df5c016 + - abb42942-9861-46af-946b-236bb527035f: b0e47302-1cbb-4346-a62f-8e341c73f7b5 + - abcc8726-930d-4609-b007-74454c9f20f9: 3b885064-9472-4754-9b78-42ff961487b9 + - b27cfdfa-9f62-4102-83e8-b9bedf8c2910: 682266ba-13a1-48d4-92fd-608428328dfc + - b297e024-8530-43a8-9271-1d093788af2f: c6e2a5f7-ab1a-4d18-a9d6-a0cd79b37fa7 + - b2d002f5-2b50-4f66-8c0d-93d5dba56556: 28b286b8-7e97-4ed0-bbce-b813966137ff + - b55b19ef-83c9-4922-aaea-ded86b65a663: 22806c77-18d4-41eb-81b3-b85d1228c059 + - bdf62eca-a7ef-42cb-9f0a-c0db5dd7b3e7: 1573681c-afad-4710-bf30-13ab306587e0 + - be49fb74-bd52-43d9-8ea6-b79a6965e36d: ce6d11c6-be32-4e32-b7b8-6c199feef4ea + - cb14c3ea-7067-409a-83f3-618dbe55e547: 87b21f5e-7b4d-4754-af21-4925af99ffb4 + - cd4ffac9-4a32-4dba-b0a2-db117c38b975: 6f03f0b2-6d81-4bc9-a49b-6d387e0245ff + - ce9ff426-cb39-478d-8067-8dea5e623fc6: faaefd86-d1ae-4d56-a280-766a06b98cf6 + - cea83226-8c66-44d7-895a-2480d9cc1c35: 5ce67bb0-6c08-472c-b67f-77bde9454993 + - cf2d9e76-9520-473b-8b9b-68ce183d22ca: cfce736c-a49b-4a3e-947a-32a8e98a4961 + - cfc52ae9-3c49-4c47-8299-82d37cdb1095: 8d2fc7e4-0fe6-43d2-b837-fbe1aa318543 + - d180e208-2df8-4507-8437-213a1fbd5da6: 3c0c8d96-d019-421b-8641-2f6c4fef657f + - d2c2e4e9-c17c-4ecc-902f-2283f319023b: 81d57b7d-0209-4404-a775-f7ef13ad4f97 + - d8ffb52f-2569-42b3-a616-c75eb7fe7e36: ca642efc-944a-4dac-beb4-508163707dd4 + - d9e2d13e-9f8c-4798-83f1-83fed0cdb757: e3a03ad7-eb65-485e-86e0-cd9f0e93e442 + - dcf6aa57-0caa-4b44-a73b-2e33da4f1428: 1e231994-34a6-48c1-94ee-339987f113c7 + - dd01563a-be2b-4815-85ad-bf139803cc1f: 5aee8ecc-3bc7-4fd4-a5bc-c0eaa693a469 + - dd368761-3c9f-4261-afbf-469cb4681d3d: f08c52f6-14c2-4ded-be77-3a2b3f47c577 + - dddd8a38-ce19-4f71-8776-9826e6597567: 96aa9a5e-354d-415a-ac80-5442481fec05 + - de62f5f3-2f86-4c98-b357-a44d603496f1: 1907c2c5-2d81-47ce-96c9-eeb579299134 + - e8194f5f-aab4-4dff-8e59-92d2aaf9c042: edd67c66-78f4-4deb-a3bf-c7b0b07504f3 + - e9344e0a-57f1-4226-9a18-a84052078b1b: 42c8f113-929e-4b03-b3c0-1e0908941234 + - eb361989-1d4a-41f7-a205-235ce6f4e3b9: 24d70dc1-4597-48e0-9370-c6e9293594d4 + - ebf022e3-0fd7-4f48-b695-a86d4509dbfb: 7ca6c509-63a2-4a25-877e-e28ae50f4f4f + - ec33c966-ab83-4e2c-9dd1-9abe30a16e47: 24b98cd7-d5a4-4872-b17b-a6bea152b437 + - efcda464-fbc4-45be-93af-a83450f936fa: 0465eda0-f2a8-46a0-89bf-aec9d8b8da01 + - f154d1c1-2595-4578-acc2-6872637af31a: fd649b68-8f72-465f-baa6-ceef905acca1 + - f2db0563-6c95-499d-8ddb-aa5cfaaf22f2: a216ab78-0022-4fc2-96cf-862ffa9f0371 + - f3c8087e-8414-4601-833d-96cf682f94d3: c224f6fa-05b2-43d9-b45b-0050539a4688 + - f66a2c0c-ecc0-41a4-be4a-21ad0c1b6cb7: 63d95309-a416-46c0-a21b-462bd3335750 + - f9d02a8c-71a4-411f-a21e-a7b3329c62d6: cb9bed1c-7640-4b13-9103-67d3e3ae7401 + - fc6a94ee-23d6-4637-a73b-30ac1b571eca: 5197ee39-b38d-42eb-8c32-d9938bfefb40 + - ff6c151e-214e-4216-8d76-8d4244e2a6e8: 481aca89-f9bf-4ce1-a3a8-d75fc0ff915b + Name: "[SpectaclesInteractionKit]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 142880c6-721e-45a0-bdb5-e75cc9a91f53 + - ! abcc8726-930d-4609-b007-74454c9f20f9 + Components: + [] diff --git a/Spectacles-2-Unitree/Assets/Scene.scene.meta b/Spectacles-2-Unitree/Assets/Scene.scene.meta new file mode 100644 index 00000000..891cac72 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Scene.scene.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Scene: ! 0a1ccb1a-fe88-4fbb-9883-e3af3c75fd99 + ImporterName: SceneImporter + PrimaryAsset: ! 0a1ccb1a-fe88-4fbb-9883-e3af3c75fd99 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav new file mode 100644 index 00000000..e899411f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:304a23ed242d27af98203301a609405225a7f9ec75ce2c1b43510dd14a3d1d5b +size 10358 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav.meta new file mode 100644 index 00000000..3f369bf6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/HoverAudioTrack.wav.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + FileAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + ImporterName: FileAudioTrackImporter + PrimaryAsset: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + FileAudioTrack: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav new file mode 100644 index 00000000..5651bd43 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bff2f6bd83a886afeb08a7fe9009c87b45169cf2cf68286e1a496a0970191696 +size 5486 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav.meta new file mode 100644 index 00000000..290d1c26 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerEndAudioTrack.wav.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + FileAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ImporterName: FileAudioTrackImporter + PrimaryAsset: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + FileAudioTrack: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav new file mode 100644 index 00000000..4757e83e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d74e313ed62b13c967d889f908ce00119faac1917763df5ad4d2f74d2e4a96c5 +size 10682 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav.meta new file mode 100644 index 00000000..88e6dacf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Audio/TriggerStartAudioTrack.wav.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + FileAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + ImporterName: FileAudioTrackImporter + PrimaryAsset: ! d531ff43-b8df-4401-839c-645878c5bd2e + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + FileAudioTrack: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat new file mode 100644 index 00000000..e2e9b1c1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 7fd6e6da-73cc-43ac-832f-105864be665d +- ! + CachedProperties: + - Port_Base_N014: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_Color_N014: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_Depth_N004: + typeIdx: 1 + value: 1.000000 + - Port_FinalColor1_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor2_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor3_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_GSplatPointSize_N004: + typeIdx: 1 + value: 0.000000 + - Port_LODValue_N001: + typeIdx: 1 + value: 0.000000 + - Port_Mask_N014: + typeIdx: 1 + value: 1.000000 + - Port_RayDirection_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_RayOrigin_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_Value4_N017: + typeIdx: 1 + value: 0.000000 + - Port_WorldNormal_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_WorldPosition_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_WorldTangent_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + - Tweak_N15: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - brightness: + typeIdx: 1 + value: 0.350000 + - glowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - glowColorindexGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Screen + Properties: + Port_Input0_N003: + typeIdx: 1 + value: 0.000000 + Port_Input0_N011: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + handGlowTex: + typeIdx: 9 + value: + id: 7b7a2bf5-e391-465f-aa24-aba1d2b4b8d5 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + handGlowTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + handGlowTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + handGlowTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + handGlowTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + indexBrightness: + typeIdx: 1 + value: 1.000000 + indexGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + thumbBrightness: + typeIdx: 1 + value: 1.000000 + thumbGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! de1aadf5-822b-4f69-87cb-6a9cdd0297f4 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat.meta new file mode 100644 index 00000000..cde88e80 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightLeft.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + ImporterName: MaterialImporter + PrimaryAsset: ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat new file mode 100644 index 00000000..85da228f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat @@ -0,0 +1,128 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b6a1fb05-9d96-489e-bafe-2fecd37bf99a +- ! + CachedProperties: + - Port_Base_N014: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_Color_N014: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_Depth_N004: + typeIdx: 1 + value: 1.000000 + - Port_FinalColor1_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor2_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor3_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_GSplatPointSize_N004: + typeIdx: 1 + value: 0.000000 + - Port_LODValue_N001: + typeIdx: 1 + value: 0.000000 + - Port_Mask_N014: + typeIdx: 1 + value: 1.000000 + - Port_RayDirection_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_RayOrigin_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_Value4_N017: + typeIdx: 1 + value: 0.000000 + - Port_WorldNormal_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_WorldPosition_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_WorldTangent_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + - Tweak_N15: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - glowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - glowColorindexGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Screen + Properties: + Port_Input0_N003: + typeIdx: 1 + value: 0.000000 + Port_Input0_N011: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + handGlowTex: + typeIdx: 9 + value: + id: 7b7a2bf5-e391-465f-aa24-aba1d2b4b8d5 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + handGlowTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + handGlowTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + handGlowTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + handGlowTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + indexBrightness: + typeIdx: 1 + value: 1.000000 + indexGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + thumbBrightness: + typeIdx: 1 + value: 1.000000 + thumbGlowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! de1aadf5-822b-4f69-87cb-6a9cdd0297f4 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat.meta new file mode 100644 index 00000000..8832c333 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerHighlightRight.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 03d33697-6495-4e15-9a2d-646411a514a9 + ImporterName: MaterialImporter + PrimaryAsset: ! 03d33697-6495-4e15-9a2d-646411a514a9 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat new file mode 100644 index 00000000..ea6ace6e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat @@ -0,0 +1,74 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8d91fbc4-8316-43da-8c84-68c91d3d48b0 +- ! + CachedProperties: + - fadeLevel: + typeIdx: 1 + value: 0.580000 + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - tintColor: + typeIdx: 5 + value: {x: 0.968627, y: 0.826139, z: 0.118761, w: 1.000000} + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Add + Properties: + PreviewEnabled: + typeIdx: 0 + value: 0 + brightness: + typeIdx: 1 + value: 0.500000 + glowColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mainTex: + typeIdx: 9 + value: + id: 434234ae-e5c8-4178-b873-f1ad496fc142 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + mainTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mainTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mainTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + mainTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + pinchBrightness: + typeIdx: 1 + value: 1.000000 + pokeBrightness: + typeIdx: 1 + value: 1.000000 + Pass: ! 96e91192-4b1d-43d4-9bfa-430910e799cf + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat.meta new file mode 100644 index 00000000..8a1c8651 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/FingerTipGlow.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + ImporterName: MaterialImporter + PrimaryAsset: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat new file mode 100644 index 00000000..e4cc8811 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat @@ -0,0 +1,30 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 09ab7dc1-acba-4c64-8f2a-aee3258c4028 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + PreviewEnabled: + typeIdx: 0 + value: 0 + Tweak_N0: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Pass: ! c5214352-c697-42bc-83ed-99cfc5efb1de diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat.meta new file mode 100644 index 00000000..53d4d586 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderLeft.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + ImporterName: MaterialImporter + PrimaryAsset: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat new file mode 100644 index 00000000..d1d4147f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat @@ -0,0 +1,30 @@ +- ! + PackagePath: "" + PassesInfo: + - ! a3987fa8-306a-460b-8e79-f33352a80379 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + PreviewEnabled: + typeIdx: 0 + value: 0 + Tweak_N0: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Pass: ! c5214352-c697-42bc-83ed-99cfc5efb1de diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat.meta new file mode 100644 index 00000000..96b3e3df --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/HandOccluderRight.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + ImporterName: MaterialImporter + PrimaryAsset: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat new file mode 100644 index 00000000..884fa3d5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat @@ -0,0 +1,75 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b4c64f56-e78e-452e-9399-de359c1cae08 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 0.999969, z: 0.999985, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 738d604c-2468-45f6-b1a3-e787daaf9704 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! d078f682-530c-42dd-9988-3f029ffdf6e6 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat.meta new file mode 100644 index 00000000..f33d5d47 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BaseHandVisualsMaterials/RadialGradientOcclusion.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + ImporterName: MaterialImporter + PrimaryAsset: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat new file mode 100644 index 00000000..50542084 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8e29ed71-493e-497e-af51-ff7e059cd7c4 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: b906a729-a545-43d2-a7d4-7e8c8e9acfb1 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat.meta new file mode 100644 index 00000000..76e5bd3a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/BitmojiMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! ef3a3d48-a46b-4cc9-a244-eaaf4e812941 + ImporterName: MaterialImporter + PrimaryAsset: ! ef3a3d48-a46b-4cc9-a244-eaaf4e812941 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat new file mode 100644 index 00000000..ab9f371a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 9e748b9b-e012-4bc4-b8a3-7510aa267a0a +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 0f94ff6a-ac94-4341-9937-de5a562687da + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat.meta new file mode 100644 index 00000000..6bd071f0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ContainerImageMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 1766b243-ecbd-49ab-99a0-0a126bf505c7 + ImporterName: MaterialImporter + PrimaryAsset: ! 1766b243-ecbd-49ab-99a0-0a126bf505c7 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat new file mode 100644 index 00000000..3c41725c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6dcde2b4-a6d7-40f5-80d5-0f2c644ffa13 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: b104c4df-91ff-4a59-8bb8-71a02a096038 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat.meta new file mode 100644 index 00000000..67b7cd4d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/LogoMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 4d35bac2-e858-4d9c-afa4-6f02ae7d5065 + ImporterName: MaterialImporter + PrimaryAsset: ! 4d35bac2-e858-4d9c-afa4-6f02ae7d5065 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat new file mode 100644 index 00000000..6ba7ee9a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat @@ -0,0 +1,65 @@ +- ! + PackagePath: "" + PassesInfo: + - ! c6134076-aa58-4d18-913e-a7aca68d2e0b +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 2 + Defines: + [] + BlendMode: AlphaTest + Properties: + Port_Input1_N013: + typeIdx: 1 + value: 0.000000 + Port_Input1_N016: + typeIdx: 1 + value: 0.000000 + Port_Input1_N017: + typeIdx: 1 + value: 0.500000 + Port_Input1_N024: + typeIdx: 1 + value: 0.000000 + Port_Value1_N015: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N022: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + alphaTestThreshold: + typeIdx: 1 + value: 0.500000 + lineColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.039216, w: 1.000000} + lineWeight: + typeIdx: 1 + value: 0.250000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 982bf177-d80f-4e3a-a455-7746b0fac73a + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat.meta new file mode 100644 index 00000000..d780822b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/NormalBasedTargetOutline.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + ImporterName: MaterialImporter + PrimaryAsset: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat new file mode 100644 index 00000000..8cfae0f6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat @@ -0,0 +1,130 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 3339b3fb-4808-4696-a0d6-cef9a3fe86ae +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 0.420172, y: 0.414572, z: 0.512367, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: -0.200000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! bc0911b7-5cde-41ff-8801-7fb992bab649 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat.meta new file mode 100644 index 00000000..7d036641 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkInactive.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 2934a39f-046b-4ced-afd2-555a4f234041 + ImporterName: MaterialImporter + PrimaryAsset: ! 2934a39f-046b-4ced-afd2-555a4f234041 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat new file mode 100644 index 00000000..959ee2d2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat @@ -0,0 +1,74 @@ +- ! + PackagePath: "" + PassesInfo: + - ! fa3cd623-e389-4b1b-b7c2-bae5a0176387 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Position1_N078: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 78 + Tweak_N81: + typeIdx: 5 + value: {x: 0.078431, y: 0.078431, z: 0.078431, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 00f14031-5da3-41ae-9b33-273f1600bbfc + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat.meta new file mode 100644 index 00000000..1349ea0a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonDarkRadial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + ImporterName: MaterialImporter + PrimaryAsset: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat new file mode 100644 index 00000000..e1e96b92 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat @@ -0,0 +1,499 @@ +- ! + PackagePath: "" + PassesInfo: + - ! d47bce33-aba6-40de-94ce-19cf3153e2d9 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_GLTF_LIGHTING + - NODE_10_DROPLIST_ITEM 0 + - NODE_11_DROPLIST_ITEM 0 + - NODE_30_DROPLIST_ITEM 0 + - NODE_32_DROPLIST_ITEM 0 + - NODE_37_DROPLIST_ITEM 0 + - NODE_44_DROPLIST_ITEM 0 + - NODE_47_DROPLIST_ITEM 0 + - NODE_60_DROPLIST_ITEM 0 + - NODE_7_DROPLIST_ITEM 0 + - NODE_8_DROPLIST_ITEM 0 + - Tweak_N30 0 + - Tweak_N32 0 + - Tweak_N37 0 + - Tweak_N44 0 + - Tweak_N47 0 + - Tweak_N60 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Albedo_N405: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_DebugSheenEnvLightMult_N003: + typeIdx: 1 + value: 1.000000 + Port_DebugSheenPunctualLightMult_N003: + typeIdx: 1 + value: 1.000000 + Port_Emissive_N405: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N043: + typeIdx: 1 + value: 0.000000 + Port_Input2_N062: + typeIdx: 1 + value: 0.000000 + Port_Metallic_N405: + typeIdx: 1 + value: 0.000000 + Port_Opacity_N405: + typeIdx: 1 + value: 1.000000 + Port_SpecularAO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_SpecularAO_N405: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColorFactor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 1.000000} + baseColorTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseColorTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColorTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColorTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseColorTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColorTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + baseColorTexture_rotation: + typeIdx: 1 + value: 0.000000 + baseColorTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatFactor: + typeIdx: 1 + value: 0.000000 + clearcoatNormalTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + clearcoatNormalTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatNormalTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatNormalTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + clearcoatNormalTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatNormalTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatNormalTexture_rotation: + typeIdx: 1 + value: 1.000000 + clearcoatNormalTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatRoughnessFactor: + typeIdx: 1 + value: 0.000000 + clearcoatRoughnessTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + clearcoatRoughnessTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatRoughnessTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatRoughnessTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + clearcoatRoughnessTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatRoughnessTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatRoughnessTexture_rotation: + typeIdx: 1 + value: 1.000000 + clearcoatRoughnessTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + clearcoatTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + clearcoatTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + clearcoatTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + clearcoatTexture_rotation: + typeIdx: 1 + value: 1.000000 + clearcoatTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 0.000000 + emissiveFactor: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + emissiveTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + emissiveTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + emissiveTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + emissiveTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + emissiveTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + emissiveTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + emissiveTexture_rotation: + typeIdx: 1 + value: 1.000000 + emissiveTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + metallicFactor: + typeIdx: 1 + value: 0.000000 + metallicRoughnessTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + metallicRoughnessTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + metallicRoughnessTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + metallicRoughnessTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + metallicRoughnessTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + metallicRoughnessTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + metallicRoughnessTexture_rotation: + typeIdx: 1 + value: 1.000000 + metallicRoughnessTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + normalTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + normalTexture_rotation: + typeIdx: 1 + value: 1.000000 + normalTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + roughnessFactor: + typeIdx: 1 + value: 0.600000 + screenTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + screenTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + screenTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + screenTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + screenTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenColorFactor: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + sheenColorTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + sheenColorTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenColorTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenColorTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + sheenColorTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenColorTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + sheenColorTexture_rotation: + typeIdx: 1 + value: 1.000000 + sheenColorTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + sheenRoughnessFactor: + typeIdx: 1 + value: 1.000000 + sheenRoughnessTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + sheenRoughnessTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenRoughnessTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenRoughnessTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + sheenRoughnessTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + sheenRoughnessTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + sheenRoughnessTexture_rotation: + typeIdx: 1 + value: 1.000000 + sheenRoughnessTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + transmissionFactor: + typeIdx: 1 + value: 0.000000 + transmissionTexture: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + transmissionTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + transmissionTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + transmissionTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + transmissionTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + transmissionTexture_offset: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + transmissionTexture_rotation: + typeIdx: 1 + value: 1.000000 + transmissionTexture_scale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Pass: ! dcde51ce-7880-40e6-8cea-1c0190718579 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat.meta new file mode 100644 index 00000000..c762195f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOffIcon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + ImporterName: MaterialImporter + PrimaryAsset: ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat new file mode 100644 index 00000000..a010f0b1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 1caaca25-4492-4c01-9061-e1dbd828c93d +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + SecondGradient: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.039216, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.039216, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 0.750000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 29a74e83-c179-4b20-8abb-b6fff71cb08b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat.meta new file mode 100644 index 00000000..8082829f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnDefault.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + ImporterName: MaterialImporter + PrimaryAsset: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat new file mode 100644 index 00000000..c5796aa3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 256531ed-c92a-4169-8724-983dea0efbf1 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + SecondGradient: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 0.000000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 29a74e83-c179-4b20-8abb-b6fff71cb08b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat.meta new file mode 100644 index 00000000..22df284e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnIcon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + ImporterName: MaterialImporter + PrimaryAsset: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat new file mode 100644 index 00000000..6a0a83de --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 066913b6-986d-4bc6-88a2-ac383fd5a3c0 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + SecondGradient: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.039216, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.039216, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 2.000000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! cda905fe-9d9e-4ca3-b7e9-30ae90dd980c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat.meta new file mode 100644 index 00000000..42fa7bb8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PinchButtonToggleOnSelect.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + ImporterName: MaterialImporter + PrimaryAsset: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat new file mode 100644 index 00000000..453d5965 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! ce7783f2-957f-4fe7-a771-1d9ae5b78556 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N062: + typeIdx: 1 + value: 0.500000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Position1_N014: + typeIdx: 1 + value: 0.210000 + Port_Position2_N014: + typeIdx: 1 + value: 0.450000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N014: + typeIdx: 5 + value: {x: 0.282689, y: 0.180087, z: 0.111696, w: 1.000000} + Port_Value1_N014: + typeIdx: 5 + value: {x: 0.614878, y: 0.498238, z: 0.148318, w: 1.000000} + Port_Value2_N014: + typeIdx: 5 + value: {x: 0.943191, y: 0.798566, z: 0.075456, w: 1.000000} + Port_Value3_N014: + typeIdx: 5 + value: {x: 0.976471, y: 0.825116, z: 0.371054, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 26d9d10e-0b53-4ffc-b516-b290c54fcd35 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! ef904425-39fe-4376-9657-20bb7aa3bab8 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat.meta new file mode 100644 index 00000000..faec4c49 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 1.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + ImporterName: MaterialImporter + PrimaryAsset: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat new file mode 100644 index 00000000..722799c3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat @@ -0,0 +1,212 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 298c3605-17f2-4bbf-9a4f-b7fa1419a10d +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Import_N027: + typeIdx: 1 + value: 0.700000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.600000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N028: + typeIdx: 3 + value: {x: 1.000000, y: 2.350000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N028: + typeIdx: 3 + value: {x: -0.500000, y: -1.180000} + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Position1_N007: + typeIdx: 1 + value: 0.330000 + Port_Position1_N011: + typeIdx: 1 + value: 1.000000 + Port_Position1_N031: + typeIdx: 1 + value: 0.330000 + Port_Position2_N007: + typeIdx: 1 + value: 0.660000 + Port_Position2_N011: + typeIdx: 1 + value: 0.550000 + Port_Position2_N031: + typeIdx: 1 + value: 0.580000 + Port_Position3_N007: + typeIdx: 1 + value: 0.510000 + Port_Position3_N011: + typeIdx: 1 + value: 1.000000 + Port_Position3_N031: + typeIdx: 1 + value: 0.800000 + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.149996, y: 0.149996, z: 0.149996, w: 1.000000} + Port_Value0_N011: + typeIdx: 1 + value: 0.100000 + Port_Value0_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.050004, y: 0.048997, z: 0.050004, w: 1.000000} + Port_Value1_N011: + typeIdx: 1 + value: 1.000000 + Port_Value1_N031: + typeIdx: 5 + value: {x: 0.309804, y: 0.309804, z: 0.309804, w: 1.000000} + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.549996, y: 0.526299, z: 0.505989, w: 1.000000} + Port_Value2_N011: + typeIdx: 1 + value: 0.000000 + Port_Value2_N031: + typeIdx: 5 + value: {x: 0.949996, y: 0.949996, z: 0.949996, w: 1.000000} + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.663355, y: 0.635569, z: 0.597360, w: 1.000000} + Port_Value3_N011: + typeIdx: 1 + value: 1.000000 + Port_Value3_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value4_N007: + typeIdx: 5 + value: {x: 0.298039, y: 0.286275, z: 0.294118, w: 1.000000} + Port_Value4_N011: + typeIdx: 1 + value: 0.000000 + Port_Value4_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! c6c08f7c-2a01-4ad2-be2f-19b95217f619 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat.meta new file mode 100644 index 00000000..76a0137c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 10.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 271b74cf-8459-4dd1-83a4-91af22fc6f5f + ImporterName: MaterialImporter + PrimaryAsset: ! 271b74cf-8459-4dd1-83a4-91af22fc6f5f + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat new file mode 100644 index 00000000..22cbfc0e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat @@ -0,0 +1,153 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 26df3ea2-122a-4f7d-a68f-7d4486a6ae90 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N062: + typeIdx: 1 + value: 0.400000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N005: + typeIdx: 1 + value: 0.600000 + Port_Input2_N007: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Position1_N003: + typeIdx: 1 + value: 0.000000 + Port_Position2_N003: + typeIdx: 1 + value: 0.370000 + Port_Position3_N003: + typeIdx: 1 + value: 0.750000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N003: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N003: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value2_N003: + typeIdx: 5 + value: {x: 0.597208, y: 0.562066, z: 0.544503, w: 1.000000} + Port_Value3_N003: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value4_N003: + typeIdx: 5 + value: {x: 0.192782, y: 0.192782, z: 0.192782, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 5112d79b-d07a-4bb1-baaa-686e1b308311 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! d78b8125-853c-40af-9579-f108b34a0fed + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat.meta new file mode 100644 index 00000000..1f4156da --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 2.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 7567f7b4-b4fe-4f1f-9691-27bc68573cc7 + ImporterName: MaterialImporter + PrimaryAsset: ! 7567f7b4-b4fe-4f1f-9691-27bc68573cc7 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat new file mode 100644 index 00000000..6726df4f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat @@ -0,0 +1,185 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 21847f1e-c9a3-412c-b11a-095c7ab8eb7d +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Exponent_N031: + typeIdx: 1 + value: 1.000000 + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N062: + typeIdx: 1 + value: 0.400000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N034: + typeIdx: 5 + value: {x: 1.000000, y: 0.873198, z: 0.239216, w: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N005: + typeIdx: 1 + value: 0.200000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N031: + typeIdx: 1 + value: 1.000000 + Port_Normal_N031: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N007: + typeIdx: 1 + value: 0.240000 + Port_Position1_N018: + typeIdx: 1 + value: 0.000000 + Port_Position2_N007: + typeIdx: 1 + value: 0.700000 + Port_Position2_N018: + typeIdx: 1 + value: 0.270000 + Port_Position3_N018: + typeIdx: 1 + value: 0.340000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value0_N018: + typeIdx: 1 + value: 1.000000 + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value1_N018: + typeIdx: 1 + value: 0.000000 + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.504799, y: 0.520943, z: 0.545144, w: 1.000000} + Port_Value2_N018: + typeIdx: 1 + value: 0.500000 + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.212497, y: 0.220005, z: 0.250004, w: 1.000000} + Port_Value3_N018: + typeIdx: 1 + value: 1.000000 + Port_Value4_N018: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 26d9d10e-0b53-4ffc-b516-b290c54fcd35 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 9d3b32be-cf41-459c-9f37-9b34c96b2f5b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat.meta new file mode 100644 index 00000000..f0fd5cf1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 3.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + ImporterName: MaterialImporter + PrimaryAsset: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat new file mode 100644 index 00000000..36923689 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat @@ -0,0 +1,215 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 370cf410-f1fd-4f59-87ae-64ce7a57c138 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N019: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N035: + typeIdx: 3 + value: {x: 0.400000, y: 0.500000} + Port_Exponent_N023: + typeIdx: 1 + value: 1.000000 + Port_Import_N027: + typeIdx: 1 + value: 0.700000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.600000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input0_N020: + typeIdx: 5 + value: {x: 0.470588, y: 0.470588, z: 0.470588, w: 0.000000} + Port_Input0_N048: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Input1_N020: + typeIdx: 5 + value: {x: 0.239216, y: 0.239216, z: 0.239216, w: 0.000000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N050: + typeIdx: 5 + value: {x: 1.000000, y: 0.809812, z: 0.239216, w: 1.000000} + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N023: + typeIdx: 1 + value: 1.000000 + Port_Normal_N023: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N016: + typeIdx: 1 + value: 0.000000 + Port_Position1_N030: + typeIdx: 1 + value: 0.000000 + Port_Position2_N016: + typeIdx: 1 + value: 0.310000 + Port_Position2_N030: + typeIdx: 1 + value: 0.330000 + Port_Position3_N016: + typeIdx: 1 + value: 0.540000 + Port_Position3_N030: + typeIdx: 1 + value: 1.000000 + Port_Rotation_N035: + typeIdx: 1 + value: -90.000000 + Port_Scale_N019: + typeIdx: 3 + value: {x: 1.000000, y: 2.000000} + Port_Value0_N016: + typeIdx: 5 + value: {x: 0.807843, y: 0.796078, z: 0.498039, w: 1.000000} + Port_Value0_N030: + typeIdx: 1 + value: 1.000000 + Port_Value1_N016: + typeIdx: 5 + value: {x: 0.464378, y: 0.446357, z: 0.286290, w: 1.000000} + Port_Value1_N030: + typeIdx: 1 + value: 0.000000 + Port_Value2_N016: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value2_N030: + typeIdx: 1 + value: 0.200000 + Port_Value3_N016: + typeIdx: 5 + value: {x: 0.289998, y: 0.289998, z: 0.289998, w: 1.000000} + Port_Value3_N030: + typeIdx: 1 + value: 1.000000 + Port_Value4_N016: + typeIdx: 5 + value: {x: 0.480003, y: 0.480003, z: 0.480003, w: 1.000000} + Port_Value4_N030: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! ee5ae376-9d34-426a-9816-ef6e95887a4b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat.meta new file mode 100644 index 00000000..1f757102 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 4.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 74679e29-9817-463b-9427-ffff4cccb602 + ImporterName: MaterialImporter + PrimaryAsset: ! 74679e29-9817-463b-9427-ffff4cccb602 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat new file mode 100644 index 00000000..dbb4e51c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat @@ -0,0 +1,185 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! e2130032-a8c4-45e9-acc4-9c2939a2c7b7 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Exponent_N031: + typeIdx: 1 + value: 1.000000 + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N062: + typeIdx: 1 + value: 0.400000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N034: + typeIdx: 5 + value: {x: 1.000000, y: 0.873198, z: 0.239216, w: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N005: + typeIdx: 1 + value: 0.200000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N031: + typeIdx: 1 + value: 1.000000 + Port_Normal_N031: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N007: + typeIdx: 1 + value: 0.240000 + Port_Position1_N018: + typeIdx: 1 + value: 0.000000 + Port_Position2_N007: + typeIdx: 1 + value: 0.700000 + Port_Position2_N018: + typeIdx: 1 + value: 0.270000 + Port_Position3_N018: + typeIdx: 1 + value: 0.340000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value0_N018: + typeIdx: 1 + value: 1.000000 + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value1_N018: + typeIdx: 1 + value: 0.000000 + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.504799, y: 0.520943, z: 0.545144, w: 1.000000} + Port_Value2_N018: + typeIdx: 1 + value: 0.500000 + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.212497, y: 0.220005, z: 0.250004, w: 1.000000} + Port_Value3_N018: + typeIdx: 1 + value: 1.000000 + Port_Value4_N018: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 08e7c6e6-8dbe-40fa-bf02-ebd5c9660ca1 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 9d3b32be-cf41-459c-9f37-9b34c96b2f5b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat.meta new file mode 100644 index 00000000..72b92084 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 5.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! bfb514bb-32ed-4bf6-8838-1d4b52a8878e + ImporterName: MaterialImporter + PrimaryAsset: ! bfb514bb-32ed-4bf6-8838-1d4b52a8878e + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat new file mode 100644 index 00000000..f21581aa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! ac5c8eaf-083d-4ddf-b1b2-6f69626190ba +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N062: + typeIdx: 1 + value: 0.500000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Position1_N014: + typeIdx: 1 + value: 0.210000 + Port_Position2_N014: + typeIdx: 1 + value: 0.450000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N014: + typeIdx: 5 + value: {x: 0.282689, y: 0.180087, z: 0.111696, w: 1.000000} + Port_Value1_N014: + typeIdx: 5 + value: {x: 0.614878, y: 0.498238, z: 0.148318, w: 1.000000} + Port_Value2_N014: + typeIdx: 5 + value: {x: 0.943191, y: 0.798566, z: 0.075456, w: 1.000000} + Port_Value3_N014: + typeIdx: 5 + value: {x: 0.976471, y: 0.825116, z: 0.371054, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 08e7c6e6-8dbe-40fa-bf02-ebd5c9660ca1 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! ef904425-39fe-4376-9657-20bb7aa3bab8 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat.meta new file mode 100644 index 00000000..b0fad0a8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 6.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 6b4d1ad8-50d3-4889-9613-534d1419b60b + ImporterName: MaterialImporter + PrimaryAsset: ! 6b4d1ad8-50d3-4889-9613-534d1419b60b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat new file mode 100644 index 00000000..30eab822 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat @@ -0,0 +1,158 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! cf14f2df-60a6-4f4e-a29c-b12b63cd16ad +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Position1_N007: + typeIdx: 1 + value: 0.240000 + Port_Position1_N018: + typeIdx: 1 + value: 0.000000 + Port_Position2_N007: + typeIdx: 1 + value: 0.700000 + Port_Position2_N018: + typeIdx: 1 + value: 0.270000 + Port_Position3_N018: + typeIdx: 1 + value: 0.340000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value0_N018: + typeIdx: 1 + value: 1.000000 + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value1_N018: + typeIdx: 1 + value: 0.000000 + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.504799, y: 0.520943, z: 0.545144, w: 1.000000} + Port_Value2_N018: + typeIdx: 1 + value: 0.500000 + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.212497, y: 0.220005, z: 0.250004, w: 1.000000} + Port_Value3_N018: + typeIdx: 1 + value: 1.000000 + Port_Value4_N018: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 26d9d10e-0b53-4ffc-b516-b290c54fcd35 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 7d80fe73-0251-489d-87a7-57e3796e1fef + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat.meta new file mode 100644 index 00000000..4bb2bc7f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 7.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + ImporterName: MaterialImporter + PrimaryAsset: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat new file mode 100644 index 00000000..8fbfeb1e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat @@ -0,0 +1,170 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 3b6ae869-71a8-4a19-b2dd-fff72409255f +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Exponent_N023: + typeIdx: 1 + value: 1.000000 + Port_Import_N027: + typeIdx: 1 + value: 0.700000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.600000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N034: + typeIdx: 5 + value: {x: 1.000000, y: 0.890196, z: 0.349020, w: 1.000000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N023: + typeIdx: 1 + value: 1.000000 + Port_Normal_N023: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N067: + typeIdx: 1 + value: 0.180000 + Port_Position2_N067: + typeIdx: 1 + value: 0.340000 + Port_Position3_N067: + typeIdx: 1 + value: 0.580000 + Port_Value0_N067: + typeIdx: 5 + value: {x: 1.000000, y: 0.866148, z: 0.196918, w: 1.000000} + Port_Value1_N067: + typeIdx: 5 + value: {x: 0.200000, y: 0.133333, z: 0.039994, w: 1.000000} + Port_Value2_N067: + typeIdx: 5 + value: {x: 0.533684, y: 0.444739, z: 0.177905, w: 1.000000} + Port_Value3_N067: + typeIdx: 5 + value: {x: 0.976471, y: 0.893019, z: 0.475761, w: 1.000000} + Port_Value4_N067: + typeIdx: 5 + value: {x: 1.000000, y: 0.916335, z: 0.498039, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 602967c5-1750-4ffe-ad13-97e48a247107 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat.meta new file mode 100644 index 00000000..91afb8d5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 8.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 43cbc95f-b089-4e59-a639-ca3950ebd1b5 + ImporterName: MaterialImporter + PrimaryAsset: ! 43cbc95f-b089-4e59-a639-ca3950ebd1b5 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat new file mode 100644 index 00000000..598062ca --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat @@ -0,0 +1,158 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! 21d92435-af15-4756-bf64-ea17d13c0e83 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N003: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Position1_N007: + typeIdx: 1 + value: 0.240000 + Port_Position1_N018: + typeIdx: 1 + value: 0.000000 + Port_Position2_N007: + typeIdx: 1 + value: 0.700000 + Port_Position2_N018: + typeIdx: 1 + value: 0.270000 + Port_Position3_N018: + typeIdx: 1 + value: 0.340000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value0_N018: + typeIdx: 1 + value: 1.000000 + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value1_N018: + typeIdx: 1 + value: 0.000000 + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.504799, y: 0.520943, z: 0.545144, w: 1.000000} + Port_Value2_N018: + typeIdx: 1 + value: 0.500000 + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.212497, y: 0.220005, z: 0.250004, w: 1.000000} + Port_Value3_N018: + typeIdx: 1 + value: 1.000000 + Port_Value4_N018: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 08e7c6e6-8dbe-40fa-bf02-ebd5c9660ca1 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 7d80fe73-0251-489d-87a7-57e3796e1fef + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat.meta new file mode 100644 index 00000000..e5c85fd9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close 9.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 51d47a79-fa9a-457f-a979-7b3c7756d6be + ImporterName: MaterialImporter + PrimaryAsset: ! 51d47a79-fa9a-457f-a979-7b3c7756d6be + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat new file mode 100644 index 00000000..5f0d4ffc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat @@ -0,0 +1,165 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_close + PassesInfo: + - ! d24a27f5-8901-4fa6-9bca-34dc4169da4d +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Exponent_N031: + typeIdx: 1 + value: 1.000000 + Port_Import_N006: + typeIdx: 1 + value: 0.500000 + Port_Import_N049: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N062: + typeIdx: 1 + value: 0.400000 + Port_Import_N068: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N009: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input1_N024: + typeIdx: 5 + value: {x: 1.000000, y: 0.873198, z: 0.239216, w: 1.000000} + Port_Input1_N053: + typeIdx: 1 + value: 0.500000 + Port_Input1_N073: + typeIdx: 1 + value: 0.500000 + Port_Input2_N005: + typeIdx: 1 + value: 0.800000 + Port_Input2_N007: + typeIdx: 1 + value: 0.000000 + Port_Input2_N009: + typeIdx: 3 + value: {x: -0.500000, y: -0.500000} + Port_Input2_N053: + typeIdx: 1 + value: 0.500000 + Port_Input2_N073: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N031: + typeIdx: 1 + value: 1.000000 + Port_Normal_N031: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N003: + typeIdx: 1 + value: 0.000000 + Port_Position2_N003: + typeIdx: 1 + value: 0.370000 + Port_Position3_N003: + typeIdx: 1 + value: 0.750000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 1.900000, y: 1.900000} + Port_Value0_N003: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N003: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value2_N003: + typeIdx: 5 + value: {x: 0.597208, y: 0.562066, z: 0.544503, w: 1.000000} + Port_Value3_N003: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value4_N003: + typeIdx: 5 + value: {x: 0.192782, y: 0.192782, z: 0.192782, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: bf1666aa-7785-445d-9ba4-3e41d6472446 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + icon: + typeIdx: 9 + value: + id: 5112d79b-d07a-4bb1-baaa-686e1b308311 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToBorderColor + wrapModeV: ClampToBorderColor + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconEnabled: + typeIdx: 2 + value: false + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! e8b3d4cf-9228-44fd-aca7-acf238987d10 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat.meta new file mode 100644 index 00000000..dc431802 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_close.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! 0851cb07-d250-4d5e-8ad0-5bdab8807cd7 + ImporterName: MaterialImporter + PrimaryAsset: ! 0851cb07-d250-4d5e-8ad0-5bdab8807cd7 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat new file mode 100644 index 00000000..baf54dae --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat @@ -0,0 +1,83 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_glow + PassesInfo: + - ! ee3dfe20-9f27-4c32-a51d-290bd9801ea6 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Screen + Properties: + Port_Input1_N003: + typeIdx: 1 + value: 0.005000 + Port_Offset_N009: + typeIdx: 3 + value: {x: 0.020000, y: 0.000000} + Port_Position1_N007: + typeIdx: 1 + value: 0.000000 + Port_Position2_N007: + typeIdx: 1 + value: 0.760000 + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value2_N007: + typeIdx: 5 + value: {x: 1.000000, y: 0.854902, z: 0.270588, w: 1.000000} + Port_Value3_N007: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + glow_map: + typeIdx: 9 + value: + id: 482f2ef4-e496-4cf0-933d-dd9d94b3c901 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + glow_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + glow_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + glow_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + glow_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 29ced12e-5dc6-4e30-85c0-2155e5b3cf0f + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat.meta new file mode 100644 index 00000000..123bfb61 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 1.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 26502ad9-ffd5-43fb-bafd-0fab0bdc8296 + ImporterName: MaterialImporter + PrimaryAsset: ! 26502ad9-ffd5-43fb-bafd-0fab0bdc8296 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat new file mode 100644 index 00000000..41cd218a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat @@ -0,0 +1,35 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_glow + PassesInfo: + - ! aeec99ed-8e53-4426-880a-201e93a96e0a +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Screen + Properties: + Port_Input1_N003: + typeIdx: 1 + value: 0.005000 + Port_Value_N010: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + Pass: ! de214192-97c6-4beb-9f85-a0690bf913c3 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat.meta new file mode 100644 index 00000000..340780b7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow 2.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + ImporterName: MaterialImporter + PrimaryAsset: ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat new file mode 100644 index 00000000..908f84f1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat @@ -0,0 +1,83 @@ +- ! + PackagePath: 3D resources/Materials/SystemSettings/SysSet_round_button_glow + PassesInfo: + - ! 0b062e0e-2f58-4ec0-aef5-5e408fffe1bb +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Screen + Properties: + Port_Input1_N003: + typeIdx: 1 + value: 0.005000 + Port_Offset_N009: + typeIdx: 3 + value: {x: 0.020000, y: 0.000000} + Port_Position1_N005: + typeIdx: 1 + value: 0.000000 + Port_Position2_N005: + typeIdx: 1 + value: 0.760000 + Port_Value0_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Value1_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value2_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.960784, z: 0.537255, w: 1.000000} + Port_Value3_N005: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + glow_map: + typeIdx: 9 + value: + id: 482f2ef4-e496-4cf0-933d-dd9d94b3c901 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + glow_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + glow_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + glow_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + glow_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! d466d02c-9a9b-4da4-b16f-df10edd8689b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat.meta new file mode 100644 index 00000000..4e572610 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/3D resources/Materials/SystemSettings/SysSet_round_button_glow.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 1bc3a484-fa8d-4dfa-a3e3-94a725e80c3a + ImporterName: MaterialImporter + PrimaryAsset: ! 1bc3a484-fa8d-4dfa-a3e3-94a725e80c3a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat new file mode 100644 index 00000000..af757fb6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat @@ -0,0 +1,113 @@ +- ! + PackagePath: "" + PassesInfo: + - ! ae490bed-bf3b-4b1a-af85-8db034caca44 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Exponent_N031: + typeIdx: 1 + value: 0.600000 + Port_Import_N027: + typeIdx: 1 + value: 0.400000 + Port_Import_N089: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N002: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input1_N010: + typeIdx: 3 + value: {x: 0.800000, y: 1.000000} + Port_Input1_N035: + typeIdx: 5 + value: {x: 1.000000, y: 0.890852, z: 0.345098, w: 1.000000} + Port_Input1_N037: + typeIdx: 1 + value: 0.500000 + Port_Input2_N010: + typeIdx: 3 + value: {x: -0.350000, y: -0.500000} + Port_Input2_N037: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N031: + typeIdx: 1 + value: 1.000000 + Port_Normal_N031: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N007: + typeIdx: 1 + value: 0.450000 + Port_Position2_N007: + typeIdx: 1 + value: 0.450000 + Port_Position3_N007: + typeIdx: 1 + value: 0.000000 + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.749996, y: 0.749996, z: 0.749996, w: 1.000000} + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.200000, y: 0.200000, z: 0.200000, w: 1.000000} + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.450004, y: 0.432456, z: 0.420737, w: 1.000000} + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.500008, y: 0.482765, z: 0.451728, w: 1.000000} + Port_Value4_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + simple_round_button: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + simple_round_buttonBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + simple_round_buttonUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! f7c880b8-6124-4361-a6a7-5c1e2dfbd1e8 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat.meta new file mode 100644 index 00000000..452c7fa3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonHover.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + ImporterName: MaterialImporter + PrimaryAsset: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat new file mode 100644 index 00000000..3ebc4a31 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat @@ -0,0 +1,101 @@ +- ! + PackagePath: "" + PassesInfo: + - ! d14f88d4-7c1a-4a31-bf35-2be294751e1a +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Exponent_N031: + typeIdx: 1 + value: 0.600000 + Port_Import_N027: + typeIdx: 1 + value: 0.400000 + Port_Import_N089: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N002: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input1_N010: + typeIdx: 3 + value: {x: 0.800000, y: 1.000000} + Port_Input1_N034: + typeIdx: 5 + value: {x: 1.000000, y: 0.890852, z: 0.345098, w: 1.000000} + Port_Input1_N037: + typeIdx: 1 + value: 0.500000 + Port_Input2_N010: + typeIdx: 3 + value: {x: -0.350000, y: -0.500000} + Port_Input2_N037: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N031: + typeIdx: 1 + value: 1.000000 + Port_Normal_N031: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N030: + typeIdx: 1 + value: 0.000000 + Port_Value0_N030: + typeIdx: 5 + value: {x: 1.000000, y: 0.879988, z: 0.400000, w: 1.000000} + Port_Value1_N030: + typeIdx: 5 + value: {x: 0.500008, y: 0.437507, z: 0.250004, w: 1.000000} + Port_Value2_N030: + typeIdx: 5 + value: {x: 0.500008, y: 0.450004, z: 0.200000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + simple_round_button: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + simple_round_buttonBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + simple_round_buttonUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 522617ab-a079-411e-86a0-59735e63628f + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat.meta new file mode 100644 index 00000000..c7ccc1d7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButtonPinched.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + ImporterName: MaterialImporter + PrimaryAsset: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat new file mode 100644 index 00000000..b2d5279b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat @@ -0,0 +1,101 @@ +- ! + PackagePath: "" + PassesInfo: + - ! a879a856-bed7-4427-9835-5d1dc5273097 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Import_N027: + typeIdx: 1 + value: 0.400000 + Port_Import_N089: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N002: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input1_N010: + typeIdx: 3 + value: {x: 0.800000, y: 1.000000} + Port_Input1_N037: + typeIdx: 1 + value: 0.500000 + Port_Input2_N010: + typeIdx: 3 + value: {x: -0.350000, y: -0.500000} + Port_Input2_N037: + typeIdx: 1 + value: 0.500000 + Port_Position1_N007: + typeIdx: 1 + value: 0.450000 + Port_Position2_N007: + typeIdx: 1 + value: 0.450000 + Port_Position3_N007: + typeIdx: 1 + value: 0.000000 + Port_Value0_N007: + typeIdx: 5 + value: {x: 0.749996, y: 0.749996, z: 0.749996, w: 1.000000} + Port_Value1_N007: + typeIdx: 5 + value: {x: 0.200000, y: 0.200000, z: 0.200000, w: 1.000000} + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.450004, y: 0.432456, z: 0.420737, w: 1.000000} + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.500008, y: 0.482765, z: 0.451728, w: 1.000000} + Port_Value4_N007: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + simple_round_button: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + simple_round_buttonBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + simple_round_buttonTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + simple_round_buttonUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! a025bbf8-b6d5-486a-b898-297484fc420a + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat.meta new file mode 100644 index 00000000..c2260dfe --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/RoundButton_Idle.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + ImporterName: MaterialImporter + PrimaryAsset: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat new file mode 100644 index 00000000..c66ed28b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat @@ -0,0 +1,222 @@ +- ! + PackagePath: SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll + PassesInfo: + - ! ab8c7bad-17d8-4bcd-8e89-02df3daabcb3 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Exponent_N064: + typeIdx: 1 + value: 2.000000 + Port_Import_N027: + typeIdx: 1 + value: 0.900000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.100000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N008: + typeIdx: 3 + value: {x: 2.000000, y: 1.000000} + Port_Input1_N028: + typeIdx: 3 + value: {x: 0.500000, y: 0.600000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N065: + typeIdx: 5 + value: {x: 0.552941, y: 0.552941, z: 0.552941, w: 1.000000} + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N008: + typeIdx: 3 + value: {x: -0.550000, y: 0.000000} + Port_Input2_N028: + typeIdx: 3 + value: {x: -0.250000, y: -0.540000} + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N064: + typeIdx: 1 + value: 0.450000 + Port_Normal_N064: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N005: + typeIdx: 1 + value: 0.710000 + Port_Position1_N016: + typeIdx: 1 + value: 0.080000 + Port_Position1_N031: + typeIdx: 1 + value: 0.180000 + Port_Position2_N005: + typeIdx: 1 + value: 1.000000 + Port_Position2_N016: + typeIdx: 1 + value: 0.230000 + Port_Position2_N031: + typeIdx: 1 + value: 0.430000 + Port_Position3_N016: + typeIdx: 1 + value: 0.560000 + Port_Position3_N031: + typeIdx: 1 + value: 0.720000 + Port_Value0_N005: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value0_N016: + typeIdx: 1 + value: 0.500000 + Port_Value0_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N005: + typeIdx: 5 + value: {x: 0.517647, y: 0.517647, z: 0.517647, w: 1.000000} + Port_Value1_N016: + typeIdx: 1 + value: 0.600000 + Port_Value1_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value2_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value2_N016: + typeIdx: 1 + value: 0.800000 + Port_Value2_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value3_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value3_N016: + typeIdx: 1 + value: 0.900000 + Port_Value3_N031: + typeIdx: 5 + value: {x: 0.658824, y: 0.658824, z: 0.658824, w: 1.000000} + Port_Value4_N016: + typeIdx: 1 + value: 0.000000 + Port_Value4_N031: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 22dbfba0-6fbd-4400-a9ed-3bbf920cbf9f + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat.meta new file mode 100644 index 00000000..db7a8bee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 1.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + ImporterName: MaterialImporter + PrimaryAsset: ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat new file mode 100644 index 00000000..015e192a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat @@ -0,0 +1,294 @@ +- ! + PackagePath: SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll + PassesInfo: + - ! 94b3f6c8-3d5a-460a-816a-ebcf221f0ebb +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N078: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N090: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_CoordsIn_N090: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Exponent_N064: + typeIdx: 1 + value: 2.000000 + Port_Exponent_N091: + typeIdx: 1 + value: 1.000000 + Port_Import_N027: + typeIdx: 1 + value: 0.900000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N074: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Import_N075: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Import_N079: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N081: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.100000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input0_N087: + typeIdx: 1 + value: 0.000000 + Port_Input0_N092: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Input1_N008: + typeIdx: 3 + value: {x: 2.000000, y: 1.000000} + Port_Input1_N028: + typeIdx: 3 + value: {x: 0.500000, y: 0.600000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N065: + typeIdx: 5 + value: {x: 0.552941, y: 0.552941, z: 0.552941, w: 1.000000} + Port_Input1_N067: + typeIdx: 3 + value: {x: 0.000000, y: 0.250000} + Port_Input1_N086: + typeIdx: 1 + value: 0.000000 + Port_Input1_N087: + typeIdx: 1 + value: 1.000000 + Port_Input1_N092: + typeIdx: 5 + value: {x: 1.000000, y: 0.866667, z: 0.000000, w: 1.000000} + Port_Input1_N093: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N008: + typeIdx: 3 + value: {x: -0.550000, y: 0.000000} + Port_Input2_N028: + typeIdx: 3 + value: {x: -0.250000, y: -0.540000} + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N067: + typeIdx: 3 + value: {x: 0.000000, y: -0.400000} + Port_Input2_N086: + typeIdx: 1 + value: 1.000000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N064: + typeIdx: 1 + value: 0.450000 + Port_Intensity_N091: + typeIdx: 1 + value: 0.450000 + Port_Normal_N064: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Normal_N091: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.900000} + Port_Position1_N005: + typeIdx: 1 + value: 0.710000 + Port_Position1_N016: + typeIdx: 1 + value: 0.080000 + Port_Position1_N069: + typeIdx: 1 + value: 0.000000 + Port_Position2_N005: + typeIdx: 1 + value: 1.000000 + Port_Position2_N016: + typeIdx: 1 + value: 0.230000 + Port_Position2_N069: + typeIdx: 1 + value: 0.310000 + Port_Position3_N016: + typeIdx: 1 + value: 0.560000 + Port_Position3_N069: + typeIdx: 1 + value: 0.660000 + Port_RangeMaxA_N076: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N076: + typeIdx: 1 + value: 1.000000 + Port_RangeMinA_N076: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N076: + typeIdx: 1 + value: -1.000000 + Port_Rotation_N090: + typeIdx: 1 + value: 90.000000 + Port_Value0_N005: + typeIdx: 5 + value: {x: 0.050004, y: 0.050004, z: 0.050004, w: 1.000000} + Port_Value0_N016: + typeIdx: 1 + value: 0.500000 + Port_Value0_N069: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N005: + typeIdx: 5 + value: {x: 0.517647, y: 0.517647, z: 0.517647, w: 1.000000} + Port_Value1_N016: + typeIdx: 1 + value: 0.600000 + Port_Value1_N069: + typeIdx: 5 + value: {x: 0.094118, y: 0.094118, z: 0.094118, w: 1.000000} + Port_Value2_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value2_N016: + typeIdx: 1 + value: 0.800000 + Port_Value2_N069: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value3_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value3_N016: + typeIdx: 1 + value: 0.900000 + Port_Value3_N069: + typeIdx: 5 + value: {x: 1.000000, y: 0.835294, z: 0.000000, w: 1.000000} + Port_Value4_N016: + typeIdx: 1 + value: 0.000000 + Port_Value4_N069: + typeIdx: 5 + value: {x: 1.000000, y: 0.835294, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! fb70ffa2-0778-4a0a-8a24-08e0b06a1411 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat.meta new file mode 100644 index 00000000..5ca4c150 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll 2.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 386f728b-6a31-4633-b176-f92cd5bc60ce + ImporterName: MaterialImporter + PrimaryAsset: ! 386f728b-6a31-4633-b176-f92cd5bc60ce + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat new file mode 100644 index 00000000..ec8f6393 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat @@ -0,0 +1,174 @@ +- ! + PackagePath: SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll + PassesInfo: + - ! 4ab82e95-b958-40dd-bf6d-dc1d3e6f631c +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Exponent_N001: + typeIdx: 1 + value: 1.000000 + Port_Import_N027: + typeIdx: 1 + value: 0.900000 + Port_Import_N041: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N101: + typeIdx: 1 + value: 0.100000 + Port_Import_N111: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Input1_N000: + typeIdx: 5 + value: {x: 1.000000, y: 0.890196, z: 0.349020, w: 1.000000} + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N115: + typeIdx: 1 + value: 0.500000 + Port_Input2_N045: + typeIdx: 1 + value: 0.500000 + Port_Input2_N115: + typeIdx: 1 + value: 0.500000 + Port_Intensity_N001: + typeIdx: 1 + value: 1.000000 + Port_Normal_N001: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N030: + typeIdx: 1 + value: 0.300000 + Port_Position2_N030: + typeIdx: 1 + value: 0.500000 + Port_Position3_N030: + typeIdx: 1 + value: 0.600000 + Port_Position4_N030: + typeIdx: 1 + value: 0.700000 + Port_Value0_N030: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N030: + typeIdx: 5 + value: {x: 0.290196, y: 0.240192, z: 0.113725, w: 1.000000} + Port_Value2_N030: + typeIdx: 5 + value: {x: 0.658824, y: 0.549020, z: 0.219608, w: 1.000000} + Port_Value3_N030: + typeIdx: 5 + value: {x: 0.976471, y: 0.804898, z: 0.290196, w: 1.000000} + Port_Value4_N030: + typeIdx: 5 + value: {x: 1.000000, y: 0.874510, z: 0.498039, w: 1.000000} + Port_Value5_N030: + typeIdx: 5 + value: {x: 0.495079, y: 0.454398, z: 0.093355, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + capsule_btn_refl_tex_1: + typeIdx: 9 + value: + id: aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2: + typeIdx: 9 + value: + id: 825f641e-3daf-441b-9f64-03923bc7bb4b + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_2BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_2Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_2UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3: + typeIdx: 9 + value: + id: 816f16c5-007d-4d7f-937c-192b15901cdc + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + capsule_btn_refl_tex_3BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + capsule_btn_refl_tex_3Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + capsule_btn_refl_tex_3UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! e6422c40-50fe-4742-abc2-7b0b120b3af8 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat.meta new file mode 100644 index 00000000..20f2cb71 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 92c09c9d-bf66-4313-9fbd-9c191887a5d4 + ImporterName: MaterialImporter + PrimaryAsset: ! 92c09c9d-bf66-4313-9fbd-9c191887a5d4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat new file mode 100644 index 00000000..c94b4fbd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat @@ -0,0 +1,129 @@ +- ! + PackagePath: SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg + PassesInfo: + - ! 60e5d6c8-559c-44f3-810f-9c36037feabe +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N039: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input1_N049: + typeIdx: 1 + value: 0.120000 + Port_Position1_N040: + typeIdx: 1 + value: 0.300000 + Port_Position2_N040: + typeIdx: 1 + value: 0.400000 + Port_Position3_N040: + typeIdx: 1 + value: 0.500000 + Port_Position4_N040: + typeIdx: 1 + value: 0.600000 + Port_Position5_N040: + typeIdx: 1 + value: 0.700000 + Port_RangeMaxA_N035: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N046: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N048: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N050: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N046: + typeIdx: 1 + value: 0.250000 + Port_RangeMaxB_N048: + typeIdx: 1 + value: 3.500000 + Port_RangeMaxB_N050: + typeIdx: 1 + value: -2.500000 + Port_RangeMinA_N035: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N046: + typeIdx: 1 + value: -1.000000 + Port_RangeMinA_N048: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N050: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N046: + typeIdx: 1 + value: 2.000000 + Port_RangeMinB_N048: + typeIdx: 1 + value: 2.000000 + Port_RangeMinB_N050: + typeIdx: 1 + value: -1.000000 + Port_Value0_N040: + typeIdx: 5 + value: {x: 0.149020, y: 0.149020, z: 0.149020, w: 1.000000} + Port_Value1_N040: + typeIdx: 5 + value: {x: 0.149020, y: 0.149020, z: 0.149020, w: 1.000000} + Port_Value2_N040: + typeIdx: 5 + value: {x: 0.298039, y: 0.274510, z: 0.121569, w: 1.000000} + Port_Value3_N040: + typeIdx: 5 + value: {x: 0.588235, y: 0.517647, z: 0.054902, w: 1.000000} + Port_Value4_N040: + typeIdx: 5 + value: {x: 0.298039, y: 0.274510, z: 0.121569, w: 1.000000} + Port_Value5_N040: + typeIdx: 5 + value: {x: 0.149020, y: 0.149020, z: 0.149020, w: 1.000000} + Port_Value6_N040: + typeIdx: 5 + value: {x: 0.149020, y: 0.149020, z: 0.149020, w: 1.000000} + Port_Value_N005: + typeIdx: 5 + value: {x: 0.149020, y: 0.149020, z: 0.149020, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + offset: + typeIdx: 1 + value: 0.320000 + scale: + typeIdx: 1 + value: 1.000000 + size: + typeIdx: 1 + value: 1.000000 + status: + typeIdx: 1 + value: 0.000000 + Pass: ! e0b42284-7c64-43ce-a8ce-4dbea7265103 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat.meta new file mode 100644 index 00000000..b2f4167c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/SWIS/SWIS/3D resources/Materials/LensExplorer/LensExp_scroll_bg.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 400016ba-897b-4f06-8668-db883d28f9a9 + ImporterName: MaterialImporter + PrimaryAsset: ! 400016ba-897b-4f06-8668-db883d28f9a9 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat new file mode 100644 index 00000000..02fe2b47 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat @@ -0,0 +1,66 @@ +- ! + PackagePath: "" + PassesInfo: + - ! d653547b-622e-4efd-b3cf-304275b69ce0 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Input0_N005: + typeIdx: 1 + value: 0.005000 + Port_Offset_N009: + typeIdx: 3 + value: {x: 0.020000, y: 0.000000} + Port_Position1_N010: + typeIdx: 1 + value: 0.700000 + Port_Position1_N011: + typeIdx: 1 + value: 0.000000 + Port_Position2_N011: + typeIdx: 1 + value: 0.620000 + Port_Value0_N011: + typeIdx: 5 + value: {x: 0.700008, y: 0.700008, z: 0.700008, w: 1.000000} + Port_Value1_N011: + typeIdx: 5 + value: {x: 0.549996, y: 0.549996, z: 0.549996, w: 1.000000} + Port_Value2_N011: + typeIdx: 5 + value: {x: 1.000000, y: 0.900008, z: 0.500008, w: 1.000000} + Port_Value3_N011: + typeIdx: 5 + value: {x: 0.770001, y: 0.596750, z: 0.076997, w: 1.000000} + Port_Value_N013: + typeIdx: 5 + value: {x: 0.549996, y: 0.549996, z: 0.549996, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + level: + typeIdx: 1 + value: 1.000000 + pinch: + typeIdx: 1 + value: 0.000000 + Pass: ! 1fc0b4e0-d98d-4292-b562-e490cf8dd56c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat.meta new file mode 100644 index 00000000..6fbe6a15 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/PlatformUI/Slider_Platform.mat.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + Material: ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + ImporterName: MaterialImporter + PrimaryAsset: ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat new file mode 100644 index 00000000..1c7e3463 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat @@ -0,0 +1,36 @@ +- ! + PackagePath: "" + PassesInfo: + - ! a5f5cc0f-57f6-45c5-b56a-c8f145c886d8 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Input2_N008: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + lineColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + lineWeight: + typeIdx: 1 + value: 0.000000 + Pass: ! 1daef860-620d-4476-b637-b1d381b1f510 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat.meta new file mode 100644 index 00000000..664e4892 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScaleBasedTargetOutline.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + ImporterName: MaterialImporter + PrimaryAsset: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat new file mode 100644 index 00000000..40de0aad --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat @@ -0,0 +1,74 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b9b5928b-8832-48ea-9df4-2ed07ab68866 +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Position1_N078: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 78 + Tweak_N81: + typeIdx: 5 + value: {x: 0.078431, y: 0.078431, z: 0.078431, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 00f14031-5da3-41ae-9b33-273f1600bbfc + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat.meta new file mode 100644 index 00000000..3cd842a3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarButton.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 0607447c-e8df-4721-9c51-777e973d74eb + ImporterName: MaterialImporter + PrimaryAsset: ! 0607447c-e8df-4721-9c51-777e973d74eb + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat new file mode 100644 index 00000000..581c7166 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat @@ -0,0 +1,57 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 634cf1b7-b5e7-4202-88c8-58228ec2e8a4 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + PreviewEnabled: + typeIdx: 0 + value: 0 + Tweak_N1: + typeIdx: 9 + value: + id: 76b2ec40-1edc-487a-af2c-371af82118ae + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N1BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N1Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N1Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N1UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N5: + typeIdx: 5 + value: {x: 0.749996, y: 0.749996, z: 0.749996, w: 1.000000} + Pass: ! 5883c506-6f6a-48d3-9b83-12200015dc65 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat.meta new file mode 100644 index 00000000..92ae1499 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/ScrollBarSlider.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 182db9f2-4d62-49ff-8cfe-55c29488a2e8 + ImporterName: MaterialImporter + PrimaryAsset: ! 182db9f2-4d62-49ff-8cfe-55c29488a2e8 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat new file mode 100644 index 00000000..cca54a6b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat @@ -0,0 +1,72 @@ +- ! + PackagePath: "" + PassesInfo: + - ! f0daf2c8-0a1f-4dec-9bc0-4f93074eb407 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + metallic: + typeIdx: 1 + value: 0.000000 + roughness: + typeIdx: 1 + value: 0.000000 + Pass: ! 5ecbacc7-af69-4b4c-99e8-8a06fd7376e4 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat.meta new file mode 100644 index 00000000..184e72a2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SimplePBRMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + ImporterName: MaterialImporter + PrimaryAsset: ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat new file mode 100644 index 00000000..2e6451bf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b53b7b0f-1d04-4204-9461-7760c2ad59d8 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + SecondGradient: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 0.066667, y: 0.097627, z: 0.097383, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 0.000000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 18eae901-de97-4937-8f54-2dd833b60d64 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat.meta new file mode 100644 index 00000000..a1c029eb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonDarkDefault.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 8325b443-2277-45c6-a0ab-49cddc938168 + ImporterName: MaterialImporter + PrimaryAsset: ! 8325b443-2277-45c6-a0ab-49cddc938168 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat new file mode 100644 index 00000000..7668de6b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat @@ -0,0 +1,131 @@ +- ! + PackagePath: "" + PassesInfo: + - ! d93b5402-be8c-451d-8bba-d457feab0fba +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + SecondGradient: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseColor: + typeIdx: 5 + value: {x: 0.066468, y: 0.097627, z: 0.097383, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + colorMultiplier: + typeIdx: 1 + value: 0.550000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 18eae901-de97-4937-8f54-2dd833b60d64 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat.meta new file mode 100644 index 00000000..6c7ca982 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/PinchButtonOnSelect.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 9680b686-ffbd-41d7-95f8-8d0e1e9abf0f + ImporterName: MaterialImporter + PrimaryAsset: ! 9680b686-ffbd-41d7-95f8-8d0e1e9abf0f + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat new file mode 100644 index 00000000..5e81bd39 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat @@ -0,0 +1,143 @@ +- ! + PackagePath: "" + PassesInfo: + - ! f272014e-097e-438f-affe-c81efeecd72d +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 1.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_NORMALMAP + - NODE_13_DROPLIST_ITEM 0 + - NODE_181_DROPLIST_ITEM 0 + - NODE_184_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_38_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Level: + typeIdx: 1 + value: 0.500000 + Port_AO_N036: + typeIdx: 4 + value: {x: 1.000000, y: 0.999969, z: 0.999985} + Port_Default_N113: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Emissive_N036: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input2_N072: + typeIdx: 1 + value: 1.000000 + Port_Strength1_N200: + typeIdx: 1 + value: 1.000000 + Port_Strength2_N200: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 3979da00-6f82-42af-a577-c30df444e15e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + innerColor1: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 1.000000} + innerColor2: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.039216, w: 1.000000} + innerColorMultiplier: + typeIdx: 1 + value: 0.750000 + normalTex: + typeIdx: 9 + value: + id: 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outerColor1: + typeIdx: 5 + value: {x: 0.066468, y: 0.097627, z: 0.097383, w: 1.000000} + outerColor2: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outerColorMultiplier: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 61657298-e494-4718-8624-6c13724fba5a + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat.meta new file mode 100644 index 00000000..6c06fa56 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/SliderMat.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 34182700-aaf0-4e85-b6d4-c7ae22436182 + ImporterName: MaterialImporter + PrimaryAsset: ! 34182700-aaf0-4e85-b6d4-c7ae22436182 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat new file mode 100644 index 00000000..22c2d05b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat @@ -0,0 +1,65 @@ +- ! + PackagePath: "" + PassesInfo: + - ! ccb01889-df1b-42cc-a36b-f05e13be750a +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 2 + Defines: + [] + BlendMode: AlphaTest + Properties: + Port_Input1_N013: + typeIdx: 1 + value: 0.000000 + Port_Input1_N016: + typeIdx: 1 + value: 0.000000 + Port_Input1_N017: + typeIdx: 1 + value: 0.500000 + Port_Input1_N024: + typeIdx: 1 + value: 0.000000 + Port_Value1_N015: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N022: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + alphaTestThreshold: + typeIdx: 1 + value: 0.500000 + lineColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.039216, w: 1.000000} + lineWeight: + typeIdx: 1 + value: 0.250000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ec569494-ce6b-47f9-8d51-46c18573e6b2 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat.meta new file mode 100644 index 00000000..1f0cc183 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SliderMat/TargetOutlineMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! ede8a803-51a1-4781-a7f5-406481a14224 + ImporterName: MaterialImporter + PrimaryAsset: ! ede8a803-51a1-4781-a7f5-406481a14224 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat new file mode 100644 index 00000000..09f42264 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 567f9327-178d-4a36-b758-a0ca7c91cd8b +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 611e2abb-fb0f-4e2f-8c27-57f7a83eef9d + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat.meta new file mode 100644 index 00000000..d61a2383 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/SpritePreset.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 409f5a96-3322-429c-8a4b-43d6f203c994 + ImporterName: MaterialImporter + PrimaryAsset: ! 409f5a96-3322-429c-8a4b-43d6f203c994 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat new file mode 100644 index 00000000..0bb4bdb6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat @@ -0,0 +1,65 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6acc73df-709b-435f-8bdc-71aa63ad5bef +- ! + CachedProperties: + - mainColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 2 + Defines: + [] + BlendMode: AlphaTest + Properties: + Port_Input1_N013: + typeIdx: 1 + value: 0.000000 + Port_Input1_N016: + typeIdx: 1 + value: 0.000000 + Port_Input1_N017: + typeIdx: 1 + value: 0.500000 + Port_Input1_N024: + typeIdx: 1 + value: 0.000000 + Port_Value1_N015: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N022: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + alphaTestThreshold: + typeIdx: 1 + value: 0.500000 + lineColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.039216, w: 1.000000} + lineWeight: + typeIdx: 1 + value: 0.250000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ec569494-ce6b-47f9-8d51-46c18573e6b2 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat.meta new file mode 100644 index 00000000..dc4d0ba0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/TargetOutlineMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + ImporterName: MaterialImporter + PrimaryAsset: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat new file mode 100644 index 00000000..a2c6b933 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat @@ -0,0 +1,178 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 9e696858-3aaa-4c7a-8b16-3175e859a466 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - DROPLIST_BACK_CAP_MODE 2 + - DROPLIST_FRONT_CAP_MODE 2 + - DROPLIST_INNER_EDGE_MODE 1 + - DROPLIST_OUTER_EDGE_MODE 1 + - NODE_11_DROPLIST_ITEM 0 + - NODE_151_DROPLIST_ITEM 0 + - NODE_41_DROPLIST_ITEM 0 + - NODE_9_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + InnerEdgeEndingColor: + typeIdx: 5 + value: {x: 0.990000, y: 0.820000, z: 0.100000, w: 1.000000} + InnerEdgeGradientRamp: + typeIdx: 1 + value: 0.000000 + InnerEdgeStartingColor: + typeIdx: 5 + value: {x: 0.130000, y: 1.000000, z: 0.820000, w: 1.000000} + Port_Center_N025: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N047: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Default_N010: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N046: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N077: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N146: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Import_N017: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Import_N024: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Import_N026: + typeIdx: 3 + value: {x: 0.000000, y: -0.500000} + Port_Import_N058: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Input0_N035: + typeIdx: 1 + value: 0.000000 + Port_Input0_N066: + typeIdx: 1 + value: 0.000000 + Port_Input1_N014: + typeIdx: 1 + value: 0.500000 + Port_Input1_N034: + typeIdx: 1 + value: 0.000000 + Port_Input1_N035: + typeIdx: 1 + value: 1.000000 + Port_Input1_N043: + typeIdx: 1 + value: 0.250000 + Port_Input1_N054: + typeIdx: 1 + value: 0.500000 + Port_Input1_N065: + typeIdx: 1 + value: 0.000000 + Port_Input1_N066: + typeIdx: 1 + value: 1.000000 + Port_Input2_N034: + typeIdx: 1 + value: 1.000000 + Port_Input2_N065: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N023: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N033: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N153: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N155: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N023: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N033: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N153: + typeIdx: 1 + value: -1.010000 + Port_RangeMaxB_N155: + typeIdx: 1 + value: -1.510000 + Port_RangeMinA_N023: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N033: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N153: + typeIdx: 1 + value: -1.000000 + Port_RangeMinA_N155: + typeIdx: 1 + value: -1.000000 + Port_RangeMinB_N023: + typeIdx: 1 + value: -1.000000 + Port_RangeMinB_N033: + typeIdx: 1 + value: -1.000000 + Port_RangeMinB_N153: + typeIdx: 1 + value: -0.010000 + Port_RangeMinB_N155: + typeIdx: 1 + value: -0.510000 + PreviewEnabled: + typeIdx: 0 + value: 0 + backCapStartingColor: + typeIdx: 5 + value: {x: 0.990000, y: 0.820000, z: 0.100000, w: 1.000000} + frontCapStartingColor: + typeIdx: 5 + value: {x: 0.130000, y: 1.000000, z: 0.820000, w: 1.000000} + outerEdgeEndingColor: + typeIdx: 5 + value: {x: 0.990000, y: 0.820000, z: 0.100000, w: 1.000000} + outerEdgeGradientRamp: + typeIdx: 1 + value: 0.000000 + outerEdgeStartingColor: + typeIdx: 5 + value: {x: 0.130000, y: 1.000000, z: 0.820000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 667ea4a8-7c44-4bbb-8441-7a19d9c824f5 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat.meta new file mode 100644 index 00000000..8fbc9302 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Materials/Text3DDefault.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! e6189357-b3eb-4ed5-8a07-593c3328fc24 + ImporterName: MaterialImporter + PrimaryAsset: ! e6189357-b3eb-4ed5-8a07-593c3328fc24 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh new file mode 100644 index 00000000..bd94ee8b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c65bdf9dad5695ddcfd20a86f52c013a03c85e99de6217746dba1ee23fd6fff +size 2352 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh.meta new file mode 100644 index 00000000..6fe179bc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/BoxMesh.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + ImporterName: FileMeshImporter + PrimaryAsset: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh new file mode 100644 index 00000000..151d648c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948b3acc75b2e3d2cc70a462007d9292a5704f456707425e2b80b96f15a63d55 +size 26144 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh.meta new file mode 100644 index 00000000..f314f244 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonCapsuleMesh.mesh.meta @@ -0,0 +1,27 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + ImporterName: FileMeshImporter + PrimaryAsset: ! a6361dc2-6074-45f7-b985-3924776714f4 + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh new file mode 100644 index 00000000..a79a13a1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68f6317782e59dc24091bf648f54844141715fdcdef4afd166b1cffd6309e23a +size 24672 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh.meta new file mode 100644 index 00000000..cc7e836d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ButtonSphereMesh.mesh.meta @@ -0,0 +1,27 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + ImporterName: FileMeshImporter + PrimaryAsset: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh new file mode 100644 index 00000000..2a5ce410 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b24feee8ccaea0ed22077dfc9bb6f66a8f1cdf28df96a1d1702df8c2afa3ebd +size 283248 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh.meta new file mode 100644 index 00000000..eeebcfa1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Check.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + ImporterName: FileMeshImporter + PrimaryAsset: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh new file mode 100644 index 00000000..320732d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a680b7074bc619e1e14a8eed383ee5a8b6fa1ec2cf6d62153dec2c27b80eb39 +size 185103 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh.meta new file mode 100644 index 00000000..fc2823ae --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/LeftHandMesh.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + boneData: Float + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + ImporterName: FileMeshImporter + PrimaryAsset: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh new file mode 100644 index 00000000..861851fc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9385db440b20fced91ff6a93efa38d2fb30d0c7ea60377e4b25e346df83838c +size 1450 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh.meta new file mode 100644 index 00000000..071b57a9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlaneMesh.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImportedAssetIds: + FileMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + ImporterName: FileMeshImporter + PrimaryAsset: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + PackageType: NotAPackage + ImporterSettings: ! + ModifiedVertexFormats: + color: UNorm Byte + normal: Float + position: Float + tangent: Float + texture0: Float + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh new file mode 100644 index 00000000..ddff1d62 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d6f2e918b7878a4a77f1662166ee6b6116917fca3c5dba4d495209819226243 +size 62389 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh.meta new file mode 100644 index 00000000..ed1837d4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformCapsuleButton.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImportedAssetIds: + FileMesh: ! 27665dcf-a50f-4925-b8cd-994e028b53ee + ImporterName: FileMeshImporter + PrimaryAsset: ! 27665dcf-a50f-4925-b8cd-994e028b53ee + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + texture1: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh new file mode 100644 index 00000000..770ff143 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301d0e7dc9f2bfa29856cb67ef5d19df10610bb6c0a54bfd86127bfbb11110a3 +size 52755 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh.meta new file mode 100644 index 00000000..dc11fb34 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/PlatformSphereButton.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImportedAssetIds: + FileMesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + ImporterName: FileMeshImporter + PrimaryAsset: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + texture1: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh new file mode 100644 index 00000000..a2a5b50c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f70db46e6ca196a22100b252f69bca95c3c623c223d44069c7afcab403503c02 +size 23312 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh.meta new file mode 100644 index 00000000..94e0b4d5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButton.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + ImporterName: FileMeshImporter + PrimaryAsset: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh new file mode 100644 index 00000000..ad0b0bcf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3da2d2df231c3daf3ee674443715a6c3d137e09f32193859b03588dc7adc2b87 +size 5843 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh.meta new file mode 100644 index 00000000..e69c4351 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/RoundButtonGlow.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + ImporterName: FileMeshImporter + PrimaryAsset: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh new file mode 100644 index 00000000..ef49bee9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ba7dc6984cc80609119a10b5040eeaf5587916b97bed56a3e66ec12e6bfcf24 +size 27447 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh.meta new file mode 100644 index 00000000..29c6909c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarKnobMesh.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 2a58608b-008d-40f8-9627-d339311f2e1d + ImporterName: FileMeshImporter + PrimaryAsset: ! 2a58608b-008d-40f8-9627-d339311f2e1d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh new file mode 100644 index 00000000..ac1f3c18 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fa7d72a634b2d34b1a963f9ae693d3424bef1e1aaef62a0ef0b147b14b7dbf4 +size 4315 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh.meta new file mode 100644 index 00000000..facdb1d5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/ScrollBarMesh.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! e773364b-808e-4165-96b2-285eb99a10bb + ImporterName: FileMeshImporter + PrimaryAsset: ! e773364b-808e-4165-96b2-285eb99a10bb + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh new file mode 100644 index 00000000..cedd9faa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d153c535853a62d5b380b61edefb17eadd1df683d28e14391b2dfdeb6391022 +size 3168 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh.meta new file mode 100644 index 00000000..908e896a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/PlatformUI/Slider.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! cf044647-787d-4060-835c-e324061093c6 + ImporterName: FileMeshImporter + PrimaryAsset: ! cf044647-787d-4060-835c-e324061093c6 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh new file mode 100644 index 00000000..975fef37 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd7618c6ff9a878f4eaeb717ceac55b6e70e1e3d001497f305ee0b2fa718672 +size 186717 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh.meta new file mode 100644 index 00000000..0bfcc12f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/RightHandMesh.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + boneData: Float + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + ImporterName: FileMeshImporter + PrimaryAsset: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh new file mode 100644 index 00000000..621010be --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c9706cb41978116909d546f051f3f8aeaf6e18b986b14120fe46071b580ea30 +size 1332 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh.meta new file mode 100644 index 00000000..d3ca6555 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/ScrollBarSlider.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImportedAssetIds: + FileMesh: ! 45bdf724-f7f0-4a8b-b6c9-191da2777f09 + ImporterName: FileMeshImporter + PrimaryAsset: ! 45bdf724-f7f0-4a8b-b6c9-191da2777f09 + PackageType: NotAPackage + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh new file mode 100644 index 00000000..7710e7a2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18aa8eaec76f1b6eb2d00b3940cba74b4e1f13ec640f420c08ce1edfbaa438b3 +size 24672 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh.meta new file mode 100644 index 00000000..5ee54536 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderSphereKnob.mesh.meta @@ -0,0 +1,27 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 653f78f0-69a4-44e6-89c0-28f443246019 + ImporterName: FileMeshImporter + PrimaryAsset: ! 653f78f0-69a4-44e6-89c0-28f443246019 + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh new file mode 100644 index 00000000..4d7bf49d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b7d30649ac05f0d9ef69757c2c7fc33cab4a1a1f8cc79671d41679b4783c964 +size 29870 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh.meta new file mode 100644 index 00000000..3adf2b2e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SliderTrack.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + color: UNorm Short + normal: Float + position: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 7161c35c-04db-4586-834a-ad5ea015ddc2 + ImporterName: FileMeshImporter + PrimaryAsset: ! 7161c35c-04db-4586-834a-ad5ea015ddc2 + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh new file mode 100644 index 00000000..7db9be0c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dab94ae26eb33ae12f11aa53f877dbe10fc01260de6fd83fffd3a848c8afa27c +size 335911 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh.meta new file mode 100644 index 00000000..2f22b46a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SnapGhost_Mesh.mesh.meta @@ -0,0 +1,26 @@ +- ! + ImportedAssetIds: + FileMesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + ImporterName: FileMeshImporter + PrimaryAsset: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh new file mode 100644 index 00000000..86f1f76f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a48c69a5c658d4fe453bf530f1aeb025e9333ef888b03684790eac043c584802 +size 33720 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh.meta new file mode 100644 index 00000000..a3874a6e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/SphereMesh.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImportedAssetIds: + FileMesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + ImporterName: FileMeshImporter + PrimaryAsset: ! be44ec86-6509-4953-8e7d-046468e6b199 + PackageType: NotAPackage + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh new file mode 100644 index 00000000..2e3e749f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3655bcada6282bbabe17e3867c5d1550e086e5dab6ba5912795621a511787e13 +size 96264 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh.meta new file mode 100644 index 00000000..42063316 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Meshes/Uncheck.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! cc68878f-b960-4016-868f-3516db30e67c + ImporterName: FileMeshImporter + PrimaryAsset: ! cc68878f-b960-4016-868f-3516db30e67c + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph new file mode 100644 index 00000000..a27650b5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5101d4003eb317055a9a48bbf5b206c0231fc3afca3de4571da6f9b288f7fb21 +size 111132 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph.meta new file mode 100644 index 00000000..86429047 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerHighlight.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! de1aadf5-822b-4f69-87cb-6a9cdd0297f4 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! de1aadf5-822b-4f69-87cb-6a9cdd0297f4 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph new file mode 100644 index 00000000..e228b5da --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d996cb353bcd1b899378c7461bd32be21980155421f532b79acf411c6ee5b53 +size 96172 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph.meta new file mode 100644 index 00000000..36c5e31a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/FingerTipGlow.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 96e91192-4b1d-43d4-9bfa-430910e799cf + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 96e91192-4b1d-43d4-9bfa-430910e799cf + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph new file mode 100644 index 00000000..34bd5fc9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4641f1b794fb2e59a9878089f1c07e343fbcfe89aaef9835ab7aaf67afd43ff +size 34082 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph.meta new file mode 100644 index 00000000..e765898e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/HandOccluder.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! c5214352-c697-42bc-83ed-99cfc5efb1de + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! c5214352-c697-42bc-83ed-99cfc5efb1de + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph new file mode 100644 index 00000000..f63089f1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25b7bd847106ffd0dd5a06a67c9cee255d31b253fff324c25cd8fe93cd4ac1c2 +size 526316 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph.meta new file mode 100644 index 00000000..17054a2c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/BaseHandVisualsShaders/RadialGradientOcclusion.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d078f682-530c-42dd-9988-3f029ffdf6e6 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d078f682-530c-42dd-9988-3f029ffdf6e6 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph new file mode 100644 index 00000000..20240bcd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf58538c816dc977b4bd8f0d048ee1d43b347fe6b3d682b380c7546940b10e46 +size 126086 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph.meta new file mode 100644 index 00000000..05bc0f42 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/NormalBasedTargetOutline.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 982bf177-d80f-4e3a-a455-7746b0fac73a + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 982bf177-d80f-4e3a-a455-7746b0fac73a + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph new file mode 100644 index 00000000..771cf5f8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bb0dfa67267dbd2e33f27aa36e06f23f4426704e9a8c5884d4c41d1e71175bd +size 936467 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph.meta new file mode 100644 index 00000000..3d8c454b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchButton-ActiveOrInActive.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! bc0911b7-5cde-41ff-8801-7fb992bab649 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! bc0911b7-5cde-41ff-8801-7fb992bab649 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph new file mode 100644 index 00000000..28c25e20 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:899ed578b2add620a7dc6f22dc26e065f49cacea1d9431c0a1730e1056ebc073 +size 960425 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph.meta new file mode 100644 index 00000000..ffddf8ba --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PinchDarkRadial.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 00f14031-5da3-41ae-9b33-273f1600bbfc + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 00f14031-5da3-41ae-9b33-273f1600bbfc + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph new file mode 100644 index 00000000..e3bfeb3e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:211bec92515ffa16af7961a726aedb82fede24ad1ad9279259c917874f6b0cbf +size 285737 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph.meta new file mode 100644 index 00000000..b31d177e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonHover.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 9d3b32be-cf41-459c-9f37-9b34c96b2f5b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 9d3b32be-cf41-459c-9f37-9b34c96b2f5b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph new file mode 100644 index 00000000..b0a704d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2c8347214817fe3da94ed216e690f3ac76097b1efbab26276ed113ce5013a9c +size 191083 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph.meta new file mode 100644 index 00000000..e23eb3d0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonIdle.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 7d80fe73-0251-489d-87a7-57e3796e1fef + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 7d80fe73-0251-489d-87a7-57e3796e1fef + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph new file mode 100644 index 00000000..035b8260 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c48e2b5f3d7160ad4b2fdf74e91039e82c1d6cd120de1193e1bed42f5103118e +size 168579 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph.meta new file mode 100644 index 00000000..9e13100d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ButtonPinched.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! ef904425-39fe-4376-9657-20bb7aa3bab8 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ef904425-39fe-4376-9657-20bb7aa3bab8 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph new file mode 100644 index 00000000..710d1016 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7821f9abdc8b4ee6ae2c491c722df5b4dc72d50235f3654e24b2ceb03663165 +size 283763 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph.meta new file mode 100644 index 00000000..97820663 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonHover.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! ee5ae376-9d34-426a-9816-ef6e95887a4b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ee5ae376-9d34-426a-9816-ef6e95887a4b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph new file mode 100644 index 00000000..ce5cb0fa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b397d123cade41ebd0582f2df8468d999e6f4eac1542ed2c6cde6363f2ffa8e1 +size 275368 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph.meta new file mode 100644 index 00000000..eb09f36a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonIdle.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! c6c08f7c-2a01-4ad2-be2f-19b95217f619 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! c6c08f7c-2a01-4ad2-be2f-19b95217f619 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph new file mode 100644 index 00000000..e104951d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6ea33e48d5edd22c0ea40101807a809d8770e8611ceee4dd41de2241d03b76a +size 236584 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph.meta new file mode 100644 index 00000000..2f654f89 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/CapsuleButtonPinched.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 602967c5-1750-4ffe-ad13-97e48a247107 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 602967c5-1750-4ffe-ad13-97e48a247107 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph new file mode 100644 index 00000000..b9d9ca09 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02fdc506930d1d40044300339decae3e4e0746a48fad4284e049357f82d93166 +size 48978 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph.meta new file mode 100644 index 00000000..a9751729 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowHover.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d466d02c-9a9b-4da4-b16f-df10edd8689b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d466d02c-9a9b-4da4-b16f-df10edd8689b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph new file mode 100644 index 00000000..eb128682 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62e25ac31ec67cac5499bd315e738c3bd6ba7037daaa70d4d608ec22f81836c5 +size 29247 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph.meta new file mode 100644 index 00000000..65185fd2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowIdle.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! de214192-97c6-4beb-9f85-a0690bf913c3 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! de214192-97c6-4beb-9f85-a0690bf913c3 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph new file mode 100644 index 00000000..8d3d37b3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c83c6ea6746e4780031e71f29f81ddb720322fed9c7714754e0d5302ccc7740 +size 48978 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph.meta new file mode 100644 index 00000000..644db9b3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonGlowPinched.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 29ced12e-5dc6-4e30-85c0-2155e5b3cf0f + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 29ced12e-5dc6-4e30-85c0-2155e5b3cf0f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph new file mode 100644 index 00000000..6c4470a0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430653cd3fb23f1147703b582b5ab225b5cc441ac724ae503d149b1fa5ea9b89 +size 156164 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph.meta new file mode 100644 index 00000000..6152712d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonHover.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! f7c880b8-6124-4361-a6a7-5c1e2dfbd1e8 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! f7c880b8-6124-4361-a6a7-5c1e2dfbd1e8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph new file mode 100644 index 00000000..1940e382 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54fa6a823672588f9b499875c5db07de5286304595c828ed218706b3e4213a53 +size 154022 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph.meta new file mode 100644 index 00000000..7c4bd618 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButtonPinched.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 522617ab-a079-411e-86a0-59735e63628f + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 522617ab-a079-411e-86a0-59735e63628f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph new file mode 100644 index 00000000..61db75f0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8147cc50fc6c60a360127b3eef5dac0d6daf464bdd8f19d0a987df604f310382 +size 144664 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph.meta new file mode 100644 index 00000000..f33404fa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/RoundButton_Idle.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! a025bbf8-b6d5-486a-b898-297484fc420a + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! a025bbf8-b6d5-486a-b898-297484fc420a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph new file mode 100644 index 00000000..fee7a979 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edddc6972fc0cc487139148c87e95f75e24cabfc8c45332c5252a6301c307ee9 +size 124356 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph.meta new file mode 100644 index 00000000..c3b11414 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollBackground.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! e0b42284-7c64-43ce-a8ce-4dbea7265103 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! e0b42284-7c64-43ce-a8ce-4dbea7265103 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph new file mode 100644 index 00000000..5cb4f3ff --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f785165a690b7be6b2a703c851fbf3ebd34b9451cf6af4e321ef57495c144d0 +size 438622 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph.meta new file mode 100644 index 00000000..c91bd478 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonHover.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! fb70ffa2-0778-4a0a-8a24-08e0b06a1411 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! fb70ffa2-0778-4a0a-8a24-08e0b06a1411 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph new file mode 100644 index 00000000..eeb23cf5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ed0d506f5140ecf30dfe01aefbaddb3da6e09e3bc34e34dbea1b1014d080c6c +size 294417 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph.meta new file mode 100644 index 00000000..9fb37ac1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonIdle.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 22dbfba0-6fbd-4400-a9ed-3bbf920cbf9f + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 22dbfba0-6fbd-4400-a9ed-3bbf920cbf9f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph new file mode 100644 index 00000000..092aeb76 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fa12972c0e6d676f120589819cd469b0c97e8d7e1dc88c7f85c8008d00b7f93 +size 240643 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph.meta new file mode 100644 index 00000000..7a0374ce --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/ScrollButtonPinched.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! e6422c40-50fe-4742-abc2-7b0b120b3af8 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! e6422c40-50fe-4742-abc2-7b0b120b3af8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph new file mode 100644 index 00000000..9d24f08e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e79354f3538c6ee9f97ae42c5b5efab83d73fcdb5460890c40994356cc1282 +size 78631 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph.meta new file mode 100644 index 00000000..c786b9a2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/Slider_Platform.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 1fc0b4e0-d98d-4292-b562-e490cf8dd56c + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 1fc0b4e0-d98d-4292-b562-e490cf8dd56c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph new file mode 100644 index 00000000..d2f46a1e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16022c306f1df7dcc0c59a9745b62b78c48012c792a7c4a2d07a87e015c6d3fc +size 268459 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph.meta new file mode 100644 index 00000000..9be6ac9c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledHover.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! e8b3d4cf-9228-44fd-aca7-acf238987d10 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! e8b3d4cf-9228-44fd-aca7-acf238987d10 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph new file mode 100644 index 00000000..ca4c7aab --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27f47076a5e080db2e70601e33f8f44ae66839b417f1e7f6d93741e6d5811b04 +size 256959 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph.meta new file mode 100644 index 00000000..f1ad913d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/PlatformUI/StateButtonToggledPinched.ss_graph.meta @@ -0,0 +1,17 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d78b8125-853c-40af-9579-f108b34a0fed + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d78b8125-853c-40af-9579-f108b34a0fed + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph new file mode 100644 index 00000000..589c6909 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdfe5fc6ff41239f71a8b6ed4e1b5256441d9e8a2c16b6707874afb437afffb1 +size 44171 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph.meta new file mode 100644 index 00000000..a845bcfe --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScaleBasedTargetOutline.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 1daef860-620d-4476-b637-b1d381b1f510 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 1daef860-620d-4476-b637-b1d381b1f510 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph new file mode 100644 index 00000000..edee36ac --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d1242f9c7bb5eb0e132e01b7c6135c676e163052a9c54e4ce543341f4b62ea7 +size 37823 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph.meta new file mode 100644 index 00000000..d1803daf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ScrollBarSlider.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 5883c506-6f6a-48d3-9b83-12200015dc65 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 5883c506-6f6a-48d3-9b83-12200015dc65 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph new file mode 100644 index 00000000..dae1b5d0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:087f05c738a8e72724d444e9b3da0f8fd5985964590f7f7a71a550ab1e90ac72 +size 958588 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph.meta new file mode 100644 index 00000000..a42daf9d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/PinchButton-Default.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 18eae901-de97-4937-8f54-2dd833b60d64 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 18eae901-de97-4937-8f54-2dd833b60d64 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph new file mode 100644 index 00000000..c344bafa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebd1387f370a679e213e73f2a6bf945f1df9fed5e8b309be586b0c07763e5c04 +size 1004566 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph.meta new file mode 100644 index 00000000..570b9b03 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SliderShaders/Slider.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 61657298-e494-4718-8624-6c13724fba5a + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 61657298-e494-4718-8624-6c13724fba5a + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph new file mode 100644 index 00000000..90b1283f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2822a574174679230e64213eadcc87794821bc75a83c817321b072d4e9e5d3e7 +size 513589 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph.meta new file mode 100644 index 00000000..141085b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/SpritePreset.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! c4329789-0e5d-4149-a72a-f94c1c89157c + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! c4329789-0e5d-4149-a72a-f94c1c89157c + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph new file mode 100644 index 00000000..8ec62a65 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2805df02b851292a637dbb92ed03efe876535a1e2ce165be007bac3fc0c336dc +size 121920 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph.meta new file mode 100644 index 00000000..43567c3b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/TargetOutline.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! ec569494-ce6b-47f9-8d51-46c18573e6b2 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ec569494-ce6b-47f9-8d51-46c18573e6b2 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph new file mode 100644 index 00000000..3dd67cd2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1e1c87111000ffa579c143f266221faa14c779b5b09db90a8f82e7b6a2daeba +size 961934 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph.meta new file mode 100644 index 00000000..c857db15 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/Text3DDefault.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 667ea4a8-7c44-4bbb-8441-7a19d9c824f5 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 667ea4a8-7c44-4bbb-8441-7a19d9c824f5 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph new file mode 100644 index 00000000..206a7990 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78ed8d332ad0ee9bb166239c0ad0431be52404c3b9847e028a6a5c181619118f +size 884031 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph.meta new file mode 100644 index 00000000..069519d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOff.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! dcde51ce-7880-40e6-8cea-1c0190718579 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! dcde51ce-7880-40e6-8cea-1c0190718579 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph new file mode 100644 index 00000000..dae1b5d0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:087f05c738a8e72724d444e9b3da0f8fd5985964590f7f7a71a550ab1e90ac72 +size 958588 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph.meta new file mode 100644 index 00000000..082800d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOn.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 29a74e83-c179-4b20-8abb-b6fff71cb08b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 29a74e83-c179-4b20-8abb-b6fff71cb08b + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph new file mode 100644 index 00000000..44a94e77 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:776814e11593e72134306f349b22f94a753d6013d34602edcb85259d73b23fbf +size 961575 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph.meta new file mode 100644 index 00000000..2102c4a6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/ToggleOnSelect.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! cda905fe-9d9e-4ca3-b7e9-30ae90dd980c + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! cda905fe-9d9e-4ca3-b7e9-30ae90dd980c + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph new file mode 100644 index 00000000..0fa96916 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ad8a48dd47f2422082cab388d4995a3627717468f0edbaff93fb855417c9d6d +size 63254 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph.meta new file mode 100644 index 00000000..5040082a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Shaders/simple_pbr.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 5ecbacc7-af69-4b4c-99e8-8a06fd7376e4 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 5ecbacc7-af69-4b4c-99e8-8a06fd7376e4 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png new file mode 100644 index 00000000..e0d19a73 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad27df296c428af4dfc793f06cee018b04ff0c1d8d192ae47bfd828fe783f9de +size 19073 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png.meta new file mode 100644 index 00000000..c7807faf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/2DBitmojiAvatar.png.meta @@ -0,0 +1,19 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Texture: ! b906a729-a545-43d2-a7d4-7e8c8e9acfb1 + ImporterName: FileTextureImporter + PrimaryAsset: ! b906a729-a545-43d2-a7d4-7e8c8e9acfb1 + PackageType: NotAPackage + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png new file mode 100644 index 00000000..6e1f3c6e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:315749b2dbb79d2e23504598a4fd86498cbd46c67e63607bd9b7037f99ace7bf +size 85 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png.meta new file mode 100644 index 00000000..24b658cb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Base.png.meta @@ -0,0 +1,19 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Texture: ! 3979da00-6f82-42af-a577-c30df444e15e + ImporterName: FileTextureImporter + PrimaryAsset: ! 3979da00-6f82-42af-a577-c30df444e15e + PackageType: NotAPackage + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png new file mode 100644 index 00000000..8cc3e12b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edb43408842f9687d4f26e5bbaddc66b0553d3d85547061623641521f424d9a2 +size 9174 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png.meta new file mode 100644 index 00000000..c2b199a5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/Glow.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 434234ae-e5c8-4178-b873-f1ad496fc142 + ImporterName: FileTextureImporter + PrimaryAsset: ! 434234ae-e5c8-4178-b873-f1ad496fc142 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png new file mode 100644 index 00000000..ff95a83e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dafe5742f1c8abd24b2a53eb401b5f4a0cfee16b55973e2a5e0030f1a354a32 +size 36006 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png.meta new file mode 100644 index 00000000..8722eb79 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMask.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 6d65d910-e491-4ed9-ab91-c187bdb1baa4 + ImporterName: FileTextureImporter + PrimaryAsset: ! 6d65d910-e491-4ed9-ab91-c187bdb1baa4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png new file mode 100644 index 00000000..fa159592 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:559dce1a6b9ed5401e2b1c2ba3d99f876617d2f906aa9f4777fb99b2b307e169 +size 20991 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png.meta new file mode 100644 index 00000000..586ced97 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshNewMaskColored.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 7b7a2bf5-e391-465f-aa24-aba1d2b4b8d5 + ImporterName: FileTextureImporter + PrimaryAsset: ! 7b7a2bf5-e391-465f-aa24-aba1d2b4b8d5 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png new file mode 100644 index 00000000..5d7c55fc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eaf57fbd93cdc0a10e55d0dc1a42566a6f5d510d3119c460c15096c1a2e05bd +size 9061 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png.meta new file mode 100644 index 00000000..e5961f67 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshPinchTexture.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + ImporterName: FileTextureImporter + PrimaryAsset: ! e0a110ae-6b49-431f-9924-e602351e9a0c + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png new file mode 100644 index 00000000..63bc4d6c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11b83a2c5fc89395a327306a824fd82334260b6fe3e68887fef79f91f26c0635 +size 2980 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png.meta new file mode 100644 index 00000000..602d923c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/handMeshTapTexture.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + ImporterName: FileTextureImporter + PrimaryAsset: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png new file mode 100644 index 00000000..61382c7e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc4735ed49fdcdcf8a73db23af6ee5f0a9ed83203ff4388844e501050b82b31f +size 7759 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png.meta new file mode 100644 index 00000000..a6e4584a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/BaseHandVisualsTextures/occlusionGradient.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 738d604c-2468-45f6-b1a3-e787daaf9704 + ImporterName: FileTextureImporter + PrimaryAsset: ! 738d604c-2468-45f6-b1a3-e787daaf9704 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png new file mode 100644 index 00000000..aab80b6c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43e88364ab1579e9befcf66472f2dc4ee13615737bb65bf807854a1c030f2e3f +size 605 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png.meta new file mode 100644 index 00000000..0e038951 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/MaterialParams.png.meta @@ -0,0 +1,19 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Texture: ! a17dab59-a405-45d9-966e-8e432da382e4 + ImporterName: FileTextureImporter + PrimaryAsset: ! a17dab59-a405-45d9-966e-8e432da382e4 + PackageType: NotAPackage + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png new file mode 100644 index 00000000..3dd0618e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34aabdfd6bfc654303f61e85a0bf9b6e64236783d5c8ee3b47b07665e2278f1d +size 85 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png.meta new file mode 100644 index 00000000..cfa5574d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Texture: ! 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + ImporterName: FileTextureImporter + PrimaryAsset: ! 449cee8a-1b47-4f1b-a31a-dfa6740f32ff + PackageType: NotAPackage + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png new file mode 100644 index 00000000..1ff0e998 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97de283583c06ab34921f0962685d78252b9c655e3b157cf035fe344c7979db4 +size 828 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png.meta new file mode 100644 index 00000000..fa211ef5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowDown.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 26d9d10e-0b53-4ffc-b516-b290c54fcd35 + ImporterName: FileTextureImporter + PrimaryAsset: ! 26d9d10e-0b53-4ffc-b516-b290c54fcd35 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png new file mode 100644 index 00000000..0c8c3ea6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d73e3bab89cada7803f3674b262f8186f62909645771a44ab3944f9b0d17b957 +size 2087 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png.meta new file mode 100644 index 00000000..acdb107e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/ArrowUp.png.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! 08e7c6e6-8dbe-40fa-bf02-ebd5c9660ca1 + ImporterName: FileTextureImporter + PrimaryAsset: ! 08e7c6e6-8dbe-40fa-bf02-ebd5c9660ca1 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png new file mode 100644 index 00000000..d6564542 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae322e8d086ce80f55de405433f17f7aea94898f3c59cd79f2d4168c6ae3c87 +size 4481 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png.meta new file mode 100644 index 00000000..8e21f7fe --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Close.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 30e860be-6510-4921-9f0e-af80eb8844cb + ImporterName: FileTextureImporter + PrimaryAsset: ! 30e860be-6510-4921-9f0e-af80eb8844cb + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png new file mode 100644 index 00000000..702f805b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91cbdad7cfc6b685dfa3dd98752c6de2b01bce379a699f3c79d93b2dded2f8d2 +size 5841 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png.meta new file mode 100644 index 00000000..8292bda0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconBlack.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 5112d79b-d07a-4bb1-baaa-686e1b308311 + ImporterName: FileTextureImporter + PrimaryAsset: ! 5112d79b-d07a-4bb1-baaa-686e1b308311 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png new file mode 100644 index 00000000..d1b25100 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd8e3bd90d28b7f908c256b2296cd92bbb0027423fe49cd6622b2625df13e4a +size 6095 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png.meta new file mode 100644 index 00000000..d7767537 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/FollowIconWhite.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 022ed882-751f-432f-8120-bb3d40959a20 + ImporterName: FileTextureImporter + PrimaryAsset: ! 022ed882-751f-432f-8120-bb3d40959a20 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png new file mode 100644 index 00000000..58a6f6f3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1acb4632dfb6321095d5d89cf6bc1809d0a7f22892617ff09fb95d483563e68 +size 6363 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png.meta new file mode 100644 index 00000000..e2b51eea --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Image.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 919ebe17-d82b-4214-9c3f-52365488f43d + ImporterName: FileTextureImporter + PrimaryAsset: ! 919ebe17-d82b-4214-9c3f-52365488f43d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Size + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png new file mode 100644 index 00000000..7126bf0e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d0a9192c6950bc74ec00cf94b76773f8230a7b40c375e2eb8595ad3e754e8bc +size 12863 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png.meta new file mode 100644 index 00000000..29f9771d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/Mask_simple_reflection_ellipse.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 816f16c5-007d-4d7f-937c-192b15901cdc + ImporterName: FileTextureImporter + PrimaryAsset: ! 816f16c5-007d-4d7f-937c-192b15901cdc + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg new file mode 100644 index 00000000..bb5c1a52 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98589b58ff5d117e6e898f49d0b5505203bff6951668bc4bf110986d6287f27c +size 60024 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg.meta new file mode 100644 index 00000000..ef3103dd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! bf1666aa-7785-445d-9ba4-3e41d6472446 + ImporterName: FileTextureImporter + PrimaryAsset: ! bf1666aa-7785-445d-9ba4-3e41d6472446 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg new file mode 100644 index 00000000..94152464 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:484b807e838e0993ba65607621b2d553b1eae082857c8a6ba7a82055d005ac83 +size 7786 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg.meta new file mode 100644 index 00000000..90f19b24 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleIdle_05.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! a003dca6-fa76-4dc4-b33e-4a38fc750db9 + ImporterName: FileTextureImporter + PrimaryAsset: ! a003dca6-fa76-4dc4-b33e-4a38fc750db9 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg new file mode 100644 index 00000000..cc732bdc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:355bc35c7f1a736d523f700717983d46d8618ded5c41a03e68cce7a5ec6b3ff2 +size 21966 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg.meta new file mode 100644 index 00000000..83c0338a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_02.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! ac2798fc-6df2-44d0-8d4e-871d24cccc4d + ImporterName: FileTextureImporter + PrimaryAsset: ! ac2798fc-6df2-44d0-8d4e-871d24cccc4d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg new file mode 100644 index 00000000..90dd24e5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b4997e66b963e51a9674dbcec27917028c7511494bd8de98a2e6fa6c979e71b +size 13418 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg.meta new file mode 100644 index 00000000..06f1e02c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_05.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 825f641e-3daf-441b-9f64-03923bc7bb4b + ImporterName: FileTextureImporter + PrimaryAsset: ! 825f641e-3daf-441b-9f64-03923bc7bb4b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg new file mode 100644 index 00000000..34b04f30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4145e4073030e4c9108e14d5af2ada2aa784b55acb3e9bb60602b3d3d331aead +size 5638 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg.meta new file mode 100644 index 00000000..85a23e06 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/SimpleRefl_06.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + ImporterName: FileTextureImporter + PrimaryAsset: ! aa5ac2d5-2844-4a73-a2a2-ca671eb71e09 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + NativePackageRoot: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg new file mode 100644 index 00000000..98fd48ef --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a2058d9550cd4a9b7b884aeba1f3f9352f3b5f596dc678d3b3eb3e117dcc78a +size 15703 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg.meta new file mode 100644 index 00000000..a9ce4188 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/PlatformUI/UI_glow.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 482f2ef4-e496-4cf0-933d-dd9d94b3c901 + ImporterName: FileTextureImporter + PrimaryAsset: ! 482f2ef4-e496-4cf0-933d-dd9d94b3c901 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png new file mode 100644 index 00000000..211ab4e0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feb5fbe4dee1662976ac2621368fcf9d02dc4f612e8fafc2c09c239321bad3a1 +size 6080 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png.meta new file mode 100644 index 00000000..6fc267ac --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Active.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! ede79e05-2456-4fe6-895b-518ddb32ee0a + ImporterName: FileTextureImporter + PrimaryAsset: ! ede79e05-2456-4fe6-895b-518ddb32ee0a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png new file mode 100644 index 00000000..36335b57 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eb1ffec2e1b064d1ffee805fa9d0d40dad55bdcc637c6afb908fb563082a658 +size 1398 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png.meta new file mode 100644 index 00000000..0587e7ac --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle-Inactive.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 611e2abb-fb0f-4e2f-8c27-57f7a83eef9d + ImporterName: FileTextureImporter + PrimaryAsset: ! 611e2abb-fb0f-4e2f-8c27-57f7a83eef9d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png new file mode 100644 index 00000000..e5d65328 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1dd688ae5a172dac4a0fa8cd3dc5b1686c02bcf9725a76d9af51299b883ff32 +size 436 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png.meta new file mode 100644 index 00000000..8f9af31a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/Rectangle.png.meta @@ -0,0 +1,19 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Texture: ! 6f2697ee-39f9-4372-b974-11338f2534f3 + ImporterName: FileTextureImporter + PrimaryAsset: ! 6f2697ee-39f9-4372-b974-11338f2534f3 + PackageType: NotAPackage + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg new file mode 100644 index 00000000..3d6bed88 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4d3ede05da00933ed4301b21002db303921ed13a557f500efc3b2824444c223 +size 12547 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg.meta new file mode 100644 index 00000000..8655efca --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKContainerExampleImage.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 0f94ff6a-ac94-4341-9937-de5a562687da + ImporterName: FileTextureImporter + PrimaryAsset: ! 0f94ff6a-ac94-4341-9937-de5a562687da + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png new file mode 100644 index 00000000..d986791f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e2f0da760d047968444bbf2b55f8cf68ae7c4d268d73ce2617055924f780ad9 +size 116159 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png.meta new file mode 100644 index 00000000..482e3056 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/SIKLogo.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! b104c4df-91ff-4a59-8bb8-71a02a096038 + ImporterName: FileTextureImporter + PrimaryAsset: ! b104c4df-91ff-4a59-8bb8-71a02a096038 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png new file mode 100644 index 00000000..36b25458 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74876ede3ae8bd9bebf16936ba726f734caef8cab960d93028d5db6ad2feecfa +size 10002 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png.meta new file mode 100644 index 00000000..10df165e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Assets/Textures/ScrollBarRectangle.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 76b2ec40-1edc-487a-af2c-371af82118ae + ImporterName: FileTextureImporter + PrimaryAsset: ! 76b2ec40-1edc-487a-af2c-371af82118ae + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Texture: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + Level: None + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts new file mode 100644 index 00000000..d7fce366 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts @@ -0,0 +1,544 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {SIK} from "../../SIK" +import {ToggleButton} from "../UI/ToggleButton/ToggleButton" +import {validate} from "../../Utils/validate" + +const PINCH_BUTTON: number = 0 +const TOGGLE_BUTTON: number = 1 +const STATE_BUTTON: number = 2 + +/** + * This class provides visual feedback for different types of buttons, such as Pinch Button, Toggle Button, and State Button. It allows customization of the button's appearance and behavior based on its state. + */ +@component +export class ButtonFeedback extends BaseScriptComponent { + @input("int") + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Pinch Button", 0), + new ComboBoxItem("Toggle Button", 1), + new ComboBoxItem("State Button", 2), + ]), + ) + buttonType: number = 0 + @ui.separator + @input + renderMeshVisual!: RenderMeshVisual + @input + @showIf("buttonType", 0) + useGlowMesh: boolean = false + @input + @allowUndefined + @showIf("useGlowMesh", true) + glowRenderMeshVisual?: RenderMeshVisual + @input + maxBlendShapeWeight: number = 1.0 + @ui.separator + @input + meshBlendShapeName: string = "Pinch" + @input + meshIdleMaterial!: Material + @input + meshHoverMaterial!: Material + @input + meshPinchedMaterial!: Material + @ui.separator + @input + @allowUndefined + @showIf("useGlowMesh", true) + glowBlendShapeName: string = "Pinch" + @input("Asset.Material") + @allowUndefined + @showIf("useGlowMesh", true) + glowIdleMaterial: Material | undefined + @input("Asset.Material") + @allowUndefined + @showIf("useGlowMesh", true) + glowHoverMaterial: Material | undefined + @input("Asset.Material") + @allowUndefined + @showIf("useGlowMesh", true) + glowPinchedMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 1) + @allowUndefined + meshToggledPinchedMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 1) + @allowUndefined + meshToggledHoverMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 1) + @allowUndefined + meshToggledIdleMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 2) + @allowUndefined + meshStatePinchedMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 2) + @allowUndefined + meshStateHoverMaterial: Material | undefined + @input("Asset.Material") + @showIf("buttonType", 2) + @allowUndefined + meshStateIdleMaterial: Material | undefined + @input + @showIf("buttonType", 2) + persistentPinchedState: boolean = false + @ui.separator + @input("Asset.Texture") + @allowUndefined + defaultIcon: Texture | undefined + @input("Asset.Texture") + @allowUndefined + onIcon: Texture | undefined + + private interactable: Interactable | null = null + private toggleButton: ToggleButton | null = null + private initialMaxInteractionStrength: number = 0.0 + private squishEnabled: boolean = true + + onAwake(): void { + this.init() + } + + private init = (): void => { + if (isNull(this.renderMeshVisual)) { + throw new Error("No RenderMeshVisual component attached to this entity!") + } + + this.renderMeshVisual.mainMaterial = this.renderMeshVisual + .getMaterial(0) + .clone() + + if (this.useGlowMesh) { + if (this.glowRenderMeshVisual !== undefined) { + this.glowRenderMeshVisual.mainMaterial = this.glowRenderMeshVisual + .getMaterial(0) + .clone() + } else { + this.useGlowMesh = false + print("No Glow RenderMeshVisual component attached to this entity.") + } + } + + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + if (isNull(this.interactable)) { + throw new Error("Interactable component not found in this entity!") + } + + if (this.buttonType === TOGGLE_BUTTON || this.buttonType === STATE_BUTTON) { + this.toggleButton = this.getSceneObject().getComponent( + ToggleButton.getTypeName(), + ) + if (isNull(this.toggleButton)) { + throw new Error("ToggleButton component not found in this entity!") + } + } + + this.setupInteractableCallbacks() + + this.createEvent("OnEnableEvent").bind(() => { + this.squishEnabled = true + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.squishEnabled = false + }) + + this.createEvent("OnStartEvent").bind(() => { + if ( + this.meshIdleMaterial === undefined || + this.meshHoverMaterial === undefined || + this.meshPinchedMaterial === undefined + ) { + throw new Error( + "ButtonFeedback requires meshIdleMaterial, meshHoverMaterial, and meshPinchedMaterial to be set! SceneObject name: " + + this.getSceneObject().name, + ) + } + + if (this.buttonType === TOGGLE_BUTTON) { + if ( + this.meshToggledIdleMaterial === undefined || + this.meshToggledHoverMaterial === undefined || + this.meshToggledPinchedMaterial === undefined + ) { + throw new Error( + "ToggleButton requires meshToggledIdleMaterial, meshToggledHoverMaterial, and meshToggledPinchedMaterial to be set! SceneObject name: " + + this.getSceneObject().name, + ) + } + } else if (this.buttonType === STATE_BUTTON) { + if ( + this.meshStateIdleMaterial === undefined || + this.meshStateHoverMaterial === undefined || + this.meshStatePinchedMaterial === undefined + ) { + throw new Error( + "StateButton requires meshStateIdleMaterial, meshStateHoverMaterial, and meshStatePinchedMaterial to be set! SceneObject name: " + + this.getSceneObject().name, + ) + } + } + + this.meshIdleMaterial = this.meshIdleMaterial.clone() + this.meshHoverMaterial = this.meshHoverMaterial.clone() + this.meshPinchedMaterial = this.meshPinchedMaterial.clone() + + this.changeButtonState(this.meshIdleMaterial) + + if (this.defaultIcon !== undefined) { + this.meshIdleMaterial.mainPass.iconEnabled = true + this.meshHoverMaterial.mainPass.iconEnabled = true + this.meshPinchedMaterial.mainPass.iconEnabled = true + this.meshIdleMaterial.mainPass.icon = this.defaultIcon + this.meshHoverMaterial.mainPass.icon = this.defaultIcon + this.meshPinchedMaterial.mainPass.icon = this.defaultIcon + } + + if (this.onIcon !== undefined) { + if (this.buttonType === TOGGLE_BUTTON) { + if ( + this.meshToggledIdleMaterial !== undefined && + this.meshToggledHoverMaterial !== undefined && + this.meshToggledPinchedMaterial !== undefined + ) { + this.meshToggledIdleMaterial = this.meshToggledIdleMaterial.clone() + this.meshToggledHoverMaterial = + this.meshToggledHoverMaterial.clone() + this.meshToggledPinchedMaterial = + this.meshToggledPinchedMaterial.clone() + + this.meshToggledIdleMaterial.mainPass.iconEnabled = true + this.meshToggledHoverMaterial.mainPass.iconEnabled = true + this.meshToggledPinchedMaterial.mainPass.iconEnabled = true + + this.meshToggledIdleMaterial.mainPass.icon = this.onIcon + this.meshToggledHoverMaterial.mainPass.icon = this.onIcon + this.meshToggledPinchedMaterial.mainPass.icon = this.onIcon + } + } else if (this.buttonType === STATE_BUTTON) { + if ( + this.meshStateIdleMaterial !== undefined && + this.meshStateHoverMaterial !== undefined && + this.meshStatePinchedMaterial !== undefined + ) { + this.meshStateIdleMaterial = this.meshStateIdleMaterial.clone() + this.meshStateHoverMaterial = this.meshStateHoverMaterial.clone() + this.meshStatePinchedMaterial = + this.meshStatePinchedMaterial.clone() + + this.meshStateIdleMaterial.mainPass.iconEnabled = true + this.meshStateHoverMaterial.mainPass.iconEnabled = true + this.meshStatePinchedMaterial.mainPass.iconEnabled = true + + this.meshStateIdleMaterial.mainPass.icon = this.onIcon + this.meshStateHoverMaterial.mainPass.icon = this.onIcon + this.meshStatePinchedMaterial.mainPass.icon = this.onIcon + } + } + } + + if (this.onIcon !== undefined && this.defaultIcon !== undefined) { + this.meshIdleMaterial.mainPass.iconEnabled = false + this.meshHoverMaterial.mainPass.iconEnabled = false + this.meshPinchedMaterial.mainPass.iconEnabled = false + + if (this.buttonType === TOGGLE_BUTTON) { + if ( + this.meshToggledIdleMaterial !== undefined && + this.meshToggledHoverMaterial !== undefined && + this.meshToggledPinchedMaterial !== undefined + ) { + this.meshToggledIdleMaterial = this.meshToggledIdleMaterial.clone() + this.meshToggledHoverMaterial = + this.meshToggledHoverMaterial.clone() + this.meshToggledPinchedMaterial = + this.meshToggledPinchedMaterial.clone() + + this.meshToggledIdleMaterial.mainPass.iconEnabled = false + this.meshToggledHoverMaterial.mainPass.iconEnabled = false + this.meshToggledPinchedMaterial.mainPass.iconEnabled = false + } + } else if (this.buttonType === STATE_BUTTON) { + if ( + this.meshStateIdleMaterial !== undefined && + this.meshStateHoverMaterial !== undefined && + this.meshStatePinchedMaterial !== undefined + ) { + this.meshStateIdleMaterial = this.meshStateIdleMaterial.clone() + this.meshStateHoverMaterial = this.meshStateHoverMaterial.clone() + this.meshStatePinchedMaterial = + this.meshStatePinchedMaterial.clone() + + this.meshStateIdleMaterial.mainPass.iconEnabled = false + this.meshStateHoverMaterial.mainPass.iconEnabled = false + this.meshStatePinchedMaterial.mainPass.iconEnabled = false + } + } + } + }) + } + + private setupInteractableCallbacks = (): void => { + validate(this.interactable) + this.interactable.onHoverUpdate.add(this.updateHoverState) + + switch (this.buttonType) { + case PINCH_BUTTON: + validate(this.interactable) + this.interactable.onHoverEnter.add( + this.initializeHoverState_PinchButton, + ) + this.interactable.onHoverExit.add(this.resetHoverState_PinchButton) + this.interactable.onTriggerCanceled.add( + this.resetHoverState_PinchButton, + ) + this.interactable.onTriggerStart.add( + this.initializeTriggeredState_PinchButton, + ) + this.interactable.onTriggerEnd.add(this.resetTriggeredState_PinchButton) + break + case TOGGLE_BUTTON: + validate(this.interactable) + this.interactable.onHoverEnter.add( + this.initializeHoverState_ToggleButton, + ) + this.interactable.onHoverExit.add(this.resetHoverState_ToggleButton) + this.interactable.onTriggerCanceled.add( + this.resetHoverState_ToggleButton, + ) + this.interactable.onTriggerStart.add( + this.initializeTriggeredState_ToggleButton, + ) + this.interactable.onTriggerEnd.add( + this.resetTriggeredState_ToggleButton, + ) + + validate(this.toggleButton) + this.toggleButton + .createEvent("OnEnableEvent") + .bind(this.onToggleButtonEnabled) + break + case STATE_BUTTON: + validate(this.interactable) + this.interactable.onHoverEnter.add( + this.initializeHoverState_StateButton, + ) + this.interactable.onHoverExit.add(this.resetHoverState_StateButton) + this.interactable.onTriggerCanceled.add( + this.resetHoverState_StateButton, + ) + this.interactable.onTriggerStart.add( + this.initializeTriggeredState_StateButton, + ) + this.interactable.onTriggerEnd.add(this.resetTriggeredState_StateButton) + validate(this.toggleButton) + this.toggleButton + .createEvent("OnEnableEvent") + .bind(this.onToggleButtonEnabled) + break + } + } + + private initializeHoverState_PinchButton = (): void => { + this.initialMaxInteractionStrength = this.getMaxInteractionStrength() + this.changeButtonState(this.meshHoverMaterial) + this.changeGlowState(this.glowHoverMaterial) + } + + private resetHoverState_PinchButton = (): void => { + this.initialMaxInteractionStrength = 0.0 + this.renderMeshVisual.setBlendShapeWeight(this.meshBlendShapeName, 0.0) + if (this.useGlowMesh) { + if (this.glowRenderMeshVisual !== undefined) { + this.glowRenderMeshVisual.setBlendShapeWeight( + this.glowBlendShapeName, + 0.0, + ) + } + } + this.changeButtonState(this.meshIdleMaterial) + this.changeGlowState(this.glowIdleMaterial) + } + + private updateHoverState = (): void => { + const maxInteractionStrength = this.getMaxInteractionStrength() + if (!this.squishEnabled) return + const interactionScale = + this.initialMaxInteractionStrength + + (maxInteractionStrength * (1.0 - this.initialMaxInteractionStrength)) / + 1.0 + this.renderMeshVisual.setBlendShapeWeight( + this.meshBlendShapeName, + interactionScale * this.maxBlendShapeWeight, + ) + if (this.useGlowMesh) { + if (this.glowRenderMeshVisual !== undefined) { + this.glowRenderMeshVisual.setBlendShapeWeight( + this.glowBlendShapeName, + interactionScale * this.maxBlendShapeWeight, + ) + } + } + } + + private initializeTriggeredState_PinchButton = (): void => { + this.changeButtonState(this.meshPinchedMaterial) + this.changeGlowState(this.glowPinchedMaterial) + } + + private resetTriggeredState_PinchButton = (): void => { + this.changeButtonState(this.meshHoverMaterial) + this.changeGlowState(this.glowHoverMaterial) + } + + private onToggleButtonEnabled = (): void => { + validate(this.toggleButton) + validate(this.meshToggledIdleMaterial) + validate(this.meshStateIdleMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.buttonType === TOGGLE_BUTTON + ? this.meshToggledIdleMaterial + : this.meshStateIdleMaterial + : this.meshIdleMaterial, + ) + } + + private initializeHoverState_ToggleButton = (): void => { + this.initialMaxInteractionStrength = this.getMaxInteractionStrength() + validate(this.toggleButton) + validate(this.meshToggledHoverMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshToggledHoverMaterial + : this.meshHoverMaterial, + ) + } + + private resetHoverState_ToggleButton = (): void => { + this.initialMaxInteractionStrength = 0.0 + this.renderMeshVisual.setBlendShapeWeight(this.meshBlendShapeName, 0.0) + validate(this.toggleButton) + validate(this.meshToggledIdleMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshToggledIdleMaterial + : this.meshIdleMaterial, + ) + } + + private initializeTriggeredState_ToggleButton = (): void => { + validate(this.toggleButton) + validate(this.meshToggledPinchedMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshToggledPinchedMaterial + : this.meshPinchedMaterial, + ) + } + + private resetTriggeredState_ToggleButton = (): void => { + validate(this.toggleButton) + validate(this.meshToggledHoverMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshHoverMaterial + : this.meshToggledHoverMaterial, + ) + } + + private initializeHoverState_StateButton = (): void => { + this.initialMaxInteractionStrength = this.getMaxInteractionStrength() + validate(this.toggleButton) + validate(this.meshStateHoverMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshStateHoverMaterial + : this.meshHoverMaterial, + ) + } + + private resetHoverState_StateButton = (): void => { + this.initialMaxInteractionStrength = 0.0 + this.renderMeshVisual.setBlendShapeWeight(this.meshBlendShapeName, 0.0) + validate(this.toggleButton) + validate(this.meshStatePinchedMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshStatePinchedMaterial + : this.meshIdleMaterial, + ) + } + + private initializeTriggeredState_StateButton = (): void => { + validate(this.toggleButton) + validate(this.meshStatePinchedMaterial) + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshStatePinchedMaterial + : this.meshStatePinchedMaterial, + ) + } + + private resetTriggeredState_StateButton = (): void => { + validate(this.toggleButton) + validate(this.meshStatePinchedMaterial) + validate(this.meshStateHoverMaterial) + if (this.persistentPinchedState) { + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshHoverMaterial + : this.meshStatePinchedMaterial, + ) + } else { + this.changeButtonState( + this.toggleButton.isToggledOn + ? this.meshHoverMaterial + : this.meshStateHoverMaterial, + ) + } + } + + private getMaxInteractionStrength = (): number => { + validate(this.interactable) + const interactors = SIK.InteractionManager.getInteractorsByType( + this.interactable.hoveringInteractor, + ) + + if (interactors.length === 0) { + return 0 + } + + /** + * At this point we know getInteractorsByType has returned some list of Interactors, each of which are hovering this Interactable + * This means that there are multiple Interactors which could be at various stages of interactionStrength. + * The behavior we want is to set the squish value of the Interactable based on the Max interactionStrength of all the Interactors currently + * hovering this Interactable. Use array reduce to find Max: + */ + return interactors.reduce((maxInteractionStrength, interactor) => { + validate(interactor) + return Math.max( + maxInteractionStrength, + interactor.interactionStrength ?? 0, + ) + }, -Infinity) + } + + private changeButtonState = (material: Material | undefined): void => { + if (material === undefined) return + this.renderMeshVisual.mainMaterial = material + } + + private changeGlowState = (material: Material | undefined): void => { + if (!this.useGlowMesh) return + if (material === undefined) return + validate(this.glowRenderMeshVisual) + this.glowRenderMeshVisual.mainMaterial = material + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts.meta new file mode 100644 index 00000000..ce4fab99 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ButtonFeedback.ts.meta @@ -0,0 +1,105 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 0c12c755-f42d-429b-bbb7-a9ce226d0a90 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + buttonType: false + defaultIcon: false + glowBlendShapeName: false + glowHoverMaterial: false + glowIdleMaterial: false + glowPinchedMaterial: false + glowRenderMeshVisual: false + maxBlendShapeWeight: false + meshBlendShapeName: false + meshHoverMaterial: false + meshIdleMaterial: false + meshPinchedMaterial: false + meshStateHoverMaterial: false + meshStateIdleMaterial: false + meshStatePinchedMaterial: false + meshToggledHoverMaterial: false + meshToggledIdleMaterial: false + meshToggledPinchedMaterial: false + onIcon: false + persistentPinchedState: false + renderMeshVisual: false + useGlowMesh: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - renderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + buttonType: 0 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - '// @input int buttonType {"widget":"combobox", "values":[{"label":"Pinch Button", "value":0}, {"label":"Toggle Button", "value":1}, {"label":"State Button", "value":2}]}' + - '// @ui {"widget":"separator"}' + - // @input Component.RenderMeshVisual renderMeshVisual + - '// @input bool useGlowMesh {"showIf":"buttonType", "showIfValue":0}' + - '// @input Component.RenderMeshVisual glowRenderMeshVisual {"showIf":"useGlowMesh", "showIfValue":true}' + - // @input float maxBlendShapeWeight = 1 + - '// @ui {"widget":"separator"}' + - '// @input string meshBlendShapeName = "Pinch"' + - // @input Asset.Material meshIdleMaterial + - // @input Asset.Material meshHoverMaterial + - // @input Asset.Material meshPinchedMaterial + - '// @ui {"widget":"separator"}' + - '// @input string glowBlendShapeName = "Pinch" {"showIf":"useGlowMesh", "showIfValue":true}' + - '// @input Asset.Material glowIdleMaterial {"showIf":"useGlowMesh", "showIfValue":true}' + - '// @input Asset.Material glowHoverMaterial {"showIf":"useGlowMesh", "showIfValue":true}' + - '// @input Asset.Material glowPinchedMaterial {"showIf":"useGlowMesh", "showIfValue":true}' + - '// @input Asset.Material meshToggledPinchedMaterial {"showIf":"buttonType", "showIfValue":1}' + - '// @input Asset.Material meshToggledHoverMaterial {"showIf":"buttonType", "showIfValue":1}' + - '// @input Asset.Material meshToggledIdleMaterial {"showIf":"buttonType", "showIfValue":1}' + - '// @input Asset.Material meshStatePinchedMaterial {"showIf":"buttonType", "showIfValue":2}' + - '// @input Asset.Material meshStateHoverMaterial {"showIf":"buttonType", "showIfValue":2}' + - '// @input Asset.Material meshStateIdleMaterial {"showIf":"buttonType", "showIfValue":2}' + - '// @input bool persistentPinchedState {"showIf":"buttonType", "showIfValue":2}' + - '// @ui {"widget":"separator"}' + - // @input Asset.Texture defaultIcon + - // @input Asset.Texture onIcon diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts new file mode 100644 index 00000000..c98d9c20 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts @@ -0,0 +1,317 @@ +/** + * This class customizes a mesh visual to create an extendable capsule shape. It allows configuration of the capsule's length, radius, and poly-count through various input properties. + */ +@component +export class CapsuleMeshCustomizer extends BaseScriptComponent { + @input + @hint("The mesh visual to modify into an extendable capsule.") + private meshVisual!: RenderMeshVisual + @input + @hint( + "The length of the cylindric section of the capsule (not including the end caps).", + ) + private capsuleLength: number = 10.0 + @input + @hint("The radius of the end caps and the radius of the cylindric section.") + private radius: number = 1.0 + @input("int") + @hint( + "The number of points per circle in the mesh. Increase for a higher poly-count mesh.", + ) + private radianStepCount: number = 16 + @input("int") + @hint( + "The number of circles in the cylinder of the mesh. Increase for a higher poly-count mesh.", + ) + private cylinderStepCount: number = 16 + @input("int") + @hint( + "The number of circles in the end cap of the capsule of the mesh. Increase for a higher poly-count mesh.", + ) + private endXStepCount: number = 32 + + private uLength: number = Math.PI * this.radius * this.radius + private endPointNormals: number[] = [1, 0, 0, -1, 0, 0] + private endPointUVs: number[] = [0, 0.5, 0.5, 0.5] + + private builder: MeshBuilder = new MeshBuilder([ + {name: "position", components: 3}, + {name: "normal", components: 3, normalized: true}, + {name: "texture0", components: 2}, + ]) + + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + }) + } + + init(): void { + this.builder.topology = MeshTopology.Triangles + this.builder.indexType = MeshIndexType.UInt16 + + this.buildCapsule() + } + + private buildCircle(originX: number, radius: number, isEnd: boolean) { + let points: number[] = [] + let normals: number[] = [] + let uvs: number[] = [] + + let uProportion: number + + if (isEnd) { + let arcLength: number + if (originX < 0) { + arcLength = + (((this.radius + this.capsuleLength / 2 + originX) / this.radius) * + this.uLength) / + 4 + } else { + arcLength = + ((1 - + (this.radius + this.capsuleLength / 2 - originX) / this.radius) * + this.uLength) / + 4 + + this.uLength / 4 + } + uProportion = arcLength + } else { + uProportion = this.uLength / 4 + } + + for ( + let i = -Math.PI / 2; + i < 1.5 * Math.PI; + i += Math.PI / this.radianStepCount + ) { + const point = [originX, radius * Math.sin(i), radius * Math.cos(i)] + const normal = [0, -radius * Math.sin(i), -radius * Math.cos(i)] + + const firstHalf = i <= Math.PI / 2 + + let u = uProportion / this.uLength + + if (!firstHalf) { + u = 1 - u + } + + const uv = [u, 0.5 + radius * Math.sin(i) * 0.5] + + points = points.concat(point) + normals = normals.concat(normal) + uvs = uvs.concat(uv) + } + return [points, normals, uvs] + } + + private buildCylinder(length: number, radius: number) { + let points: number[] = [] + let normals: number[] = [] + let uvs: number[] = [] + + for ( + let circleCount = 0; + circleCount < this.cylinderStepCount; + circleCount++ + ) { + const i = -length / 2 + (circleCount * length) / this.cylinderStepCount + const circleData = this.buildCircle(i, radius, false) + + points = points.concat(circleData[0]) + normals = normals.concat(circleData[1]) + uvs = uvs.concat(circleData[2]) + } + return [points, normals, uvs] + } + + private buildEndCap(originX: number, radius: number, isRight: boolean) { + let points: number[] = [] + let normals: number[] = [] + let uvs: number[] = [] + + const step = radius / this.endXStepCount + for ( + let i = isRight ? step : -radius + step; + i < (isRight ? radius : 0); + i += step + ) { + const crossSectionRadius = Math.sqrt(radius ** 2 - i ** 2) + const circleData = this.buildCircle(i + originX, crossSectionRadius, true) + + points = points.concat(circleData[0]) + + for (let j = 0; j < this.radianStepCount * 2; j++) { + circleData[1][j * 3] = -i + } + normals = normals.concat(circleData[1]) + uvs = uvs.concat(circleData[2]) + } + + return [points, normals, uvs] + } + + // TODO: Investigate, circleIndexB is never used. + private linkCircleIndices(circleIndexA: number, circleIndexB: number) { + let indices: number[] = [] + const numPoints = this.radianStepCount * 2 + + const firstIndex = circleIndexA * numPoints + for (let i = firstIndex; i < (circleIndexA + 1) * numPoints - 1; i++) { + indices = indices.concat([i + 1, i + numPoints, i]) + indices = indices.concat([i + 1, i + numPoints + 1, i + numPoints]) + } + const lastIndex = (circleIndexA + 1) * numPoints - 1 + indices = indices.concat([ + firstIndex, + lastIndex + numPoints, + lastIndex, + firstIndex, + firstIndex + numPoints, + lastIndex + numPoints, + ]) + + return indices + } + + private linkCapsuleIndices() { + let indices: number[] = [] + const numCircles = (this.endXStepCount - 1) * 2 + this.cylinderStepCount + + for (let i = 0; i < numCircles - 1; i++) { + indices = indices.concat(this.linkCircleIndices(i, i + 1)) + } + + return indices + } + + private linkEndIndices( + endIndex: number, + circleIndex: number, + isRight: boolean, + ) { + let indices: number[] = [] + const numPoints = this.radianStepCount * 2 + + const firstIndex = circleIndex * numPoints + for (let i = firstIndex; i < firstIndex + numPoints - 1; i++) { + if (isRight) { + indices = indices.concat([i + 1, endIndex, i]) + } else { + indices = indices.concat([endIndex, i + 1, i]) + } + } + const lastIndex = (circleIndex + 1) * numPoints - 1 + if (isRight) { + indices = indices.concat([firstIndex, endIndex, lastIndex]) + } else { + indices = indices.concat([endIndex, firstIndex, lastIndex]) + } + + return indices + } + + private checkValid() { + return ( + this.radius === 0 || + this.radianStepCount === 0 || + this.cylinderStepCount === 0 || + this.endXStepCount === 0 + ) + } + + private buildCapsule() { + if (this.checkValid()) { + throw new Error("Step counts and radius must be positive, whole numbers.") + } + + if (this.builder.getIndicesCount() !== 0) { + this.builder.eraseIndices(0, this.builder.getIndicesCount()) + } + if (this.builder.getVerticesCount() !== 0) { + this.builder.eraseVertices(0, this.builder.getVerticesCount()) + } + + const leftEndCap = this.buildEndCap( + -this.capsuleLength / 2, + this.radius, + false, + ) + const cylinder = this.buildCylinder(this.capsuleLength, this.radius) + const rightEndCap = this.buildEndCap( + this.capsuleLength / 2, + this.radius, + true, + ) + + const endPoints = [ + [ + -this.capsuleLength / 2 - this.radius, + 0, + 0, + this.capsuleLength / 2 + this.radius, + 0, + 0, + ], + this.endPointNormals, + this.endPointUVs, + ] + + this.builder.appendVertices(leftEndCap) + this.builder.appendVertices(cylinder) + this.builder.appendVertices(rightEndCap) + + this.builder.appendVertices(endPoints) + + this.builder.appendIndices(this.linkCapsuleIndices()) + + this.builder.appendIndices( + this.linkEndIndices( + this.builder.getVerticesCount() - 1, + (this.endXStepCount - 1) * 2 + this.cylinderStepCount - 1, + true, + ), + ) + this.builder.appendIndices( + this.linkEndIndices(this.builder.getVerticesCount() - 2, 0, false), + ) + + if (this.builder.isValid()) { + this.meshVisual.mesh = this.builder.getMesh() + this.builder.updateMesh() + } else { + throw new Error( + "Invalid mesh, check parameters to ensure positive whole numbers for vertex counts!", + ) + } + } + + setLength(newLength: number): void { + this.capsuleLength = newLength + this.buildCapsule() + } + + setRadius(newRadius: number): void { + this.radius = newRadius + this.buildCapsule() + } + + setRadianStepCount(newCount: number): void { + this.radianStepCount = newCount + this.buildCapsule() + } + + setCylinderStepCount(newCount: number): void { + this.cylinderStepCount = newCount + this.buildCapsule() + } + + setEndXStepCount(newCount: number): void { + this.endXStepCount = newCount + this.buildCapsule() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts.meta new file mode 100644 index 00000000..a9180ec3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/CapsuleMeshCustomizer.ts.meta @@ -0,0 +1,54 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 34ec9e1d-4d86-425e-9b7a-b6f2c130e4be + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 34ec9e1d-4d86-425e-9b7a-b6f2c130e4be + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! ed97fc35-ca6a-4980-bf6e-7f745d48b792 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - '// @input Component.RenderMeshVisual meshVisual {"hint":"The mesh visual to modify into an extendable capsule."}' + - '// @input float capsuleLength = 10 {"hint":"The length of the cylindric section of the capsule (not including the end caps)."}' + - '// @input float radius = 1 {"hint":"The radius of the end caps and the radius of the cylindric section."}' + - '// @input int radianStepCount = 16 {"hint":"The number of points per circle in the mesh. Increase for a higher poly-count mesh."}' + - '// @input int cylinderStepCount = 16 {"hint":"The number of circles in the cylinder of the mesh. Increase for a higher poly-count mesh."}' + - '// @input int endXStepCount = 32 {"hint":"The number of circles in the end cap of the capsule of the mesh. Increase for a higher poly-count mesh."}' + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + capsuleLength: false + cylinderStepCount: false + endXStepCount: false + meshVisual: false + radianStepCount: false + radius: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - meshVisual: ! 00000000-0000-0000-0000-000000000000 + capsuleLength: ! 10.000000 + radius: ! 1.000000 + radianStepCount: ! 16.000000 + cylinderStepCount: ! 16.000000 + endXStepCount: ! 32.000000 + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts new file mode 100644 index 00000000..fa459d47 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts @@ -0,0 +1,151 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {validate} from "../../Utils/validate" +/** + * This class provides audio feedback for interactable objects. It allows configuration of audio tracks for hover, trigger start, and trigger end events. The class also provides access to the audio component for further customization. + */ +@component +export class InteractableAudioFeedback extends BaseScriptComponent { + @input("Asset.AudioTrackAsset") + @hint("This sound will play when the Interactable is hovered") + @allowUndefined + hoverAudioTrack: AudioTrackAsset | undefined + + @input("Asset.AudioTrackAsset") + @hint("This sound will play when starting the trigger the Interactable") + @allowUndefined + triggerStartAudioTrack: AudioTrackAsset | undefined + + @input("Asset.AudioTrackAsset") + @hint("This sound will play when ending the trigger of the Interactable") + @allowUndefined + triggerEndAudioTrack: AudioTrackAsset | undefined + + private _hoverAudioComponent: AudioComponent | undefined + private _triggerStartAudioComponent: AudioComponent | undefined + private _triggerEndAudioComponent: AudioComponent | undefined + private interactable: Interactable | null = null + + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + }) + } + + /** + * Returns the AudioComponent used for hover feedback for further configuration (such as volume). + */ + get hoverAudioComponent(): AudioComponent | undefined { + return this._hoverAudioComponent + } + + /** + * Returns the AudioComponent used for trigger start feedback for further configuration (such as volume). + */ + get triggerStartAudioComponent(): AudioComponent | undefined { + return this._triggerStartAudioComponent + } + + /** + * Returns the AudioComponent used for trigger end feedback for further configuration (such as volume). + */ + get triggerEndAudioComponent(): AudioComponent | undefined { + return this._triggerEndAudioComponent + } + + private setupInteractableCallbacks() { + validate(this.interactable) + + this.interactable.onHoverEnter.add(() => { + try { + if (this._hoverAudioComponent) { + this._hoverAudioComponent.play(1) + } + } catch (e) { + print("Error playing hover audio: " + e) + } + }) + + this.interactable.onTriggerStart.add(() => { + try { + if (this._triggerStartAudioComponent) { + this._triggerStartAudioComponent.play(1) + } + } catch (e) { + print("Error playing trigger start audio: " + e) + } + }) + + this.interactable.onTriggerEnd.add(() => { + try { + if (this._triggerEndAudioComponent) { + this._triggerEndAudioComponent.play(1) + } + } catch (e) { + print("Error playing trigger end audio: " + e) + } + }) + } + + private init() { + if (this.hoverAudioTrack) { + this._hoverAudioComponent = this.getSceneObject().createComponent( + "Component.AudioComponent", + ) as AudioComponent + + this.setPlaybackMode( + this._hoverAudioComponent, + Audio.PlaybackMode?.LowLatency, + ) + this._hoverAudioComponent.audioTrack = this.hoverAudioTrack + } + + if (this.triggerStartAudioTrack) { + this._triggerStartAudioComponent = this.getSceneObject().createComponent( + "Component.AudioComponent", + ) as AudioComponent + + this.setPlaybackMode( + this._triggerStartAudioComponent, + Audio.PlaybackMode?.LowLatency, + ) + this._triggerStartAudioComponent.audioTrack = this.triggerStartAudioTrack + } + + if (this.triggerEndAudioTrack) { + this._triggerEndAudioComponent = this.getSceneObject().createComponent( + "Component.AudioComponent", + ) as AudioComponent + + this.setPlaybackMode( + this._triggerEndAudioComponent, + Audio.PlaybackMode?.LowLatency, + ) + this._triggerEndAudioComponent.audioTrack = this.triggerEndAudioTrack + } + + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + + if (!this.interactable) { + throw new Error( + "Could not find Interactable component on this SceneObject.", + ) + } + + this.setupInteractableCallbacks() + } + + private setPlaybackMode( + target: AudioComponent, + playbackMode: Audio.PlaybackMode | undefined, + ) { + if (playbackMode !== undefined) { + target.playbackMode = playbackMode + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts.meta new file mode 100644 index 00000000..7d6df911 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableAudioFeedback.ts.meta @@ -0,0 +1,45 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! ac793208-0e86-4f7d-85b3-ea9c097c364b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + hoverAudioTrack: false + triggerEndAudioTrack: false + triggerStartAudioTrack: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerEndAudioTrack: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - '// @input Asset.AudioTrackAsset hoverAudioTrack {"hint":"This sound will play when the Interactable is hovered"}' + - '// @input Asset.AudioTrackAsset triggerStartAudioTrack {"hint":"This sound will play when starting the trigger the Interactable"}' + - '// @input Asset.AudioTrackAsset triggerEndAudioTrack {"hint":"This sound will play when ending the trigger of the Interactable"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts new file mode 100644 index 00000000..9a7109d6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts @@ -0,0 +1,96 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {validate} from "../../Utils/validate" + +/** + * This class provides visual feedback by changing the color of mesh visuals based on interaction events such as hover, pinch, and disable. It allows customization of colors for different interaction states. + */ +@component +export class InteractableColorFeedback extends BaseScriptComponent { + @input("vec4", "{0.28, 0.28, 0.28, 1}") + @widget(new ColorWidget()) + defaultColor: vec4 = new vec4(0.28, 0.28, 0.28, 1) + + @input("vec4", "{0.28, 0.28, 0.28, 1}") + @widget(new ColorWidget()) + hoverColor: vec4 = new vec4(0.28, 0.28, 0.28, 1) + + @input("vec4", "{0.46, 0.46, 0.46, 1}") + @widget(new ColorWidget()) + pinchedColor: vec4 = new vec4(0.46, 0.46, 0.46, 1) + + @input("vec4", "{1, 1, 1, 0}") + @widget(new ColorWidget()) + disabledColor: vec4 = new vec4(1, 1, 1, 0) + + @input + @hint( + "The meshes which will have their baseColor changed on pinch/hover events", + ) + meshVisuals: RenderMeshVisual[] = [] + + private interactable: Interactable | null = null + + private meshMaterials: Material[] = [] + + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents(): void { + this.createEvent("OnStartEvent").bind(() => { + this.init() + }) + } + + init(): void { + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + validate( + this.interactable, + "InteractableColorFeedback requires Interactable.", + ) + this.setupMaterials() + this.setupInteractableCallbacks(this.interactable) + } + + changeColor(color: vec4): void { + this.meshMaterials.forEach(function (material) { + material.mainPass.baseColor = color + }) + } + + setupInteractableCallbacks(interactable: Interactable): void { + validate(interactable) + interactable.onHoverEnter.add(() => { + this.changeColor(this.hoverColor) + }) + interactable.onHoverExit.add(() => { + this.changeColor(this.defaultColor) + }) + interactable.onTriggerStart.add(() => { + this.changeColor(this.pinchedColor) + }) + interactable.onTriggerEnd.add(() => { + this.changeColor(this.hoverColor) + }) + interactable.onTriggerCanceled.add(() => { + this.changeColor(this.defaultColor) + }) + interactable.createEvent("OnEnableEvent").bind(() => { + this.changeColor(this.defaultColor) + }) + interactable.createEvent("OnDisableEvent").bind(() => { + this.changeColor(this.disabledColor) + }) + } + + setupMaterials(): void { + for (var i = 0; i < this.meshVisuals.length; i++) { + let clonedMaterial = this.meshVisuals[i].mainMaterial.clone() + this.meshMaterials.push(clonedMaterial) + this.meshVisuals[i].mainMaterial = clonedMaterial + } + this.changeColor(this.defaultColor) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts.meta new file mode 100644 index 00000000..62004000 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableColorFeedback.ts.meta @@ -0,0 +1,52 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 8a3fa6e8-a0aa-49fc-9c2a-35e24f796b6d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + defaultColor: false + disabledColor: false + hoverColor: false + meshVisuals: false + pinchedColor: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - meshVisuals: ! + [] + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + ScriptTypes: + - + {} + InputLines: + - '// @input vec4 defaultColor = "{0.28, 0.28, 0.28, 1}" {"widget":"color"}' + - '// @input vec4 hoverColor = "{0.28, 0.28, 0.28, 1}" {"widget":"color"}' + - '// @input vec4 pinchedColor = "{0.46, 0.46, 0.46, 1}" {"widget":"color"}' + - '// @input vec4 disabledColor = "{1, 1, 1, 0}" {"widget":"color"}' + - '// @input Component.RenderMeshVisual[] meshVisuals {"hint":"The meshes which will have their baseColor changed on pinch/hover events"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts new file mode 100644 index 00000000..6c560b2d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts @@ -0,0 +1,158 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {validate} from "../../Utils/validate" + +/** + * This class provides visual feedback by adding an outline to mesh visuals when they are hovered or pinched. It allows customization of the outline color, thickness, and target meshes. + */ +@component +export class InteractableOutlineFeedback extends BaseScriptComponent { + @input + @hint("This is the material that will provide the mesh outline") + targetOutlineMaterial!: Material + + @input("vec4", "{1, 1, 0.04, 1}") + @hint("This is the colour of the outline when hovered") + @widget(new ColorWidget()) + hoveringColor: vec4 = new vec4(1, 1, 0.04, 1) + + @input("vec4", "{1, 1, 1, 1}") + @hint("This is the colour of the outline when pinched") + @widget(new ColorWidget()) + activatingColor: vec4 = new vec4(1, 1, 1, 1) + + @input + @hint("This is the thickness of the outline") + outlineWeight: number = 0.25 + + @input + @hint("These are the meshes that will be outlined on pinch/hover") + meshVisuals: RenderMeshVisual[] = [] + + private interactable: Interactable | null = null + private outlineEnabled: boolean = true + + private highlightMaterial: Material | undefined + + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + + this.createEvent("OnEnableEvent").bind(() => { + this.outlineEnabled = true + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.outlineEnabled = false + this.removeMaterialFromRenderMeshArray() + }) + }) + } + + init() { + this.highlightMaterial = this.targetOutlineMaterial.clone() + this.highlightMaterial.mainPass.lineWeight = this.outlineWeight + this.highlightMaterial.mainPass.lineColor = this.hoveringColor + + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + if (!this.interactable) { + throw new Error( + "No interactable was found - please ensure that a component matching the Interactable typename provided was added to this SceneObject.", + ) + } + + this.setupInteractableCallbacks() + } + + addMaterialToRenderMeshArray(): void { + if (!this.outlineEnabled) { + return + } + + for (let i = 0; i < this.meshVisuals.length; i++) { + const matCount = this.meshVisuals[i].getMaterialsCount() + + let addMaterial = true + for (let k = 0; k < matCount; k++) { + const material = this.meshVisuals[i].getMaterial(k) + + if ( + this.highlightMaterial !== undefined && + material.isSame(this.highlightMaterial) + ) { + addMaterial = false + break + } + } + + if (this.highlightMaterial !== undefined && addMaterial) { + const materials = this.meshVisuals[i].materials + materials.unshift(this.highlightMaterial) + this.meshVisuals[i].materials = materials + } + } + } + + removeMaterialFromRenderMeshArray(): void { + for (let i = 0; i < this.meshVisuals.length; i++) { + let materials = [] + + const matCount = this.meshVisuals[i].getMaterialsCount() + + for (let k = 0; k < matCount; k++) { + const material = this.meshVisuals[i].getMaterial(k) + + if ( + this.highlightMaterial !== undefined && + material.isSame(this.highlightMaterial) + ) { + continue + } + + materials.push(material) + } + + this.meshVisuals[i].clearMaterials() + + for (var k = 0; k < materials.length; k++) { + this.meshVisuals[i].addMaterial(materials[k]) + } + } + } + + setupInteractableCallbacks(): void { + validate(this.interactable) + + this.interactable.onHoverEnter.add(() => { + this.addMaterialToRenderMeshArray() + }) + + this.interactable.onHoverExit.add(() => { + this.removeMaterialFromRenderMeshArray() + }) + + this.interactable.onTriggerStart.add(() => { + this.setHighlightColor(this.activatingColor) + }) + + this.interactable.onTriggerEnd.add(() => { + this.setHighlightColor(this.hoveringColor) + }) + + this.interactable.onTriggerCanceled.add(() => { + this.setHighlightColor(this.hoveringColor) + this.removeMaterialFromRenderMeshArray() + }) + } + + private setHighlightColor(color: vec4): void { + validate(this.highlightMaterial) + + this.highlightMaterial.mainPass.lineColor = color + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts.meta new file mode 100644 index 00000000..a407561e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableOutlineFeedback.ts.meta @@ -0,0 +1,52 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 30386ad1-9315-4d77-aa3c-06b8303f1788 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + activatingColor: false + hoveringColor: false + meshVisuals: false + outlineWeight: false + targetOutlineMaterial: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - targetOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + outlineWeight: -0.250000 + meshVisuals: ! + [] + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ScriptTypes: + - + {} + InputLines: + - '// @input Asset.Material targetOutlineMaterial {"hint":"This is the material that will provide the mesh outline"}' + - '// @input vec4 hoveringColor = "{1, 1, 0.04, 1}" {"hint":"This is the colour of the outline when hovered", "widget":"color"}' + - '// @input vec4 activatingColor = "{1, 1, 1, 1}" {"hint":"This is the colour of the outline when pinched", "widget":"color"}' + - '// @input float outlineWeight = 0.25 {"hint":"This is the thickness of the outline"}' + - '// @input Component.RenderMeshVisual[] meshVisuals {"hint":"These are the meshes that will be outlined on pinch/hover"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts new file mode 100644 index 00000000..561c9905 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts @@ -0,0 +1,105 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {InteractorEvent} from "../../Core/Interactor/InteractorEvent" +import {validate} from "../../Utils/validate" + +/** + * This class provides visual feedback by squishing a specified SceneObject when it is hovered or pinched. It allows customization of the squish amount along the x-axis and y-axis. + */ +@component +export class InteractableSquishFeedback extends BaseScriptComponent { + @input + @hint("This is the SceneObject that will be squished on hover/pinch") + squishObject!: SceneObject + @input + @hint("This is how much the squishObject will squish along the y-axis") + @widget(new SliderWidget(0, 1, 0.01)) + verticalSquish: number = 0.5 + @input + @hint("This is how much the squishObject will squish along the x-axis") + @widget(new SliderWidget(0, 1.5, 0.01)) + horizontalSquish: number = 0.5 + + private interactable: Interactable | null = null + private initialPinch: number | null = null + private initialScale: vec3 | undefined + private squishScale: vec3 | undefined + private squishEnabled: boolean = true + + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + + this.createEvent("OnEnableEvent").bind(() => { + this.squishEnabled = true + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.squishEnabled = false + }) + }) + } + + init(): void { + this.initialScale = this.squishObject.getTransform().getLocalScale() + this.squishScale = new vec3( + this.initialScale.x * this.horizontalSquish, + this.initialScale.y * this.verticalSquish, + this.initialScale.z, + ) + + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + if (!this.interactable) { + throw new Error("PointerSquishVisual script requires an Interactable") + } + + this.setupInteractableCallbacks() + } + + resetScale(): void { + validate(this.initialScale) + this.squishObject.getTransform().setLocalScale(this.initialScale) + this.initialPinch = null + } + + updateSquish(event: InteractorEvent): void { + validate(this.initialScale) + validate(this.squishScale) + + const currentPinch = event.interactor.interactionStrength + if ( + currentPinch !== null && + this.initialPinch !== null && + this.squishEnabled + ) { + const pinchScale = MathUtils.remap( + Math.max(this.initialPinch, currentPinch), + Math.min(this.initialPinch, 0.95), + 1, + 0, + 1, + ) + this.squishObject + .getTransform() + .setLocalScale( + vec3.lerp(this.initialScale, this.squishScale, pinchScale), + ) + } + } + + setupInteractableCallbacks(): void { + validate(this.interactable) + + this.interactable.onHoverEnter.add((event) => { + this.initialPinch = event.interactor.interactionStrength + }) + this.interactable.onHoverUpdate.add(this.updateSquish.bind(this)) + this.interactable.onHoverExit.add(this.resetScale.bind(this)) + this.interactable.onTriggerCanceled.add(this.resetScale.bind(this)) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts.meta new file mode 100644 index 00000000..ecc5b5c7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/InteractableSquishFeedback.ts.meta @@ -0,0 +1,45 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6ed73b72-7d5d-4687-903f-86235c78f430 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + horizontalSquish: false + squishObject: false + verticalSquish: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - squishObject: ! 00000000-0000-0000-0000-000000000000 + verticalSquish: 0.500000 + horizontalSquish: ! 1.000000 + ScriptTypes: + - + {} + InputLines: + - '// @input SceneObject squishObject {"hint":"This is the SceneObject that will be squished on hover/pinch"}' + - '// @input float verticalSquish = 0.5 {"hint":"This is how much the squishObject will squish along the y-axis", "widget":"slider", "min":0, "max":1, "step":0.01}' + - '// @input float horizontalSquish = 0.5 {"hint":"This is how much the squishObject will squish along the x-axis", "widget":"slider", "min":0, "max":1.5, "step":0.01}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts new file mode 100644 index 00000000..64f4c9a4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts @@ -0,0 +1,47 @@ +/** + * This class adapts a SceneObject's transform to a ScreenTransform if it is a child of a Canvas. It preserves the object's position and rotation during the transformation. + */ +@component +export class ScreenTransformAdapter extends BaseScriptComponent { + onAwake(): void { + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + }) + } + + init(): void { + const sceneObject = this.getSceneObject() + const transform = sceneObject.getTransform() + const parent = sceneObject.getParent() + + if ( + isNull(parent) || + isNull(parent!.getComponent("Component.Canvas")) || + isNull(parent!.getComponent("Component.ScreenTransform")) + ) { + return + } + + const canvas = sceneObject.getComponent("Component.Canvas") + + if (!isNull(canvas)) { + const perservedPosition = transform.getLocalPosition() + const perservedRotation = transform.getLocalRotation() + + const size = canvas.getSize() + canvas.destroy() + const screenTransform = sceneObject.createComponent( + "Component.ScreenTransform", + ) + screenTransform.anchors = Rect.create(0, 0, 0, 0) + screenTransform.offsets.setSize(size) + + screenTransform.position = perservedPosition + screenTransform.rotation = perservedRotation + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts.meta new file mode 100644 index 00000000..97ee1d03 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScreenTransformAdapter.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! dd77caed-15b6-42a7-82bc-14dc99147d28 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts new file mode 100644 index 00000000..ef56a129 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts @@ -0,0 +1,137 @@ +import animate, {CancelSet} from "../../Utils/animate" + +import {Interactable} from "../Interaction/Interactable/Interactable" +import {ScrollBar} from "../UI/ScrollBar/ScrollBar" +import {lerp} from "../../Utils/mathUtils" +import {validate} from "../../Utils/validate" + +const BLENDSHAPE_NAME: string = "Size" +const SCALE_TWEEN_DURATION: number = 0.2 +const HOVER_SCALE: number = 0.75 + +/** + * This class provides visual feedback for a scrollbar by adjusting its size and scale based on interaction events such as hover. It uses animation utilities to smoothly transition between states. + */ +@component +export class ScrollBarFeedback extends BaseScriptComponent { + @input + scrollbarObject!: SceneObject + + private renderMeshVisual: RenderMeshVisual | undefined + private size: number = 0 + + private interactable: Interactable | null = null + private scrollbar: ScrollBar | null = null + private isHovering: boolean = false + + private scaleCancel = new CancelSet() + + onAwake(): void { + this.init() + } + + private init = (): void => { + this.interactable = this.scrollbarObject.getComponent( + Interactable.getTypeName(), + ) + if (isNull(this.interactable)) { + throw new Error("Interactable component not found in this entity!") + } + + this.scrollbar = this.scrollbarObject.getComponent(ScrollBar.getTypeName()) + if (isNull(this.scrollbar)) { + throw new Error("ScrollBar component not found in this entity!") + } + + this.renderMeshVisual = this.getSceneObject().getComponent( + "Component.RenderMeshVisual", + ) + if (this.renderMeshVisual === undefined) { + throw new Error("RenderMeshVisual component not found in this entity!") + } + + this.size = this.renderMeshVisual.getBlendShapeWeight(BLENDSHAPE_NAME) + this.renderMeshVisual.mainPass.size = this.size + + this.createEvent("OnStartEvent").bind(this.setupInteractableCallbacks) + } + + private setupInteractableCallbacks = () => { + validate(this.interactable) + this.interactable.onHoverEnter.add(this.initializeHoverState) + this.interactable.onHoverExit.add(this.resetHoverState) + this.interactable.onTriggerStart.add(this.initializeTriggerState) + this.interactable.onTriggerEnd.add(this.resetTriggerState) + this.interactable.onTriggerUpdate.add(this.onTriggerUpdate) + } + + private initializeHoverState = (): void => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.status = 1.0 + this.renderMeshVisual.mainPass.scale = HOVER_SCALE + this.renderMeshVisual.mainPass.offset = this.getPercentage() + this.isHovering = true + } + } + + private resetHoverState = (): void => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.status = 0.0 + this.renderMeshVisual.mainPass.scale = 0.0 + this.isHovering = false + } + } + + private initializeTriggerState = (): void => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.offset = this.getPercentage() + this.tweenScale(0.75, 1.0) + } + } + + private resetTriggerState = (): void => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.gradientScale = 0.03 + this.tweenScale(1.0, 0.75) + } + } + + private onTriggerUpdate = (): void => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.offset = this.getPercentage() + } + } + + private tweenScale = ( + currentScale: number, + targetScale: number, + endCallback = () => {}, + ): void => { + if (this.scaleCancel) this.scaleCancel.cancel() + animate({ + duration: SCALE_TWEEN_DURATION * Math.abs(targetScale - currentScale), + update: (t: number) => { + if (this.renderMeshVisual !== undefined) { + this.renderMeshVisual.mainPass.scale = lerp( + currentScale, + targetScale, + t, + ) + } + }, + ended: endCallback, + cancelSet: this.scaleCancel, + }) + } + + getPercentage = (): number => { + validate(this.scrollbar) + return MathUtils.remap( + this.scrollbar.scrollPercentage, + 0.0, + 1.0, + 0.03, + 0.97, + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts.meta new file mode 100644 index 00000000..8168d282 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ScrollBarFeedback.ts.meta @@ -0,0 +1,38 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 37bf0d33-fcd6-4d18-8150-19002357972e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 37bf0d33-fcd6-4d18-8150-19002357972e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 9f82af0d-11a1-414e-a2b1-e5c73b1a7566 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + scrollbarObject: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - scrollbarObject: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input SceneObject scrollbarObject diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts new file mode 100644 index 00000000..5e64de78 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts @@ -0,0 +1,95 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {Slider} from "../../Components/UI/Slider/Slider" +import {validate} from "../../Utils/validate" + +const SLIDER_LEVEL_MIN: number = 0.1 +const SLIDER_LEVEL_MAX: number = 0.9 + +/** + * This class provides visual feedback for a slider component. It manages the appearance of the slider's knob and track based on interaction events and the slider's value. + */ +@component +export class SliderFeedback extends BaseScriptComponent { + @input + renderMeshVisual!: RenderMeshVisual + + @input + knobObject!: SceneObject + + private interactable: Interactable | null = null + private slider: Slider | null = null + private currentValue: number = 0 + + onAwake(): void { + this.init() + } + + private init = (): void => { + if (isNull(this.renderMeshVisual)) { + throw new Error("No RenderMeshVisual component attached to this entity!") + } + + if (isNull(this.knobObject)) { + throw new Error("No knobObject attached to this entity!") + } + + this.renderMeshVisual.mainMaterial = this.renderMeshVisual + .getMaterial(0) + .clone() + + this.interactable = this.knobObject.getComponent(Interactable.getTypeName()) + + if (isNull(this.interactable)) { + throw new Error("Interactable component not found in this entity!") + } + + this.slider = this.getSceneObject().getComponent(Slider.getTypeName()) + + if (isNull(this.slider)) { + throw new Error("No Slider component attached to this entity!") + } + + this.createEvent("OnStartEvent").bind(() => { + validate(this.slider) + validate(this.renderMeshVisual) + this.currentValue = this.slider.startValue + + this.renderMeshVisual.mainPass.level = this.getSliderLevelFromValue( + this.slider.currentValue ?? 0, + ) + + this.setupSliderCallbacks() + }) + } + + private getSliderLevelFromValue = (value: number): number => { + validate(this.slider) + if (value <= this.slider.minValue) { + return 0 + } else if (value >= this.slider.maxValue) { + return 1 + } else { + const progress = + (value - this.slider.minValue) / + (this.slider.maxValue - this.slider.minValue) + return SLIDER_LEVEL_MIN + (SLIDER_LEVEL_MAX - SLIDER_LEVEL_MIN) * progress + } + } + + private setupSliderCallbacks = (): void => { + validate(this.interactable) + validate(this.slider) + validate(this.renderMeshVisual) + this.interactable.onTriggerStart.add(() => { + this.renderMeshVisual.mainPass.pinch = 1.0 + this.renderMeshVisual.mainPass.level = this.currentValue + }) + this.interactable.onTriggerEnd.add(() => { + this.renderMeshVisual.mainPass.pinch = 0.0 + }) + this.slider.onValueUpdate.add((value) => { + this.currentValue = value + this.renderMeshVisual.mainPass.level = this.getSliderLevelFromValue(value) + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts.meta new file mode 100644 index 00000000..670556c0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/SliderFeedback.ts.meta @@ -0,0 +1,42 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! ff001284-48a2-4fa7-9458-50a16e591aa9 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + knobObject: false + renderMeshVisual: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - renderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + knobObject: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input Component.RenderMeshVisual renderMeshVisual + - // @input SceneObject knobObject + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts new file mode 100644 index 00000000..da8fcb53 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts @@ -0,0 +1,146 @@ +import {Interactable} from "../Interaction/Interactable/Interactable" +import {ToggleButton} from "../UI/ToggleButton/ToggleButton" +import {validate} from "../../Utils/validate" + +/** + * This class provides visual feedback for a {@link ToggleButton} by changing the material of the provided {@link RenderMeshVisual}s when the button is toggled on or off. + */ +@component +export class ToggleFeedback extends BaseScriptComponent { + @input + toggledOffMaterial!: Material + @input + toggledOffSelectMaterial!: Material + @input + toggledOnMaterial!: Material + @input + toggledOnSelectMaterial!: Material + @input + disabledMaterial!: Material + @input + meshVisuals: RenderMeshVisual[] = [] + + private toggleButton: ToggleButton | null = null + private interactable: Interactable | null = null + + private materials: Material[] = [] + + onAwake(): void { + this.materials = [ + this.toggledOffMaterial, + this.toggledOffSelectMaterial, + this.toggledOnMaterial, + this.toggledOnSelectMaterial, + this.disabledMaterial, + ] + + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.init() + }) + } + + init(): void { + this.toggleButton = this.getSceneObject().getComponent( + ToggleButton.getTypeName(), + ) + + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + + if (this.interactable === null || this.interactable === undefined) { + throw new Error( + "UIToggleButtonCustomize script requires an Interactable on the ToggleButton", + ) + } + + this.setupInteractableCallbacks(this.interactable) + } + + private removeMaterials(): void { + for (let i = 0; i < this.meshVisuals.length; i++) { + let materials = [] + + const matCount = this.meshVisuals[i].getMaterialsCount() + + for (let k = 0; k < matCount; k++) { + const material = this.meshVisuals[i].getMaterial(k) + + if (this.materials.includes(material)) { + continue + } + + materials.push(material) + } + + this.meshVisuals[i].clearMaterials() + + for (var k = 0; k < materials.length; k++) { + this.meshVisuals[i].addMaterial(materials[k]) + } + } + } + + // Changes the material of each RenderMeshVisual provided. + private changeMeshes(material: Material | undefined): void { + validate(material) + + this.removeMaterials() + + this.meshVisuals.forEach((mesh) => { + mesh.addMaterial(material) + }) + } + + /** + * Changes the materials depending on the {@link ToggleButton}'s status. + * @param materialOn - The material to be used if on. + * @param materialOff - The material to be used if off. + */ + private changeToggleOnMesh( + materialOn: Material | undefined, + materialOff: Material | undefined, + ) { + validate(this.toggleButton) + this.changeMeshes(this.toggleButton.isToggledOn ? materialOn : materialOff) + } + + // Sets up interactable callbacks. + setupInteractableCallbacks(interactable: Interactable): void { + validate(this.toggleButton) + + interactable.onTriggerStart.add(() => { + this.changeToggleOnMesh( + this.toggledOnSelectMaterial, + this.toggledOffSelectMaterial, + ) + }) + + interactable.onTriggerCanceled.add(() => { + this.changeToggleOnMesh(this.toggledOnMaterial, this.toggledOffMaterial) + }) + + this.toggleButton.createEvent("OnEnableEvent").bind(() => { + this.changeToggleOnMesh(this.toggledOnMaterial, this.toggledOffMaterial) + }) + + this.toggleButton.createEvent("OnDisableEvent").bind(() => { + this.changeMeshes(this.disabledMaterial) + }) + + this.toggleButton.onStateChanged.add((isToggledOn) => { + if (this.toggleButton?.enabled === false) { + this.changeMeshes(this.disabledMaterial) + return + } + + this.changeMeshes( + isToggledOn ? this.toggledOnMaterial : this.toggledOffMaterial, + ) + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts.meta new file mode 100644 index 00000000..dd4cc605 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Helpers/ToggleFeedback.ts.meta @@ -0,0 +1,55 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c2971054-0a35-4c5a-8cc0-f6ba384f7c3c + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + disabledMaterial: false + meshVisuals: false + toggledOffMaterial: false + toggledOffSelectMaterial: false + toggledOnMaterial: false + toggledOnSelectMaterial: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + [] + ScriptTypes: + - + {} + InputLines: + - // @input Asset.Material toggledOffMaterial + - // @input Asset.Material toggledOffSelectMaterial + - // @input Asset.Material toggledOnMaterial + - // @input Asset.Material toggledOnSelectMaterial + - // @input Asset.Material disabledMaterial + - "// @input Component.RenderMeshVisual[] meshVisuals" + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts new file mode 100644 index 00000000..2e7115b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts @@ -0,0 +1,148 @@ +import BillboardController, { + BillboardConfig, + RotationAxis, +} from "./BillboardController" + +/** + * Billboard allows an object to rotate to face the camera. + */ +@component +export class Billboard extends BaseScriptComponent { + private controller!: BillboardController + + @ui.group_start("Billboard") + @input + private _xAxisEnabled: boolean = false + @input + private _yAxisEnabled: boolean = true + @input + private _zAxisEnabled: boolean = false + @input + @hint("How big the angle must be to start rotating about that axis") + private _axisBufferDegrees: vec3 = new vec3(0, 0, 0) + @input + @hint( + "How fast the target should rotate to follow camera, instant follow = 1, delay follow = 0.1", + ) + private _axisEasing: vec3 = new vec3(1, 1, 1) + /** + * @deprecated This property no longer changes the speed of the follow rotation. Use _axisEasing instead. + */ + @input + @hint( + "Decrecated. Please use the property Axis Easing to adjust the rotation speed", + ) + duration: number = 0.033 + + @ui.group_end + onAwake(): void { + const billboardConfig: BillboardConfig = { + script: this, + target: this.getSceneObject(), + xAxisEnabled: this._xAxisEnabled, + yAxisEnabled: this._yAxisEnabled, + zAxisEnabled: this._zAxisEnabled, + axisBufferDegrees: this._axisBufferDegrees, + axisEasing: this._axisEasing, + } + this.controller = new BillboardController(billboardConfig) + } + + /** + * Immediately resets the SceneObject to the rotation accroding to inputs regardless of easing. + */ + snapToOffsetRotation(): void { + this.controller.resetRotation() + } + + /** + * @returns if the SceneObject billboards about the x-axis. + */ + get xAxisEnabled(): boolean { + return this._xAxisEnabled + } + + /** + * @param enabled - defines if the SceneObject billboards about the x-axis. + */ + set xAxisEnabled(enabled: boolean) { + if (enabled === this._xAxisEnabled) { + return + } + this._xAxisEnabled = enabled + this.controller.enableAxisRotation(RotationAxis.X, enabled) + } + + /** + * @returns if the SceneObject billboards about the y-axis. + */ + get yAxisEnabled(): boolean { + return this._yAxisEnabled + } + + /** + * @param enabled - defines if the SceneObject billboards about the y-axis. + */ + set yAxisEnabled(enabled: boolean) { + if (enabled === this._yAxisEnabled) { + return + } + this._yAxisEnabled = enabled + this.controller.enableAxisRotation(RotationAxis.Y, enabled) + } + + /** + * @returns if the SceneObject billboards about the z-axis. + */ + get zAxisEnabled(): boolean { + return this._zAxisEnabled + } + + /** + * @param enabled - defines if the SceneObject billboards about the z-axis. + */ + set zAxisEnabled(enabled: boolean) { + if (enabled === this._zAxisEnabled) { + return + } + this._zAxisEnabled = enabled + this.controller.enableAxisRotation(RotationAxis.Z, enabled) + } + + /** + * @param easing - the vector defining the easing for each axis. For instant follow, use easing = (1,1,1). + */ + set axisEasing(easing: vec3) { + if (easing.equal(this._axisEasing)) { + return + } + this._axisEasing = easing + this.controller.axisEasing = easing + } + + /** + * @returns the vector defining the easing for each axis. + */ + get axisEasing(): vec3 { + return this._axisEasing + } + + /** + * @param bufferDegrees - the vector defining the buffer for each axis. + */ + set axisBufferDegrees(bufferDegrees: vec3) { + if (bufferDegrees.equal(this._axisBufferDegrees)) { + return + } + + this._axisBufferDegrees = bufferDegrees + this.controller.axisBufferDegrees = bufferDegrees + } + + /** + * @returns the vector defining the buffer for each axis. + */ + get axisBufferDegrees(): vec3 { + return this._axisBufferDegrees + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts.meta new file mode 100644 index 00000000..52b4b109 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/Billboard.ts.meta @@ -0,0 +1,56 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! b5593251-a0da-4491-8561-2e0dccd715bc + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b5593251-a0da-4491-8561-2e0dccd715bc + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 85e33322-8dc6-43ca-a012-c99785598a0b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _axisBufferDegrees: false + _axisEasing: false + _xAxisEnabled: false + _yAxisEnabled: false + _zAxisEnabled: false + duration: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - duration: 0.033000 + _xAxisEnabled: false + _yAxisEnabled: true + _zAxisEnabled: false + _axisBufferDegrees: ! {x: 0.000000, y: 0.000000, z: 0.000000} + _axisEasing: ! {x: 1.000000, y: 1.000000, z: 1.000000} + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Billboard"}' + - // @input bool _xAxisEnabled + - // @input bool _yAxisEnabled = true + - // @input bool _zAxisEnabled + - '// @input vec3 _axisBufferDegrees {"hint":"How big the angle must be to start rotating about that axis"}' + - '// @input vec3 _axisEasing {"hint":"How fast the target should rotate to follow camera, instant follow = 1, delay follow = 0.1"}' + - '// @input float duration = 0.033 {"hint":"Decrecated. Please use the property Axis Easing to adjust the rotation speed"}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts new file mode 100644 index 00000000..b9d49616 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts @@ -0,0 +1,254 @@ +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import BillboardRotationCalculator, { + ALMOST_ONE, +} from "./BillboardRotationCalculator" + +export type BillboardConfig = { + script: ScriptComponent + target: SceneObject + xAxisEnabled?: boolean + yAxisEnabled?: boolean + zAxisEnabled?: boolean + // We allow the user to set the buffer in degrees for ease of customizability as we expect this to be a field in a Custom Component. + axisBufferDegrees?: vec3 + // Easing causes the target to have a slight 'lag' in movement. This vector is unitless. + // As an example, an entry of y=0.1 would cause the target to only rotate 10% of the desired angle per update about the y-axis. + axisEasing?: vec3 + // Duration is the expected duration of time between updates but can be configured, lower duration leads to faster rotation. + duration?: number +} + +export enum RotationAxis { + X, + Y, + Z, +} +const rotationAxes = [RotationAxis.X, RotationAxis.Y, RotationAxis.Z] +const VEC_UP = vec3.up() +const VEC_DOWN = vec3.down() + +const TAG = "BillboardController" + +export default class BillboardController { + private worldCameraProvider = WorldCameraFinderProvider.getInstance() + + // The angles along each axes will be calculated separately + private xAxisCalculator: BillboardRotationCalculator + private yAxisCalculator: BillboardRotationCalculator + private zAxisCalculator: BillboardRotationCalculator + + // The target will be the SceneObject to rotate. + private target: SceneObject + private targetTransform: Transform + + // The target will rotate according to the camera's position for X/Y-axes rotation, camera's rotation for Z-axis rotation. + private cameraTransform: Transform = this.worldCameraProvider.getTransform() + + private updateEvent: SceneEvent + + // We wait until the first update to set the rotation due to an inaccuracy of transforms on first frame. + private firstUpdate = true + + constructor(config: BillboardConfig) { + this.target = config.target + this.targetTransform = this.target.getTransform() + + // Set up the rotation calculators to rotate along the axes with specific behavior. + this.xAxisCalculator = new BillboardRotationCalculator({ + axis: RotationAxis.X, + axisEnabled: config.xAxisEnabled, + axisBufferRadians: + MathUtils.DegToRad * (config.axisBufferDegrees?.x ?? 0), + axisEasing: config.axisEasing?.x ?? 1, + }) + this.yAxisCalculator = new BillboardRotationCalculator({ + axis: RotationAxis.Y, + axisEnabled: config.yAxisEnabled, + axisBufferRadians: + MathUtils.DegToRad * (config.axisBufferDegrees?.y ?? 0), + axisEasing: config.axisEasing?.y ?? 1, + }) + this.zAxisCalculator = new BillboardRotationCalculator({ + axis: RotationAxis.Z, + axisEnabled: config.zAxisEnabled, + axisBufferRadians: + MathUtils.DegToRad * (config.axisBufferDegrees?.z ?? 0), + axisEasing: config.axisEasing?.z ?? 1, + }) + this.updateEvent = config.script.createEvent("UpdateEvent") + this.updateEvent.bind(this.onUpdate.bind(this)) + } + + public enableAxisRotation(axis: RotationAxis, enabled: boolean): void { + let axisCalculator: BillboardRotationCalculator + + switch (axis) { + case RotationAxis.X: + axisCalculator = this.xAxisCalculator + break + case RotationAxis.Y: + axisCalculator = this.yAxisCalculator + break + case RotationAxis.Z: + axisCalculator = this.zAxisCalculator + break + } + + axisCalculator.axisEnabled = enabled + } + + public get axisEasing(): vec3 { + return new vec3( + this.xAxisCalculator.axisEasing, + this.yAxisCalculator.axisEasing, + this.zAxisCalculator.axisEasing + ) + } + public set axisEasing(easing: vec3) { + this.xAxisCalculator.axisEasing = easing.x + this.yAxisCalculator.axisEasing = easing.y + this.zAxisCalculator.axisEasing = easing.z + } + + public get axisBufferDegrees(): vec3 { + return new vec3( + MathUtils.RadToDeg * this.xAxisCalculator.axisBufferRadians, + MathUtils.RadToDeg * this.yAxisCalculator.axisBufferRadians, + MathUtils.RadToDeg * this.zAxisCalculator.axisBufferRadians + ) + } + public set axisBufferDegrees(bufferDegrees: vec3) { + this.xAxisCalculator.axisBufferRadians = + MathUtils.DegToRad * bufferDegrees.x + this.yAxisCalculator.axisBufferRadians = + MathUtils.DegToRad * bufferDegrees.y + this.zAxisCalculator.axisBufferRadians = + MathUtils.DegToRad * bufferDegrees.z + } + + // The following functions aid with getting unit vectors relative to the target's current rotation. + private getForwardVector() { + return this.targetTransform.forward + } + + private getUpVector() { + return this.targetTransform.up + } + + private getRightVector() { + return this.targetTransform.right + } + + // Returns a unit vector aligned with the line from the target's center to the camera for X/Y-axes rotation. + private getTargetToCameraVector() { + return this.cameraTransform + .getWorldPosition() + .sub(this.targetTransform.getWorldPosition()) + .normalize() + } + + // Returns the up vector of a camera for Z-axis rotation. + private getCameraUpVector() { + return this.cameraTransform.up + } + + // Rotates the target about each enabled axis separately. + private onUpdate(): void { + if (this.firstUpdate) { + this.firstUpdate = false + this.resetRotation() + + return + } + + for (const axis of rotationAxes) { + let rotationQuaternion: quat + switch (axis) { + case RotationAxis.X: + rotationQuaternion = this.xAxisCalculator.getRotation( + this.getRightVector(), + this.getForwardVector(), + this.getTargetToCameraVector(), + this.getUpVector() + ) + break + case RotationAxis.Y: + { + let upVector: vec3 + if (this.getUpVector().dot(VEC_DOWN) > ALMOST_ONE) { + upVector = VEC_DOWN + } else { + upVector = VEC_UP + } + rotationQuaternion = this.yAxisCalculator.getRotation( + upVector, + this.getForwardVector(), + this.getTargetToCameraVector(), + this.getRightVector().uniformScale(-1) + ) + } + break + case RotationAxis.Z: + rotationQuaternion = this.zAxisCalculator.getRotation( + this.getForwardVector(), + this.getUpVector(), + this.getCameraUpVector(), + this.getRightVector() + ) + break + default: + throw new Error(`Invalid axis: ${axis}`) + } + + this.targetTransform.setWorldRotation( + rotationQuaternion.multiply(this.targetTransform.getWorldRotation()) + ) + } + } + + public resetRotation(): void { + for (const axis of rotationAxes) { + let rotationQuaternion: quat + switch (axis) { + case RotationAxis.X: + rotationQuaternion = this.xAxisCalculator.resetRotation( + this.getRightVector(), + this.getForwardVector(), + this.getTargetToCameraVector(), + this.getUpVector() + ) + break + case RotationAxis.Y: + { + let upVector: vec3 + if (this.getUpVector().dot(VEC_DOWN) > ALMOST_ONE) { + upVector = VEC_DOWN + } else { + upVector = VEC_UP + } + rotationQuaternion = this.yAxisCalculator.resetRotation( + upVector, + this.getForwardVector(), + this.getTargetToCameraVector(), + this.getRightVector().uniformScale(-1) + ) + } + break + case RotationAxis.Z: + rotationQuaternion = this.zAxisCalculator.resetRotation( + this.getForwardVector(), + this.getUpVector(), + this.getCameraUpVector(), + this.getRightVector() + ) + break + default: + throw new Error(`Invalid axis: ${axis}`) + } + + this.targetTransform.setWorldRotation( + rotationQuaternion.multiply(this.targetTransform.getWorldRotation()) + ) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts.meta new file mode 100644 index 00000000..0bcf8aba --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardController.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 209152d4-efca-4682-99c5-2943bc96e7b0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 209152d4-efca-4682-99c5-2943bc96e7b0 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c39dbf8c-0122-48d3-a28b-06f5121abbe9 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts new file mode 100644 index 00000000..d7dba5f3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts @@ -0,0 +1,179 @@ +import {RotationAxis} from "./BillboardController" + +export type RotationCalculatorConfig = { + axis: RotationAxis + axisEnabled?: boolean + axisBufferRadians?: number + axisEasing?: number +} + +const TAG = "BillboardRotationCalculator" + +const DEFAULT_DURATION = 0.033 +export const ALMOST_ONE = 1 - Number.MIN_VALUE + +/** + * BillboardRotationCalculator is used to calculate the quaternion to rotate an object by to align with a new vector along an axis. + * More specifically, this calculator is used along a SceneObject's local X/Z-axes and global Y-axis. + * These calculators only take in vec3's as SceneObject manipulation is handled in BillboardController. + */ +export default class BillboardRotationCalculator { + private axis: RotationAxis + private _axisEnabled: boolean = false + + private _axisBufferRadians: number = 0 + + // Use an estimated time for the duration between each update to prevent FPS issues from slowing down billboarding effect. + private duration: number = 0 + private _axisEasing: number = 1 + + constructor(config: RotationCalculatorConfig) { + this.axis = config.axis + this.axisEnabled = config.axisEnabled ?? false + this.axisBufferRadians = config.axisBufferRadians ?? 0 + this.axisEasing = config.axisEasing ?? 1 + } + + get axisEnabled(): boolean { + return this._axisEnabled + } + set axisEnabled(enabled: boolean) { + this._axisEnabled = enabled + } + + get axisBufferRadians(): number { + return this._axisBufferRadians + } + set axisBufferRadians(radians: number) { + this._axisBufferRadians = radians + } + + get axisEasing(): number { + return this._axisEasing + } + set axisEasing(easing: number) { + this._axisEasing = easing + } + + // Returns the quaternion representing the rotation necessary for the target to align with the camera. + private calculateRotationQuaternion( + rotationRadians: number, + axisVector: vec3 + ): quat { + let rotationQuaternion: quat = quat.angleAxis(rotationRadians, axisVector) + + return rotationQuaternion + } + + // Returns the exact angle to rotate the target by along the given axis. + // This function will include the logic for interpolation / buffer tolerances later. + private calculateAxisRotation(angle: number): number { + if (!this.axisEnabled || Math.abs(angle) < this.axisBufferRadians) { + return 0 + } + + // Calculate the angle to rotate just enough to keep the camera within the buffer cone. + let bufferAngle = angle - Math.sign(angle) * this.axisBufferRadians + + if (this.axisEasing !== 1) { + // If more time has passed than the expected duration, we should rotate more to prevent FPS issues slowing down animations. + let timeRatio = getDeltaTime() / DEFAULT_DURATION + return MathUtils.lerp(0, bufferAngle, this.axisEasing * timeRatio) + } else { + // If we are not easing along this axis, just return the angle to maintain buffer zone. + return bufferAngle + } + } + + /** + * Returns the angle about specified axis to rotate the target to align with the camera. + * By projecting the forward/up vector onto planes defined by the relevant axis as the normal, we can separately calculate the angles of each axis. + * The separate calculations allow for each axis to have its own buffer / interpolation values. + * Because the user is expected to walk around freely, we use local X and Z axes for calculation, but global Y axis as the user's perception of 'up' is constant. + */ + private calculateAxisAngle( + axisVector: vec3, + forwardVector: vec3, + cameraVector: vec3, + originVector: vec3 + ): number { + let forwardVectorOnPlane = forwardVector.projectOnPlane(axisVector) + let cameraVectorOnPlane = cameraVector.projectOnPlane(axisVector) + + let angle = forwardVectorOnPlane.angleTo(cameraVectorOnPlane) + + // Origin vector describes the position on the unit circle where radian = 0. + // We use this vector to compare if we should flip the sign of the angle to rotate in the correct direction. + let forwardAngleOnPlane = originVector.angleTo(forwardVectorOnPlane) + let cameraAngleOnPlane = originVector.angleTo(cameraVectorOnPlane) + if (forwardAngleOnPlane > cameraAngleOnPlane) { + angle = -angle + } + + return angle + } + + // Rotates the target about each enabled axis separately. + public getRotation( + axisVector: vec3, + forwardVector: vec3, + cameraVector: vec3, + originVector: vec3 + ): quat { + if (this.skipRotation()) { + return quat.quatIdentity() + } + + if (axisVector.dot(forwardVector) > ALMOST_ONE) { + return quat.quatIdentity() + } + let angle = this.calculateAxisAngle( + axisVector, + forwardVector, + cameraVector, + originVector + ) + let rotationRadians = this.calculateAxisRotation(angle) + + let rotationQuaternion = this.calculateRotationQuaternion( + rotationRadians, + axisVector + ) + + return rotationQuaternion + } + + /** + * Used to snap the target immediately into proper rotation according to configuration. + * @param axisVector - the vector to rotate about + * @param forwardVector - the forward vector of the target + * @param cameraVector - the vector from camera to target + * @param originVector - the origin of rotation as a reference to ensure proper rotation + * @returns the rotation about the given axis to align the target's forward vector with the camera. + */ + public resetRotation( + axisVector: vec3, + forwardVector: vec3, + cameraVector: vec3, + originVector: vec3 + ) { + if (axisVector.dot(forwardVector) > ALMOST_ONE) { + return quat.quatIdentity() + } + let angle = this.calculateAxisAngle( + axisVector, + forwardVector, + cameraVector, + originVector + ) + + return this.axisEnabled + ? this.calculateRotationQuaternion(angle, axisVector) + : quat.quatIdentity() + } + + // Returns if the controller should skip rotating about the specified axis. + private skipRotation(): boolean { + return !this.axisEnabled + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts.meta new file mode 100644 index 00000000..f914720b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Billboard/BillboardRotationCalculator.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 793b9d0a-4564-4a14-a948-0dd076981b76 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 793b9d0a-4564-4a14-a948-0dd076981b76 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 254b5100-c2f8-422a-83f1-b36ed99634ca + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts new file mode 100644 index 00000000..d9f00b82 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts @@ -0,0 +1,657 @@ +import { + FieldTargetingMode, + HandInteractor, +} from "../../../Core/HandInteractor/HandInteractor" +import {InteractorTriggerType} from "../../../Core/Interactor/Interactor" +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {HandInputData} from "../../../Providers/HandInputData/HandInputData" +import {HandType} from "../../../Providers/HandInputData/HandType" +import {HandVisuals} from "../../../Providers/HandInputData/HandVisuals" +import TrackedHand from "../../../Providers/HandInputData/TrackedHand" +import SIKLogLevelProvider from "../../../Providers/InteractionConfigurationProvider/SIKLogLevelProvider" +import animate, {CancelSet} from "../../../Utils/animate" +import {LensConfig} from "../../../Utils/LensConfig" +import {validate} from "../../../Utils/validate" +import {GlowEffectViewModel} from "./GlowEffectViewModel" +import {HandVisualSelection} from "./HandVisual" + +const TAG = "GlowEffectView" + +const GLOW_QUAD_WORLD_SCALE = new vec3(0.3, 0.3, 0.3) +const PINCH_BASE_BONUS_RATIO = 0.8 +const PINCH_ANIMATION_DURATION = 0.3 + +const PINCH_STRENGTH_NEAR_PINCH_EXIT_THRESHOLD = 0.2 +const PINCH_STRENGTH_NEAR_PINCH_ENTER_THRESHOLD = 0.5 + +const HOVER_COLOR = new vec4(216 / 256, 163 / 256, 4 / 256, 1) +const TRIGGER_COLOR = new vec4(247 / 256, 231 / 256, 90 / 256, 1) +const BEHIND_COLOR = new vec4(1.0, 0.0, 0.0, 1) + +const HAND_MESH_MATERIAL_BRIGHTNESS_FARFIELD = 1.0 +const HAND_MESH_MATERIAL_BRIGHTNESS_NEARFIELD = 1.0 +const HAND_MESH_MATERIAL_FULL_BRIGHTNESS_DISTANCE_NEARFIELD = 0.2 +const HAND_MESH_MATERIAL_BRIGHTNESS_TRIGGERED = 2.0 +const GLOW_MATERIAL_START_BRIGHTNESS_DISTANCE_NEARFIELD = 0.3 +const GLOW_MATERIAL_FULL_BRIGHTNESS_DISTANCE_NEARFIELD = 0.8 +const GLOW_MATERIAL_BRIGHTNESS_NEARFIELD = 2.0 +const GLOW_MATERIAL_BRIGHTNESS_TRIGGERED = 3.0 +const GLOW_MATERIAL_BRIGHTNESS_BEHIND_MIN = 2.0 +const GLOW_MATERIAL_BRIGHTNESS_BEHIND_MAX = 1.0 +const GLOW_MATERIAL_DISTANCE_BEHIND_MIN = 0.93 +const GLOW_MATERIAL_DISTANCE_BEHIND_MAX = 1.0 +const GLOW_MATERIAL_DEFAULT_BRIGHTNESS = 0.5 + +/* + * This determines what we consider to be "palm facing the camera", so a smaller value + * means that your palm would need to be to be looking more "directly" at the camera + * for us to consider it to be "facing the camera" + */ +const HAND_FACING_CAMERA_THRESHOLD_DEGREES = 90 + +const VEC3_UP = vec3.up() + +export type GlowEffectViewConfig = { + handType: HandType + unitPlaneMesh: RenderMesh + tipGlowMaterial: Material + idleColor: vec4 + pinchDownColor: vec4 + tapProximityThreshold: number + pinchTexture: Texture + tapTexture: Texture + tipGlowRenderOrder: number + handInteractor: HandInteractor + visualSelection: HandVisualSelection + handOutlineMaterial: Material + handOccluderMaterial: Material + shouldThumbPokeGlow: boolean +} + +/** + * GlowEffectView controls the glow effect that happens when pinching and tapping. + * + * I did not extend View class because while this q + * acts like a View in the sense that it is messing with UI/visuals, it does so through SceneObjects and textures which are passed + * in as parameters, instead of needing its own SceneObject hierarchy to be added. + */ +export class GlowEffectView { + private sikLogLevelProvider = SIKLogLevelProvider.getInstance() + + private updateDispatcher = LensConfig.getInstance().updateDispatcher + private handProvider: HandInputData = HandInputData.getInstance() + + private tapGlowEnabled: boolean = + this.handProvider.getDominantHand().handType === this.config.handType + private hand: TrackedHand = this.handProvider.getHand( + this.config.handType as HandType + ) + private handVisuals: HandVisuals | null = this.hand.getHandVisuals() + private indexTipSceneObject: SceneObject | undefined = + this.handVisuals?.indexTip + private thumbTipSceneObject: SceneObject | undefined = + this.handVisuals?.thumbTip + + // handToTap is the hand NOT passed to this class + private handToTap: TrackedHand = this.handProvider.getHand( + this.config.handType === "left" ? "right" : "left" + ) + + private camera = WorldCameraFinderProvider.getInstance() + + /* + * Pinch glow effect uses a quad with glow material and texture on index + * and thumb tip, both billboarded towards the camera + */ + private indexQuadSceneObject: SceneObject = this.setupTipQuadSceneObject( + this.indexTipSceneObject, + "indexTipQuadSceneObject" + ) + private indexQuadTransform: Transform = + this.indexQuadSceneObject.getTransform() + private thumbQuadSceneObject: SceneObject = this.setupTipQuadSceneObject( + this.thumbTipSceneObject, + "thumbTipQuadSceneObject" + ) + private thumbQuadTransform: Transform = + this.thumbQuadSceneObject.getTransform() + + /** + * Pinch glow effect manipulates these materials to create the "glow" + */ + private tipGlowMaterialIndexTip: Material = + this.indexQuadSceneObject.getComponent("Component.RenderMeshVisual") + .mainMaterial + private tipGlowMaterialThumbTip: Material = + this.thumbQuadSceneObject.getComponent("Component.RenderMeshVisual") + .mainMaterial + private handInteractor: HandInteractor = this.config.handInteractor + + private indexGlowBonusCancelSet = new CancelSet() + private indexGlowStrengthCancelSet = new CancelSet() + + private thumbGlowBonusCancelSet = new CancelSet() + private thumbGlowStrengthCancelSet = new CancelSet() + + private indexGlowBonus = 0 + private indexGlowBase = 0 + private thumbGlowBonus = 0 + private thumbGlowBase = 0 + + private isInPalmUIMode = false + private isInTargetingMode = false + private isInNearPinchMode = false + + private pinchTransitionColor = vec4.one() + private visualSelection: HandVisualSelection = this.config.visualSelection + private handOutlineMaterial: Material = this.config.handOutlineMaterial + private handOccluderMaterial: Material = this.config.handOccluderMaterial + private shouldThumbPokeGlow: boolean = this.config.shouldThumbPokeGlow + + private glowEffectViewModel: GlowEffectViewModel = new GlowEffectViewModel({ + handType: this.config.handType as HandType, + logLevel: this.sikLogLevelProvider.logLevel, + }) + + // Cached value from API .enabled calls + // eslint-disable-next-line @typescript-eslint/no-inferrable-types + private _enabled: boolean = true + + constructor(private config: GlowEffectViewConfig) { + // Connect to ViewModel events. This is how the glow effect will be driven + this.glowEffectViewModel.animateIndexGlowBase.add( + (animateGlowBaseUp: boolean) => { + this.animateIndexGlowBase(animateGlowBaseUp) + } + ) + this.glowEffectViewModel.animateIndexGlowBonus.add( + (animateGlowBonusUp: boolean) => { + this.animateIndexGlowBonus(animateGlowBonusUp) + } + ) + this.glowEffectViewModel.animateThumbGlowBase.add( + (animateGlowBaseUp: boolean) => { + this.animateThumbGlowBase(animateGlowBaseUp) + } + ) + this.glowEffectViewModel.animateThumbGlowBonus.add( + (animateGlowBonusUp: boolean) => { + this.animateThumbGlowBonus(animateGlowBonusUp) + } + ) + this.glowEffectViewModel.tapModeChanged((tapModeEntered: boolean) => { + validate(this.handVisuals?.handMesh) + + if (tapModeEntered === true) { + this.handVisuals.handMesh.mainPass["handGlowTex"] = + this.config.tapTexture + } else { + this.handVisuals.handMesh.mainPass["handGlowTex"] = + this.config.pinchTexture + } + }) + + if (this.visualSelection === HandVisualSelection.Occluder) { + this.tipGlowMaterialIndexTip.mainPass["brightness"] = 0 + this.tipGlowMaterialThumbTip.mainPass["brightness"] = 0 + this.handVisuals.handMesh.mainMaterial = this.handOccluderMaterial + } + + // Set up initial conditions + this.setIsInPalmUiMode(this.calculateIsInPalmUIMode()) + this.setIsInTargetingMode(this.calculateIsInTargetingMode()) + + this.setupPinchEvents() + this.updateDispatcher + .createUpdateEvent("GlowEffectViewUpdateEvent") + .bind(() => { + // If disabled via API, do not update the glow. + if ( + !this._enabled || + this.visualSelection === HandVisualSelection.Occluder + ) { + return + } + + const cameraPosition = this.camera.getWorldPosition() + this.indexQuadTransform.setWorldRotation( + quat.lookAt( + cameraPosition.sub(this.indexQuadTransform.getWorldPosition()), + VEC3_UP + ) + ) + this.thumbQuadTransform.setWorldRotation( + quat.lookAt( + cameraPosition.sub(this.thumbQuadTransform.getWorldPosition()), + VEC3_UP + ) + ) + + this.setIsInPalmUiMode(this.calculateIsInPalmUIMode()) + this.setIsInTargetingMode(this.calculateIsInTargetingMode()) + this.setIsInNearPinchMode(this.calculateIsInNearPinchMode()) + }) + this.updateDispatcher + .createLateUpdateEvent("GlowEffectViewLateUpdateEvent") + .bind(() => { + // If disabled via API, do not update the glow. + if ( + !this._enabled || + this.visualSelection === HandVisualSelection.Occluder + ) { + return + } + this.updateMaterial() + }) + } + + /** + * Enable/disable the SceneObject's created by this class + * @param isEnabled - boolean representing whether to enable or disable this class + */ + set enabled(isEnabled: boolean) { + this._enabled = isEnabled + this.indexQuadSceneObject.enabled = isEnabled + this.thumbQuadSceneObject.enabled = isEnabled + } + + public setVisualSelection(visualSelection: HandVisualSelection): void { + this.visualSelection = visualSelection + if (this.visualSelection === HandVisualSelection.Occluder) { + this.tipGlowMaterialIndexTip.mainPass["brightness"] = 0 + this.tipGlowMaterialThumbTip.mainPass["brightness"] = 0 + this.handVisuals.handMesh.mainPass["indexBrightness"] = 0 + this.handVisuals.handMesh.mainPass["thumbBrightness"] = 0 + this.handVisuals.handMesh.mainMaterial = this.handOccluderMaterial + } else { + this.handVisuals.handMesh.mainMaterial = this.handOutlineMaterial + this.tipGlowMaterialIndexTip.mainPass["brightness"] = + GLOW_MATERIAL_DEFAULT_BRIGHTNESS + this.tipGlowMaterialThumbTip.mainPass["brightness"] = + GLOW_MATERIAL_DEFAULT_BRIGHTNESS + this.handVisuals.handMesh.mainPass["indexBrightness"] = 0 + this.handVisuals.handMesh.mainPass["thumbBrightness"] = 0 + } + } + + /** + * Clean up the SceneObject's created by PinchGlow + */ + destroy(): void { + this.indexQuadSceneObject.destroy() + this.thumbQuadSceneObject.destroy() + } + + private setupTipQuadSceneObject( + parentSceneObject: SceneObject | undefined, + sceneObjectName: string + ): SceneObject { + validate(parentSceneObject) + + // Create the quad SceneObject to hold glow material and texture + const quadSceneObject = global.scene.createSceneObject(sceneObjectName) + quadSceneObject.setParent(parentSceneObject) + quadSceneObject.getTransform().setWorldScale(GLOW_QUAD_WORLD_SCALE) + + const quadComponent = quadSceneObject.createComponent( + "Component.RenderMeshVisual" + ) + quadComponent.mesh = this.config.unitPlaneMesh + quadComponent.setRenderOrder(this.config.tipGlowRenderOrder) + + // Initialize the quad RenderMeshVisual with the glow material + const tipGlowMaterial = this.config.tipGlowMaterial.clone() + tipGlowMaterial.mainPass.depthTest = true + tipGlowMaterial.mainPass.depthWrite = false + tipGlowMaterial.mainPass.glowColor = HOVER_COLOR + tipGlowMaterial.mainPass.brightness = GLOW_MATERIAL_DEFAULT_BRIGHTNESS + + quadComponent.mainMaterial = tipGlowMaterial + + return quadSceneObject + } + + private updateMaterial(): void { + validate(this.handVisuals?.handMesh) + const scaledIndexGlowBase = this.indexGlowBase * PINCH_BASE_BONUS_RATIO + const scaledIndexGlowBonus = + this.indexGlowBonus * (1 - PINCH_BASE_BONUS_RATIO) + let combinedIndexGlowFactor = scaledIndexGlowBase + scaledIndexGlowBonus + + const scaledThumbGlowBase = this.thumbGlowBase * PINCH_BASE_BONUS_RATIO + const scaledThumbGlowBonus = + this.indexGlowBonus * (1 - PINCH_BASE_BONUS_RATIO) + const combinedThumbGlowFactor = scaledThumbGlowBase + scaledThumbGlowBonus + this.tipGlowMaterialIndexTip.mainPass["pinchBrightness"] = + combinedIndexGlowFactor + this.tipGlowMaterialThumbTip.mainPass["pinchBrightness"] = + combinedThumbGlowFactor + + switch (this.handInteractor.fieldTargetingMode) { + case FieldTargetingMode.FarField: + this.tipGlowMaterialIndexTip.mainPass["pokeBrightness"] = 0 + this.tipGlowMaterialThumbTip.mainPass["pokeBrightness"] = 0 + this.handVisuals.handMesh.mainPass["indexBrightness"] = + combinedIndexGlowFactor * HAND_MESH_MATERIAL_BRIGHTNESS_FARFIELD + this.handVisuals.handMesh.mainPass["thumbBrightness"] = + combinedIndexGlowFactor * HAND_MESH_MATERIAL_BRIGHTNESS_FARFIELD + this.pinchTransitionColor = vec4.lerp( + HOVER_COLOR, + TRIGGER_COLOR, + this.indexGlowBonus + ) + this.handVisuals.handMesh.mainPass["indexGlowColor"] = + this.pinchTransitionColor + this.handVisuals.handMesh.mainPass["thumbGlowColor"] = + this.pinchTransitionColor + this.tipGlowMaterialIndexTip.mainPass["glowColor"] = + this.pinchTransitionColor + this.tipGlowMaterialThumbTip.mainPass["glowColor"] = + this.pinchTransitionColor + break + case FieldTargetingMode.NearField: + switch (this.handInteractor.currentTrigger) { + case InteractorTriggerType.None: + this.handVisuals.handMesh.mainPass["indexBrightness"] = + MathUtils.remap( + this.handInteractor.nearFieldProximity, + 0, + HAND_MESH_MATERIAL_FULL_BRIGHTNESS_DISTANCE_NEARFIELD, + 0, + HAND_MESH_MATERIAL_BRIGHTNESS_NEARFIELD + ) + if (this.shouldThumbPokeGlow) { + this.handVisuals.handMesh.mainPass["thumbBrightness"] = + MathUtils.remap( + this.handInteractor.nearFieldProximity, + 0, + HAND_MESH_MATERIAL_FULL_BRIGHTNESS_DISTANCE_NEARFIELD, + 0, + HAND_MESH_MATERIAL_BRIGHTNESS_NEARFIELD + ) + } + combinedIndexGlowFactor = + this.handInteractor.nearFieldProximity > 1 + ? 0 + : MathUtils.remap( + this.handInteractor.nearFieldProximity, + GLOW_MATERIAL_START_BRIGHTNESS_DISTANCE_NEARFIELD, + GLOW_MATERIAL_FULL_BRIGHTNESS_DISTANCE_NEARFIELD, + 0, + GLOW_MATERIAL_BRIGHTNESS_NEARFIELD + ) + this.pinchTransitionColor = vec4.lerp( + HOVER_COLOR, + TRIGGER_COLOR, + this.indexGlowBonus + ) + this.handVisuals.handMesh.mainPass["indexGlowColor"] = + this.pinchTransitionColor + this.handVisuals.handMesh.mainPass["thumbGlowColor"] = + this.pinchTransitionColor + this.tipGlowMaterialIndexTip.mainPass["glowColor"] = + this.pinchTransitionColor + this.tipGlowMaterialThumbTip.mainPass["glowColor"] = + this.pinchTransitionColor + break + case InteractorTriggerType.Pinch: + case InteractorTriggerType.Poke: + case InteractorTriggerType.Select: + if ( + this.handInteractor.nearFieldProximity > + GLOW_MATERIAL_DISTANCE_BEHIND_MIN + ) { + this.handVisuals.handMesh.mainPass["indexBrightness"] = + HAND_MESH_MATERIAL_BRIGHTNESS_NEARFIELD + if (this.shouldThumbPokeGlow) { + this.handVisuals.handMesh.mainPass["thumbBrightness"] = + HAND_MESH_MATERIAL_BRIGHTNESS_NEARFIELD + } + combinedIndexGlowFactor = MathUtils.remap( + this.handInteractor.nearFieldProximity, + GLOW_MATERIAL_DISTANCE_BEHIND_MIN, + GLOW_MATERIAL_DISTANCE_BEHIND_MAX, + GLOW_MATERIAL_BRIGHTNESS_BEHIND_MIN, + GLOW_MATERIAL_BRIGHTNESS_BEHIND_MAX + ) + this.handVisuals.handMesh.mainPass["indexGlowColor"] = + BEHIND_COLOR + this.tipGlowMaterialIndexTip.mainPass["glowColor"] = BEHIND_COLOR + this.handVisuals.handMesh.mainPass["indexGlowColor"] = + TRIGGER_COLOR + this.tipGlowMaterialThumbTip.mainPass["glowColor"] = + this.pinchTransitionColor + } else { + this.handVisuals.handMesh.mainPass["indexBrightness"] = + HAND_MESH_MATERIAL_BRIGHTNESS_TRIGGERED + if (this.shouldThumbPokeGlow) { + this.handVisuals.handMesh.mainPass["thumbBrightness"] = + HAND_MESH_MATERIAL_BRIGHTNESS_TRIGGERED + } + combinedIndexGlowFactor = GLOW_MATERIAL_BRIGHTNESS_TRIGGERED + this.handVisuals.handMesh.mainPass["indexGlowColor"] = + TRIGGER_COLOR + this.handVisuals.handMesh.mainPass["thumbGlowColor"] = + TRIGGER_COLOR + this.tipGlowMaterialIndexTip.mainPass["glowColor"] = TRIGGER_COLOR + this.tipGlowMaterialThumbTip.mainPass["glowColor"] = TRIGGER_COLOR + } + break + default: + break + } + break + default: + break + } + this.tipGlowMaterialIndexTip.mainPass["pokeBrightness"] = + combinedIndexGlowFactor + this.tipGlowMaterialThumbTip.mainPass["pokeBrightness"] = + combinedThumbGlowFactor + } + + private setIsInPalmUiMode(isInPalmUIMode: boolean): void { + if (isInPalmUIMode === this.isInPalmUIMode) { + return + } + + this.isInPalmUIMode = isInPalmUIMode + + this.glowEffectViewModel.palmUIModeEvent(this.isInPalmUIMode) + } + + private setIsInTargetingMode(isInTargetingMode: boolean): void { + if (isInTargetingMode === this.isInTargetingMode) { + return + } + + this.isInTargetingMode = isInTargetingMode + + this.glowEffectViewModel.targetingEvent(this.isInTargetingMode) + } + + private setIsInNearPinchMode(isInNearPinchMode: boolean): void { + if (isInNearPinchMode === this.isInNearPinchMode) { + return + } + + this.isInNearPinchMode = isInNearPinchMode + + this.glowEffectViewModel.nearPinchEvent(this.isInNearPinchMode) + } + + private setupPinchEvents(): void { + this.hand.onPinchDown.add(() => { + this.glowEffectViewModel.pinchEvent(true) + }) + + this.hand.onPinchUp.add(() => { + this.glowEffectViewModel.pinchEvent(false) + }) + + this.hand.onPinchCancel.add(() => { + this.glowEffectViewModel.pinchEvent(false) + }) + } + + private calculateIsInNearPinchMode(): boolean { + const pinchStrength = this.hand.getPinchStrength() ?? 0 + + if ( + pinchStrength > PINCH_STRENGTH_NEAR_PINCH_ENTER_THRESHOLD && + this.isInNearPinchMode === false + ) { + return true + } else if ( + pinchStrength < PINCH_STRENGTH_NEAR_PINCH_EXIT_THRESHOLD && + this.hand.isPinching() === false + ) { + return false + } + + return true + } + + /** + * @returns boolean + */ + private calculateIsInTargetingMode(): boolean { + return !this.isHandFacingCamera(this.hand) + } + + /** + * Cannot use this.config.hand.isFacingCamera() as that only triggers if hand + * is facing directly at camera, where we need more broad definition + * + * @param hand - the BaseHand to check + * @returns boolean + */ + private isHandFacingCamera(hand: BaseHand): boolean { + const handAngle = hand.getFacingCameraAngle() + if ( + handAngle === null || + handAngle > HAND_FACING_CAMERA_THRESHOLD_DEGREES + ) { + return false + } + + return true + } + + /* + * isInPalmUI + * 1) are both hands tracked + * 2) are both hands visible / important landmarks visible in the display fov + * 3) non dominant hand isPalmFacingCamera == true and dominant hand is not facing camera + * 4) if distance between index finger tip and palm center is less than the threshold + */ + private calculateIsInPalmUIMode() { + if (!this.tapGlowEnabled || !this.bothHandsTracked()) { + return false + } + + const handToTapPinkyKnuckle = this.handToTap.pinkyKnuckle + const tappingHandIndexTip = this.hand.indexTip + + if (handToTapPinkyKnuckle === null || tappingHandIndexTip === null) { + return false + } + + const handToTapPinkyKnucklePos = handToTapPinkyKnuckle.position + const tappingHandIndexTipPos = tappingHandIndexTip.position + + if ( + !this.camera.inFoV(handToTapPinkyKnucklePos) || + !this.camera.inFoV(tappingHandIndexTipPos) + ) { + return false + } + + if ( + !this.isHandFacingCamera(this.handToTap) || + this.isHandFacingCamera(this.hand) + ) { + return false + } + + const handToTapPalmCenterPos = this.handToTap.getPalmCenter() + + if (handToTapPalmCenterPos === null) { + return false + } + + const distanceToPalmCenter = tappingHandIndexTipPos.distance( + handToTapPalmCenterPos + ) + + if (distanceToPalmCenter >= this.config.tapProximityThreshold) { + return false + } + + return true + } + + private bothHandsTracked(): boolean { + return ( + this.handProvider.getDominantHand().isTracked() && + this.handProvider.getNonDominantHand().isTracked() + ) + } + + private animateIndexGlowBase(animateUp: boolean) { + this.indexGlowStrengthCancelSet() + animate({ + cancelSet: this.indexGlowStrengthCancelSet, + duration: PINCH_ANIMATION_DURATION, + easing: "ease-in-out-back-cubic", + start: this.indexGlowBase, + end: animateUp ? 1 : 0, + update: (t) => { + this.indexGlowBase = t + }, + }) + } + + private animateIndexGlowBonus(animateUp: boolean) { + this.indexGlowBonusCancelSet() + animate({ + cancelSet: this.indexGlowBonusCancelSet, + duration: PINCH_ANIMATION_DURATION, + easing: "ease-in-out-back-cubic", + start: this.indexGlowBonus, + end: animateUp ? 1 : 0, + update: (t) => { + this.indexGlowBonus = t + }, + }) + } + + private animateThumbGlowBase(animateUp: boolean) { + this.thumbGlowStrengthCancelSet() + animate({ + cancelSet: this.thumbGlowStrengthCancelSet, + duration: PINCH_ANIMATION_DURATION, + easing: "ease-in-out-back-cubic", + start: this.thumbGlowBase, + end: animateUp ? 1 : 0, + update: (t) => { + this.thumbGlowBase = t + }, + }) + } + + private animateThumbGlowBonus(animateUp: boolean) { + this.thumbGlowBonusCancelSet() + animate({ + cancelSet: this.thumbGlowBonusCancelSet, + duration: PINCH_ANIMATION_DURATION, + easing: "ease-in-out-back-cubic", + start: this.thumbGlowBonus, + end: animateUp ? 1 : 0, + update: (t) => { + this.thumbGlowBonus = t + }, + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts.meta new file mode 100644 index 00000000..2a6b7f90 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectView.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 6de35c79-7087-4ed7-9578-f5c6cf78003b + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6de35c79-7087-4ed7-9578-f5c6cf78003b + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! d295e902-ad05-4600-a136-c96c94a96f40 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts new file mode 100644 index 00000000..01e67728 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts @@ -0,0 +1,352 @@ +import {HandType} from "../../../Providers/HandInputData/HandType" +import Event from "../../../Utils/Event" +import {LogLevel} from "../../../Utils/LogLevel" +import NativeLogger from "../../../Utils/NativeLogger" +import StateMachine from "../../../Utils/StateMachine" + +const TAG = "GlowEffectViewModel" + +export enum GlowEffectStates { + IdleTargeting = "IdleTargeting", + IdleNotTargeting = "IdleNotTargeting", + NearPinching = "NearPinching", + Pinching = "Pinching", + PinchingNotTargeting = "PinchingNotTargeting", + NearTapping = "NearTapping", + Tapping = "Tapping", +} + +export enum StateMachineSignals { + EnterTargeting = "EnterTargeting", + ExitTargeting = "ExitTargeting", + EnterNearPinch = "EnterNearPinch", + ExitNearPinch = "ExitNearPinch", + EnterPinch = "EnterPinch", + ExitPinch = "ExitPinch", + EnterPalmUIMode = "EnterPalmUIMode", + ExitPalmUIMode = "ExitPalmUIMode", + EnterTap = "EnterTap", + ExitTap = "ExitTap", +} + +export type GlowEffectViewModelConfig = { + handType: HandType + logLevel: LogLevel +} + +/* + * GlowEffectViewModel manages the state of the glow effect for pinch and tap on hand visuals + */ +export class GlowEffectViewModel { + // Get LogLevel from config, this avoids having a SIK dependency in the ViewModel + private log = new NativeLogger(TAG) + + // Events used to communicate with the GlowEffectView + private animateIndexGlowBaseEvent = new Event() + readonly animateIndexGlowBase = this.animateIndexGlowBaseEvent.publicApi() + + private animateIndexGlowBonusEvent = new Event() + readonly animateIndexGlowBonus = this.animateIndexGlowBonusEvent.publicApi() + + private animateThumbGlowBaseEvent = new Event() + readonly animateThumbGlowBase = this.animateThumbGlowBaseEvent.publicApi() + + private animateThumbGlowBonusEvent = new Event() + readonly animateThumbGlowBonus = this.animateThumbGlowBonusEvent.publicApi() + + private tapModeChangedEvent = new Event() + readonly tapModeChanged = this.tapModeChangedEvent.publicApi() + + private stateMachine = this.createStateMachine() + + constructor(private config: GlowEffectViewModelConfig) {} + + /** + * Call to notify that we have entered or exited targeting mode + * + * @param enteredTargeting - Whether we have entered targeting mode (hand not facing the camera) + */ + targetingEvent(enteredTargeting: boolean): void { + enteredTargeting + ? this.stateMachine.sendSignal(StateMachineSignals.EnterTargeting) + : this.stateMachine.sendSignal(StateMachineSignals.ExitTargeting) + } + + /** + * Call to notify that we have entered or exited near pinch mode + * + * @param enteredNearPinch - Whether we have entered near pinch mode + */ + nearPinchEvent(enteredNearPinch: boolean): void { + enteredNearPinch + ? this.stateMachine.sendSignal(StateMachineSignals.EnterNearPinch) + : this.stateMachine.sendSignal(StateMachineSignals.ExitNearPinch) + } + + /** + * Call to notify that we have entered or exited pinch mode + * + * @param enteredPinch - Whether we have entered pinch mode + */ + pinchEvent(enteredPinch: boolean): void { + enteredPinch + ? this.stateMachine.sendSignal(StateMachineSignals.EnterPinch) + : this.stateMachine.sendSignal(StateMachineSignals.ExitPinch) + } + + /** + * Call to notify that we have entered or exited palm UI mode + * + * @param enteredPalmUIMode - Whether we have entered palm UI mode + */ + palmUIModeEvent(enteredPalmUIMode: boolean): void { + enteredPalmUIMode + ? this.stateMachine.sendSignal(StateMachineSignals.EnterPalmUIMode) + : this.stateMachine.sendSignal(StateMachineSignals.ExitPalmUIMode) + } + + /** + * Call to notify that we have entered or exited tap mode + * + * @param enteredTap - Whether we have entered tap mode + */ + tapEvent(enteredTap: boolean): void { + enteredTap + ? this.stateMachine.sendSignal(StateMachineSignals.EnterTap) + : this.stateMachine.sendSignal(StateMachineSignals.ExitTap) + } + + /** + * Get the current state of the state machine used to manage the glow effects + * + * @returns GlowEffectStates the state that the state machine is currently in + */ + get currentState(): GlowEffectStates { + if (this.stateMachine.currentState === null) { + throw new Error("GlowEffectStateMachine does not have a current state!") + } + + return this.stateMachine.currentState.name as GlowEffectStates + } + + private createStateMachine(): StateMachine { + const stateMachine = new StateMachine("GlowEffectStateMachine") + + stateMachine.addState({ + name: GlowEffectStates.IdleTargeting, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(false) + this.animateIndexGlowBonusEvent.invoke(false) + + this.animateThumbGlowBaseEvent.invoke(false) + this.animateThumbGlowBonusEvent.invoke(false) + }, + transitions: [ + { + nextStateName: GlowEffectStates.IdleNotTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitTargeting + }, + }, + { + nextStateName: GlowEffectStates.NearPinching, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterNearPinch + }, + }, + { + nextStateName: GlowEffectStates.NearTapping, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterPalmUIMode + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.IdleNotTargeting, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(false) + this.animateIndexGlowBonusEvent.invoke(false) + + this.animateThumbGlowBaseEvent.invoke(false) + this.animateThumbGlowBonusEvent.invoke(false) + }, + transitions: [ + { + nextStateName: GlowEffectStates.IdleTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterTargeting + }, + }, + { + nextStateName: GlowEffectStates.NearPinching, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterNearPinch + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.NearPinching, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(true) + this.animateIndexGlowBonusEvent.invoke(false) + + this.animateThumbGlowBaseEvent.invoke(true) + this.animateThumbGlowBonusEvent.invoke(false) + }, + transitions: [ + { + nextStateName: GlowEffectStates.IdleTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitNearPinch + }, + }, + { + nextStateName: GlowEffectStates.IdleNotTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitTargeting + }, + }, + { + nextStateName: GlowEffectStates.NearTapping, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterPalmUIMode + }, + }, + { + nextStateName: GlowEffectStates.Pinching, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterPinch + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.Pinching, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(true) + this.animateIndexGlowBonusEvent.invoke(true) + + this.animateThumbGlowBaseEvent.invoke(true) + this.animateThumbGlowBonusEvent.invoke(true) + }, + transitions: [ + { + nextStateName: GlowEffectStates.PinchingNotTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitTargeting + }, + }, + { + nextStateName: GlowEffectStates.NearPinching, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitPinch + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.PinchingNotTargeting, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(true) + this.animateIndexGlowBonusEvent.invoke(true) + + this.animateThumbGlowBaseEvent.invoke(true) + this.animateThumbGlowBonusEvent.invoke(true) + }, + transitions: [ + { + nextStateName: GlowEffectStates.IdleNotTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitPinch + }, + }, + { + nextStateName: GlowEffectStates.Pinching, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterTargeting + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.NearTapping, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.tapModeChangedEvent.invoke(true) + + this.animateIndexGlowBaseEvent.invoke(true) + this.animateIndexGlowBonusEvent.invoke(false) + + this.animateThumbGlowBaseEvent.invoke(false) + this.animateThumbGlowBonusEvent.invoke(false) + }, + transitions: [ + { + nextStateName: GlowEffectStates.IdleTargeting, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitPalmUIMode + }, + onExecution: () => { + this.tapModeChangedEvent.invoke(false) + }, + }, + { + nextStateName: GlowEffectStates.Tapping, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.EnterTap + }, + }, + ], + }) + + stateMachine.addState({ + name: GlowEffectStates.Tapping, + onEnter: () => { + this.log.v( + `${this.config.handType} Entered state: ${this.currentState}` + ) + this.animateIndexGlowBaseEvent.invoke(true) + this.animateIndexGlowBonusEvent.invoke(true) + + this.animateThumbGlowBaseEvent.invoke(false) + this.animateThumbGlowBonusEvent.invoke(false) + }, + transitions: [ + { + nextStateName: GlowEffectStates.NearTapping, + checkOnSignal: (signal: string) => { + return signal === StateMachineSignals.ExitTap + }, + }, + ], + }) + + stateMachine.enterState(GlowEffectStates.IdleTargeting, true) + + return stateMachine + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts.meta new file mode 100644 index 00000000..fc2b3a2a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/GlowEffectViewModel.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 531578ff-5392-4ebe-bb65-91cdb21b6504 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 531578ff-5392-4ebe-bb65-91cdb21b6504 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! a07f4b76-9c01-417d-aee5-9407fed7a569 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts new file mode 100644 index 00000000..01f4be6d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts @@ -0,0 +1,466 @@ +import {HandInteractor} from "../../../Core/HandInteractor/HandInteractor" +import {HandInputData} from "../../../Providers/HandInputData/HandInputData" +import {HandType} from "../../../Providers/HandInputData/HandType" +import {HandVisuals} from "../../../Providers/HandInputData/HandVisuals" +import TrackedHand from "../../../Providers/HandInputData/TrackedHand" +import {InteractionConfigurationProvider} from "../../../Providers/InteractionConfigurationProvider/InteractionConfigurationProvider" +import {InputChecker} from "../../../Utils/InputChecker" +import {findSceneObjectByName} from "../../../Utils/SceneObjectUtils" +import {validate} from "../../../Utils/validate" +import {GlowEffectView} from "./GlowEffectView" +import RadialOcclusionView from "./RadialOcclusionView" + +const TAG = "HandVisual" + +export enum HandVisualSelection { + Default = "Default", + Occluder = "Occluder", +} + +/** + * This class provides a visual representation of the hand, with the ability to automatically wire joints to the hand mesh. It also provides the ability to add a radial gradient occlusion effect and a glow effect to the hand mesh. + */ + +@component +export class HandVisual extends BaseScriptComponent implements HandVisuals { + @ui.group_start("Hand Visual") + @input + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Left", "left"), + new ComboBoxItem("Right", "right"), + ]), + ) + private handType!: string + @input + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Default", "Default"), + new ComboBoxItem("Occluder", "Occluder"), + ]), + ) + private selectVisual: string = "Default" + @input handInteractor: HandInteractor + @input + /** + * Reference to the RenderMeshVisual of the hand mesh. + */ + handMesh!: RenderMeshVisual + + @input + @hint("The desired render order of the handMesh") + private handMeshRenderOrder: number = 9999 + + @input + @hint("Parent of both the rig and the mesh") + /** @inheritdoc */ + root!: SceneObject + @input + @hint("If checked the HandVisual will attempt to automatically wire joints") + /** + * Check to engage [Automatic Setup](#automatic-setup), leave unchecked for [Manual Setup](#manual-setup). Defaults to "true". + */ + autoJointMapping: boolean = true + + @ui.group_start("Joint Setup") + @showIf("autoJointMapping", false) + @input("SceneObject") + @allowUndefined + wrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + thumbToWrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + thumbBaseJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + thumbKnuckle: SceneObject | undefined + @input("SceneObject") + @allowUndefined + thumbMidJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + thumbTip: SceneObject | undefined + @input("SceneObject") + @allowUndefined + indexToWrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + indexKnuckle: SceneObject | undefined + @input("SceneObject") + @allowUndefined + indexMidJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + indexUpperJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + indexTip: SceneObject | undefined + @input("SceneObject") + @allowUndefined + middleToWrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + middleKnuckle: SceneObject | undefined + @input("SceneObject") + @allowUndefined + middleMidJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + middleUpperJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + middleTip: SceneObject | undefined + @input("SceneObject") + @allowUndefined + ringToWrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + ringKnuckle: SceneObject | undefined + @input("SceneObject") + @allowUndefined + ringMidJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + ringUpperJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + ringTip: SceneObject | undefined + @input("SceneObject") + @allowUndefined + pinkyToWrist: SceneObject | undefined + @input("SceneObject") + @allowUndefined + pinkyKnuckle: SceneObject | undefined + @input("SceneObject") + @allowUndefined + pinkyMidJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + pinkyUpperJoint: SceneObject | undefined + @input("SceneObject") + @allowUndefined + pinkyTip: SceneObject | undefined + @ui.group_end + @ui.group_start("Glow Effect") + @input + @hint("Whether or not the thumb should glow when poking") + private shouldThumbPokeGlow: boolean = false + @input + @hint("The plane mesh on which the glow texture/material will be rendered") + private unitPlaneMesh!: RenderMesh + @input + @hint("The material which will be manipulated to create the glow effect") + private tipGlowMaterial!: Material + @input + @widget(new ColorWidget()) + @hint("The color the glow will be when you are not pinching") + private idleColor!: vec4 + @input + @widget(new ColorWidget()) + @hint("The color the glow will be when you are pinching") + private pinchDownColor!: vec4 + @input + @hint( + "How close index finger of tapping hand has to be to tapped hand to initiate tap glow", + ) + private tapProximityThreshold!: number + @input + @hint("The texture applied to the hand when creating pinch glow effect") + private pinchTexture!: Texture + @input + @hint("The texture applied to the hand when creating tap glow effect") + private tapTexture!: Texture + @input + @hint("The render order of the quad on which the tip glow effect occurs") + private tipGlowRenderOrder: number = 10000 + @ui.group_end + @ui.group_start("Radial Gradient Occlusion") + @input + @hint("Whether or not the radial gradient occluder is enabled") + private occluderEnabled: boolean = false + @input + @hint("The plane mesh the radial gradient occluder will be rendered") + private occluderUnitPlaneMesh!: RenderMesh + @input + @hint("The material which will be create the gradient occlusion effect") + private radialGradientOcclusionMaterial!: Material + @input + @hint("The render order of the gradient quad tracked to the hand") + private gradientQuadRenderOrder: number = 9997 + @ui.group_end + @ui.group_end + @ui.group_start("Hand Mesh Materials") + @input + @hint( + "The material which will be create the default visual effect on the hand mesh" + ) + private handOutlineMaterial: Material + @input + @hint( + "The material which will be create the occluder visual effect on the hand mesh" + ) + private handOccluderMaterial: Material + @ui.group_end + + // Dependencies + private handProvider: HandInputData = HandInputData.getInstance() + private interactionConfigurationProvider: InteractionConfigurationProvider = + InteractionConfigurationProvider.getInstance() + private inputChecker = new InputChecker(TAG) + private hand: TrackedHand | undefined + private radialOcclusionView: RadialOcclusionView | undefined + private glowEffectView: GlowEffectView | undefined + // eslint-disable-next-line @typescript-eslint/no-inferrable-types + private _enabled: boolean = true + private _handVisualSelection: HandVisualSelection = this + .selectVisual as HandVisualSelection + + initialized = false + + /** + * Sets the selection of the hand visual to present to user + */ + set visualSelection(selection: HandVisualSelection) { + this._handVisualSelection = selection + this.glowEffectView?.setVisualSelection(selection) + } + + /** + * @returns the current selection of the hand visual to present to user + */ + get visualSelection(): HandVisualSelection { + return this._handVisualSelection + } + + private defineScriptEvents() { + this.createEvent("OnStartEvent").bind(() => { + this.initialize() + }) + + this.createEvent("OnEnableEvent").bind(() => { + this.defineOnEnableBehavior() + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.defineOnDisableBehavior() + }) + + this.createEvent("OnDestroyEvent").bind(() => { + this.defineOnDestroyBehavior() + }) + } + + protected defineOnEnableBehavior(): void { + this.setEnabled(true) + } + + protected defineOnDisableBehavior(): void { + this.setEnabled(false) + } + + protected defineOnDestroyBehavior(): void { + if (this.glowEffectView !== undefined) { + this.glowEffectView.destroy() + } + if (this.radialOcclusionView !== undefined) { + this.radialOcclusionView.destroy() + } + + this.hand?.detachHandVisuals(this) + } + + private defineHandEvents() { + validate(this.hand) + + this.hand.onEnabledChanged.add((enabled: boolean) => { + this._enabled = enabled + // We shouldn't turn on the hand visuals until the hand has actually been found. + if (!enabled) { + this.setEnabled(false) + } + }) + + this.hand.onHandFound.add(() => { + if (this._enabled) { + this.setEnabled(true) + } + }) + + this.hand.onHandLost.add(() => { + if (this._enabled) { + this.setEnabled(false) + } + }) + } + + private getJointSceneObject( + targetSceneObjectName: string, + root: SceneObject + ) { + const sceneObject = findSceneObjectByName(root, targetSceneObjectName) + if (sceneObject === null) { + throw new Error( + `${targetSceneObjectName} could not be found in children of SceneObject: ${this.root?.name}` + ) + } + return sceneObject + } + + private setEnabled(enabled: boolean) { + if (this.glowEffectView !== undefined) { + this.glowEffectView.enabled = enabled + } + if (this.radialOcclusionView !== undefined) { + this.radialOcclusionView.enabled = enabled + } + this.handMesh.enabled = enabled + } + + onAwake(): void { + if (this.handType !== "right") { + this.hand = this.handProvider.getHand("left") + } else { + this.hand = this.handProvider.getHand("right") + } + + this.hand.attachHandVisuals(this) + + this.defineHandEvents() + this.defineScriptEvents() + + this.handMesh.setRenderOrder(this.handMeshRenderOrder) + + /* + * HandVisuals were not working correctly with frustum culling, + * instead manually define the AABB for frustum culling + */ + const min = this.handMesh.mesh.aabbMin + const max = this.handMesh.mesh.aabbMax + + const pass = this.handMesh.mainMaterial.mainPass + pass.frustumCullMode = FrustumCullMode.UserDefinedAABB + pass.frustumCullMin = min + pass.frustumCullMax = max + } + + public initialize(): void { + if (this.initialized) { + return + } + validate(this.hand) + + this.wrist = this.autoJointMapping + ? this.getJointSceneObject("wrist", this.root) + : this.wrist + + this.thumbToWrist = this.autoJointMapping + ? this.getJointSceneObject("wrist_to_thumb", this.root) + : this.thumbToWrist + this.thumbBaseJoint = this.autoJointMapping + ? this.getJointSceneObject("thumb-0", this.root) + : this.thumbBaseJoint + this.thumbKnuckle = this.autoJointMapping + ? this.getJointSceneObject("thumb-1", this.root) + : this.thumbKnuckle + this.thumbMidJoint = this.autoJointMapping + ? this.getJointSceneObject("thumb-2", this.root) + : this.thumbMidJoint + this.thumbTip = this.autoJointMapping + ? this.getJointSceneObject("thumb-3", this.root) + : this.thumbTip + this.indexToWrist = this.autoJointMapping + ? this.getJointSceneObject("wrist_to_index", this.root) + : this.indexToWrist + this.indexKnuckle = this.autoJointMapping + ? this.getJointSceneObject("index-0", this.root) + : this.indexKnuckle + this.indexMidJoint = this.autoJointMapping + ? this.getJointSceneObject("index-1", this.root) + : this.indexMidJoint + this.indexUpperJoint = this.autoJointMapping + ? this.getJointSceneObject("index-2", this.root) + : this.indexUpperJoint + this.indexTip = this.autoJointMapping + ? this.getJointSceneObject("index-3", this.root) + : this.indexTip + this.middleToWrist = this.autoJointMapping + ? this.getJointSceneObject("wrist_to_mid", this.root) + : this.middleToWrist + this.middleKnuckle = this.autoJointMapping + ? this.getJointSceneObject("mid-0", this.root) + : this.middleKnuckle + this.middleMidJoint = this.autoJointMapping + ? this.getJointSceneObject("mid-1", this.root) + : this.middleMidJoint + this.middleUpperJoint = this.autoJointMapping + ? this.getJointSceneObject("mid-2", this.root) + : this.middleUpperJoint + this.middleTip = this.autoJointMapping + ? this.getJointSceneObject("mid-3", this.root) + : this.middleTip + this.ringToWrist = this.autoJointMapping + ? this.getJointSceneObject("wrist_to_ring", this.root) + : this.ringToWrist + this.ringKnuckle = this.autoJointMapping + ? this.getJointSceneObject("ring-0", this.root) + : this.ringKnuckle + this.ringMidJoint = this.autoJointMapping + ? this.getJointSceneObject("ring-1", this.root) + : this.ringMidJoint + this.ringUpperJoint = this.autoJointMapping + ? this.getJointSceneObject("ring-2", this.root) + : this.ringUpperJoint + this.ringTip = this.autoJointMapping + ? this.getJointSceneObject("ring-3", this.root) + : this.ringTip + this.pinkyToWrist = this.autoJointMapping + ? this.getJointSceneObject("wrist_to_pinky", this.root) + : this.pinkyToWrist + this.pinkyKnuckle = this.autoJointMapping + ? this.getJointSceneObject("pinky-0", this.root) + : this.pinkyKnuckle + this.pinkyMidJoint = this.autoJointMapping + ? this.getJointSceneObject("pinky-1", this.root) + : this.pinkyMidJoint + this.pinkyUpperJoint = this.autoJointMapping + ? this.getJointSceneObject("pinky-2", this.root) + : this.pinkyUpperJoint + this.pinkyTip = this.autoJointMapping + ? this.getJointSceneObject("pinky-3", this.root) + : this.pinkyTip + + this.initialized = true + // The joints are now ready and the effects can be initialized + + this.hand.initHandVisuals() + this.glowEffectView = new GlowEffectView({ + handType: this.handType as HandType, + unitPlaneMesh: this.unitPlaneMesh, + tipGlowMaterial: this.tipGlowMaterial, + idleColor: this.idleColor, + pinchDownColor: this.pinchDownColor, + tapProximityThreshold: this.tapProximityThreshold, + tapTexture: this.tapTexture, + pinchTexture: this.pinchTexture, + tipGlowRenderOrder: this.tipGlowRenderOrder, + handInteractor: this.handInteractor, + visualSelection: this._handVisualSelection, + handOutlineMaterial: this.handOutlineMaterial, + handOccluderMaterial: this.handOccluderMaterial, + shouldThumbPokeGlow: this.shouldThumbPokeGlow, + }) + + if (!this.occluderEnabled) { + return + } + + this.radialOcclusionView = new RadialOcclusionView({ + handType: this.handType as HandType, + unitPlaneMesh: this.occluderUnitPlaneMesh, + radialGradientOcclusionMaterial: this.radialGradientOcclusionMaterial, + gradientQuadRenderOrder: this.gradientQuadRenderOrder, + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts.meta new file mode 100644 index 00000000..2bfbda33 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual.ts.meta @@ -0,0 +1,190 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! 69c8692f-ebb8-45c5-8b65-8a66ad27951b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - '// @ui {"widget":"group_start", "label":"Hand Visual"}' + - '// @input string handType {"widget":"combobox", "values":[{"label":"Left", "value":"left"}, {"label":"Right", "value":"right"}]}' + - '// @input string selectVisual = "Default" {"widget":"combobox", "values":[{"label":"Default", "value":"Default"}, {"label":"Occluder", "value":"Occluder"}]}' + - // @input HandInteractor handInteractor + - // @input Component.RenderMeshVisual handMesh + - '// @input float handMeshRenderOrder = 9999 {"hint":"The desired render order of the handMesh"}' + - '// @input SceneObject root {"hint":"Parent of both the rig and the mesh"}' + - '// @input bool autoJointMapping = true {"hint":"If checked the HandVisual will attempt to automatically wire joints"}' + - '// @ui {"widget":"group_start", "label":"Joint Setup", "showIf":"autoJointMapping", "showIfValue":false}' + - // @input SceneObject wrist + - // @input SceneObject thumbToWrist + - // @input SceneObject thumbBaseJoint + - // @input SceneObject thumbKnuckle + - // @input SceneObject thumbMidJoint + - // @input SceneObject thumbTip + - // @input SceneObject indexToWrist + - // @input SceneObject indexKnuckle + - // @input SceneObject indexMidJoint + - // @input SceneObject indexUpperJoint + - // @input SceneObject indexTip + - // @input SceneObject middleToWrist + - // @input SceneObject middleKnuckle + - // @input SceneObject middleMidJoint + - // @input SceneObject middleUpperJoint + - // @input SceneObject middleTip + - // @input SceneObject ringToWrist + - // @input SceneObject ringKnuckle + - // @input SceneObject ringMidJoint + - // @input SceneObject ringUpperJoint + - // @input SceneObject ringTip + - // @input SceneObject pinkyToWrist + - // @input SceneObject pinkyKnuckle + - // @input SceneObject pinkyMidJoint + - // @input SceneObject pinkyUpperJoint + - // @input SceneObject pinkyTip + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Glow Effect"}' + - '// @input bool shouldThumbPokeGlow {"hint":"Whether or not the thumb should glow when poking"}' + - '// @input Asset.RenderMesh unitPlaneMesh {"hint":"The plane mesh on which the glow texture/material will be rendered"}' + - '// @input Asset.Material tipGlowMaterial {"hint":"The material which will be manipulated to create the glow effect"}' + - '// @input vec4 idleColor {"hint":"The color the glow will be when you are not pinching", "widget":"color"}' + - '// @input vec4 pinchDownColor {"hint":"The color the glow will be when you are pinching", "widget":"color"}' + - '// @input float tapProximityThreshold {"hint":"How close index finger of tapping hand has to be to tapped hand to initiate tap glow"}' + - '// @input Asset.Texture pinchTexture {"hint":"The texture applied to the hand when creating pinch glow effect"}' + - '// @input Asset.Texture tapTexture {"hint":"The texture applied to the hand when creating tap glow effect"}' + - '// @input float tipGlowRenderOrder = 10000 {"hint":"The render order of the quad on which the tip glow effect occurs"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Radial Gradient Occlusion"}' + - '// @input bool occluderEnabled {"hint":"Whether or not the radial gradient occluder is enabled"}' + - '// @input Asset.RenderMesh occluderUnitPlaneMesh {"hint":"The plane mesh the radial gradient occluder will be rendered"}' + - '// @input Asset.Material radialGradientOcclusionMaterial {"hint":"The material which will be create the gradient occlusion effect"}' + - '// @input float gradientQuadRenderOrder = 9997 {"hint":"The render order of the gradient quad tracked to the hand"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Hand Mesh Materials"}' + - '// @input Asset.Material handOutlineMaterial {"hint":"The material which will be create the default visual effect on the hand mesh"}' + - '// @input Asset.Material handOccluderMaterial {"hint":"The material which will be create the occluder visual effect on the hand mesh"}' + - '// @ui {"widget":"group_end"}' + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + autoJointMapping: false + gradientQuadRenderOrder: true + handInteractor: false + handMesh: false + handMeshRenderOrder: true + handOccluderMaterial: false + handOutlineMaterial: false + handType: false + idleColor: false + indexKnuckle: false + indexMidJoint: false + indexTip: false + indexToWrist: false + indexUpperJoint: false + middleKnuckle: false + middleMidJoint: false + middleTip: false + middleToWrist: false + middleUpperJoint: false + occluderEnabled: false + occluderUnitPlaneMesh: false + pinchDownColor: false + pinchTexture: false + pinkyKnuckle: false + pinkyMidJoint: false + pinkyTip: false + pinkyToWrist: false + pinkyUpperJoint: false + radialGradientOcclusionMaterial: false + ringKnuckle: false + ringMidJoint: false + ringTip: false + ringToWrist: false + ringUpperJoint: false + root: false + selectVisual: false + shouldThumbPokeGlow: false + tapProximityThreshold: false + tapTexture: false + thumbBaseJoint: false + thumbKnuckle: false + thumbMidJoint: false + thumbTip: false + thumbToWrist: false + tipGlowMaterial: false + tipGlowRenderOrder: true + unitPlaneMesh: false + wrist: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - handType: "" + handMesh: ! 00000000-0000-0000-0000-000000000000 + root: ! 00000000-0000-0000-0000-000000000000 + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + occluderUnitPlaneMesh: ! 00000000-0000-0000-0000-000000000000 + radialGradientOcclusionMaterial: ! 00000000-0000-0000-0000-000000000000 + unitPlaneMesh: ! 00000000-0000-0000-0000-000000000000 + tipGlowMaterial: ! 00000000-0000-0000-0000-000000000000 + idleColor: ! {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + pinchDownColor: ! {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + tapProximityThreshold: ! 0.000000 + pinchTexture: ! 00000000-0000-0000-0000-000000000000 + tapTexture: ! 00000000-0000-0000-0000-000000000000 + handMeshRenderOrder: ! 9999.000000 + tipGlowRenderOrder: ! 10000.000000 + gradientQuadRenderOrder: ! 9997.000000 + occluderEnabled: false + selectVisual: Default + handInteractor: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: false + handOutlineMaterial: ! 00000000-0000-0000-0000-000000000000 + handOccluderMaterial: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts new file mode 100644 index 00000000..dd23b491 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts @@ -0,0 +1,299 @@ +import animate, {CancelSet} from "../../../Utils/animate" + +import {Billboard} from "../Billboard/Billboard" +import {HandInputData} from "../../../Providers/HandInputData/HandInputData" +import {HandType} from "../../../Providers/HandInputData/HandType" +import {LensConfig} from "../../../Utils/LensConfig" +import {MovingAverageFilter} from "../../../Utils/MovingAverageFilter" +import {validate} from "../../../Utils/validate" +import {withAlpha} from "../../../Utils/color" + +const TAG = "RadialOcclusionView" + +export type RadialOcclusionViewConfig = { + handType: HandType + unitPlaneMesh: RenderMesh + radialGradientOcclusionMaterial: Material + gradientQuadRenderOrder: number +} + +const GRADIENT_QUAD_LOCAL_SCALE = new vec3(1.5, 1.5, 1.5) +const GRADIENT_QUAD_OFFSET_LEFT = new vec3(1.5, -2.5, 0) +const DEFAULT_GRADIENT_OPACITY = 1 +const GRADIENT_SCALE_FACTOR_MOVING_AVERAGE_SIZE = 10 + +const GRADIENT_QUAD_MIN_SCALE = 0.6 +const GRADIENT_QUAD_MAX_SCALE = 1 + +const MIN_MEAN_AVG_FINGER_DISTANCE = 2 +const MAX_MEAN_AVG_FINGER_DISTANCE = 5 + +const GRADIENT_SCALE_FACTOR_MIN = 0 +const GRADIENT_SCALE_FACTOR_MAX = 1 + +const OPACITY_ANIMATION_SECS = 0.3 + +const COLLIDER_RADIUS_CM = 4 + +/** + * RadialOcclusionView controls radial gradient occluder tracked to the hand + * + */ +export default class RadialOcclusionView { + private updateDispatcher = LensConfig.getInstance().updateDispatcher + private handProvider: HandInputData = HandInputData.getInstance() + + private hand = this.handProvider.getHand(this.config.handType) + private handVisuals = this.hand.getHandVisuals() + + /* + * Radial gradient occlusion effect uses a quad with gradient material which + * is billboarded towards the camera + */ + private gradientQuadSceneObject: SceneObject = + this.setupGradientQuadSceneObject("gradientQuadSceneObject") + + // Animate up and down when hand collides with object, so we fade out on collision + private gradientOcclusionOpacity = DEFAULT_GRADIENT_OPACITY + + private currentAverageScaleFactor = 1 + + private gradientScaleFactorMovingAverage = new MovingAverageFilter( + GRADIENT_SCALE_FACTOR_MOVING_AVERAGE_SIZE, + () => 0, + (samples: number[]) => { + return samples.reduce((a, b) => a + b, 0) / samples.length + }, + ) + + private gradientOpacityCancelSet = new CancelSet() + + // We need this secondary flag to ensure that we don't accidentally enable gradient quad during getDeltaTime() check + private gradientQuadEnabled = true + + constructor(private config: RadialOcclusionViewConfig) { + this.updateDispatcher + .createUpdateEvent("RadialOcclusionViewUpdateEvent") + .bind(() => { + /** + * Disable gradient quad when in capture mode. + * + * We can tell we are in capture mode when deltaTime is 0, this is because current capture + * implementation uses a double update, where the second update is passed deltaTime 0. + */ + if (!this.gradientQuadEnabled) { + return + } + + this.gradientQuadSceneObject.enabled = getDeltaTime() !== 0 + if (!this.gradientQuadSceneObject.enabled) { + return + } + + this.updateGradientScaleFactor() + }) + this.updateDispatcher + .createLateUpdateEvent("RadialOcclusionViewLateUpdateEvent") + .bind(() => { + if (!this.gradientQuadSceneObject.enabled) { + return + } + + this.updateVisuals() + }) + } + + /** + * Enable/disable the SceneObject's created by this class + * @param isEnabled - boolean representing whether to enable or disable this class + */ + set enabled(isEnabled: boolean) { + if (this.gradientQuadSceneObject === null) { + return + } + + this.gradientQuadEnabled = isEnabled + this.gradientQuadSceneObject.enabled = isEnabled + } + + /** + * Clean up the SceneObject's created by RadialOccluderView + */ + destroy(): void { + if (this.gradientQuadSceneObject === null) { + return + } + + this.gradientQuadSceneObject.destroy() + } + + private setupGradientQuadSceneObject(sceneObjectName: string): SceneObject { + validate(this.handVisuals?.middleKnuckle) + const middleKnuckleSceneObject = this.handVisuals.middleKnuckle + + // Create the quad SceneObject to hold occlusion material + const quadSceneObject = global.scene.createSceneObject(sceneObjectName) + quadSceneObject.setParent(middleKnuckleSceneObject) + quadSceneObject.getTransform().setLocalScale(GRADIENT_QUAD_LOCAL_SCALE) + + quadSceneObject + .getTransform() + .setLocalPosition( + this.config.handType === "left" + ? GRADIENT_QUAD_OFFSET_LEFT + : new vec3( + -1 * GRADIENT_QUAD_OFFSET_LEFT.x, + GRADIENT_QUAD_OFFSET_LEFT.y, + GRADIENT_QUAD_OFFSET_LEFT.z, + ), + ) + + // Create the mesh component to hold the gradient material + const gradientQuadRenderMeshComponent = quadSceneObject.createComponent( + "Component.RenderMeshVisual", + ) + gradientQuadRenderMeshComponent.mesh = this.config.unitPlaneMesh + + // Initialize the quad mesh with the occlusion material + const gradientOcclusionMaterial = + this.config.radialGradientOcclusionMaterial.clone() + gradientQuadRenderMeshComponent.setRenderOrder( + this.config.gradientQuadRenderOrder, + ) + gradientOcclusionMaterial.mainPass.depthTest = true + gradientOcclusionMaterial.mainPass.depthWrite = false + + gradientQuadRenderMeshComponent.mainMaterial = gradientOcclusionMaterial + + // Add a collider which is used to fade in/out the gradient when hand intersects obj with collider + const quadColliderComponent = quadSceneObject.createComponent( + "Physics.ColliderComponent", + ) + quadColliderComponent.fitVisual = false + const colliderShape = Shape.createSphereShape() + colliderShape.radius = COLLIDER_RADIUS_CM + quadColliderComponent.shape = colliderShape + + this.setupColliderEvents(quadColliderComponent) + + // Add Billboard so that quad always faces the camera + const billboardComponent = quadSceneObject.createComponent( + Billboard.getTypeName(), + ) + + this.configureBillboardComponent(billboardComponent) + + return quadSceneObject + } + + private configureBillboardComponent(billboardComponent: Billboard): void { + billboardComponent.xAxisEnabled = true + billboardComponent.yAxisEnabled = true + billboardComponent.zAxisEnabled = true + billboardComponent.axisEasing = new vec3(1, 1, 1) + billboardComponent.axisBufferDegrees = new vec3(0, 0, 0) + } + + private setupColliderEvents(collider: ColliderComponent) { + collider.onOverlapEnter.add(() => { + this.animateOpacity(false) + }) + + collider.onOverlapExit.add(() => { + this.animateOpacity(true) + }) + } + + private animateOpacity(animateUp: boolean) { + this.gradientOpacityCancelSet() + animate({ + cancelSet: this.gradientOpacityCancelSet, + duration: OPACITY_ANIMATION_SECS, + easing: "ease-in-out-back-cubic", + start: this.gradientOcclusionOpacity, + end: animateUp ? 1 : 0, + update: (t) => { + this.gradientOcclusionOpacity = t + }, + }) + } + + private updateGradientScaleFactor() { + validate(this.handVisuals?.indexTip) + validate(this.handVisuals?.indexTip) + validate(this.handVisuals?.middleTip) + validate(this.handVisuals?.ringTip) + + const thumbTipPosition = this.handVisuals.indexTip + .getTransform() + .getWorldPosition() + const indexTipPosition = this.handVisuals.indexTip + .getTransform() + .getWorldPosition() + const midTipPosition = this.handVisuals.middleTip + .getTransform() + .getWorldPosition() + const ringTipPosition = this.handVisuals.ringTip + .getTransform() + .getWorldPosition() + + const thumbTipToIndexTipDistance = + indexTipPosition.distance(thumbTipPosition) + const thumbTipToMidTipDistance = midTipPosition.distance(thumbTipPosition) + const thumbTipToRingTipDistance = ringTipPosition.distance(thumbTipPosition) + + const averageDistance = + (thumbTipToIndexTipDistance + + thumbTipToMidTipDistance + + thumbTipToRingTipDistance) / + 3 + + const clampedAverageDistance = MathUtils.clamp( + averageDistance, + MIN_MEAN_AVG_FINGER_DISTANCE, + MAX_MEAN_AVG_FINGER_DISTANCE, + ) + + const scaledAverageDistance = MathUtils.remap( + clampedAverageDistance, + MIN_MEAN_AVG_FINGER_DISTANCE, + MAX_MEAN_AVG_FINGER_DISTANCE, + GRADIENT_SCALE_FACTOR_MIN, + GRADIENT_SCALE_FACTOR_MAX, + ) + + this.currentAverageScaleFactor = + this.gradientScaleFactorMovingAverage.filter( + scaledAverageDistance, + Date.now(), + ) + } + + private updateVisuals() { + if (this.gradientQuadSceneObject === null) { + return + } + + const gradientQuadRenderMeshComponent = + this.gradientQuadSceneObject.getComponent("RenderMeshVisual") + + gradientQuadRenderMeshComponent.mainMaterial.mainPass.baseColor = withAlpha( + gradientQuadRenderMeshComponent.mainMaterial.mainPass.baseColor, + this.gradientOcclusionOpacity, + ) + + const gradientQuadLocalScale = GRADIENT_QUAD_LOCAL_SCALE.uniformScale( + MathUtils.remap( + this.currentAverageScaleFactor, + GRADIENT_SCALE_FACTOR_MIN, + GRADIENT_SCALE_FACTOR_MAX, + GRADIENT_QUAD_MIN_SCALE, + GRADIENT_QUAD_MAX_SCALE, + ), + ) + + this.gradientQuadSceneObject + .getTransform() + .setLocalScale(gradientQuadLocalScale) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts.meta new file mode 100644 index 00000000..4f916c8c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/HandVisual/RadialOcclusionView.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! c2884562-d84d-4e67-9cf3-1871c4a5c032 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c2884562-d84d-4e67-9cf3-1871c4a5c032 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! 5f955622-ddc0-493d-b410-9b00bdd56600 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts new file mode 100644 index 00000000..a3a56292 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts @@ -0,0 +1,365 @@ +import DefaultHeadlockController, { + DefaultHeadlockConfig, +} from "./HeadlockController" + +/** + * This class provides functionality to lock the camera's position and rotation relative to the user's head movements. It allows configuration of distance, translation, and rotation settings to control how the camera follows the user's head. + */ +@component +export class Headlock extends BaseScriptComponent { + private controller!: DefaultHeadlockController + + @ui.group_start("Headlock") + @input + @hint("How far away the target will be from the camera") + private _distance: number = 50 + @ui.group_start("Head Translation") + @input + @hint( + "If the camera will follow when the user moves their head along XZ-plane", + ) + private _xzEnabled: boolean = true + @input + @hint( + "How fast the camera will follow along the XZ-plane, 0.1 for delayed follow, 1 for instant follow.", + ) + private _xzEasing: number = 1 + @input + @hint("If the camera will follow when the user moves their head along Y-axis") + private _yEnabled: boolean = true + @input + @hint( + "How fast the camera will follow along the Y-axis, 0.1 for delayed follow, 1 for instant follow.", + ) + private _yEasing: number = 1 + @input + @hint( + "The magnitude of change needed to activate a translation for the target to follow the camera.", + ) + @ui.group_end + private _translationBuffer: number = 0 + @ui.group_start("Head Rotation") + @input + @hint( + "If the camera will NOT follow when the user moves their head along the pitch-axis (looking up/down)", + ) + private _lockedPitch: boolean = true + @input + @hint( + "How fast the camera will follow along the pitch-axis, 0.1 for delayed follow, 1 for instant follow.", + ) + private _pitchEasing: number = 1 + @input + @hint( + "How many degrees of offset from the center point should the target sit", + ) + private _pitchOffsetDegrees: number = 0 + @input + @hint( + "How many degrees of leeway along each direction (up/down) before change starts to occur", + ) + private _pitchBufferDegrees: number = 0 + @input + @hint( + "If the camera will follow when the user moves their head along the yaw-axis (looking left/right)", + ) + private _lockedYaw: boolean = true + @input + @hint( + "How fast the camera will follow along the yaw-axis, 0.1 for delayed follow, 1 for instant follow.", + ) + private _yawEasing: number = 1 + @input + @hint( + "How many degrees of offset from the center point should the target sit", + ) + private _yawOffsetDegrees: number = 0 + @input + @hint( + "How many degrees of leeway along each direction (left/right) before change starts to occur", + ) + @ui.group_end + @ui.group_end + private _yawBufferDegrees: number = 0 + + onAwake(): void { + const headlockConfig: DefaultHeadlockConfig = { + script: this, + target: this.getSceneObject(), + distance: this.distance, + xzEnabled: this.xzEnabled, + xzEasing: this.xzEasing, + yEnabled: this.yEnabled, + yEasing: this.yEasing, + translationBuffer: this.translationBuffer, + lockedPitch: this.lockedPitch, + pitchEasing: this.pitchEasing, + pitchOffsetDegrees: this.pitchOffsetDegrees, + pitchBufferDegrees: this.pitchBufferDegrees, + lockedYaw: this.lockedYaw, + yawEasing: this.yawEasing, + yawOffsetDegrees: this.yawOffsetDegrees, + yawBufferDegrees: this.yawBufferDegrees, + headlockComponent: this, + } + + this.controller = new DefaultHeadlockController(headlockConfig) + } + /** + * Snaps the object to its exact desired position, regardless of easing, unlocks, buffers, etc. Should be used after modifying values that affect the desired position (such as offset, distance) to snap the object into place without having a strange path. + */ + snapToOffsetPosition = (): void => { + this.controller.resetPosition() + } + /** + * Get how far the SceneObject will be from the user. + */ + get distance(): number { + return this._distance + } + + /** + * Set how far the SceneObject will be from the user. + */ + set distance(distance: number) { + if (distance === this._distance) { + return + } + this._distance = distance + this.controller.distance = distance + } + + /** + * Get if the camera will follow when the user moves their head along XZ-plane. For most cases, this should stay enabled. + */ + get xzEnabled(): boolean { + return this._xzEnabled + } + + /** + * Sets if the camera will follow when the user moves their head along XZ-plane. For most cases, this should stay enabled. + */ + set xzEnabled(enabled: boolean) { + if (enabled === this._xzEnabled) { + return + } + this._xzEnabled = enabled + this.controller.xzEnabled = enabled + } + + /** + * Get how fast the camera will follow along the XZ-plane, 0.1 for delayed follow, 1 for instant follow. + */ + get xzEasing(): number { + return this._xzEasing + } + + /** + * Set how fast the camera will follow along the XZ-plane, 0.1 for delayed follow, 1 for instant follow. + */ + set xzEasing(easing: number) { + if (easing === this._distance) { + return + } + this._xzEasing = easing + this.controller.xzEasing = easing + } + + /** + * Get if the camera will follow when the user moves their head along Y-axis. For most cases, this should stay enabled. + */ + get yEnabled(): boolean { + return this._yEnabled + } + + /** + * Set if the camera will follow when the user moves their head along Y-axis. For most cases, this should stay enabled. + */ + set yEnabled(enabled: boolean) { + if (enabled === this._yEnabled) { + return + } + this._yEnabled = enabled + this.controller.yEnabled = enabled + } + + /** + * Get how fast the camera will follow along the Y-axis, 0.1 for delayed follow, 1 for instant follow. + */ + get yEasing(): number { + return this._yEasing + } + + /** + * Set how fast the camera will follow along the Y-axis, 0.1 for delayed follow, 1 for instant follow. + */ + set yEasing(easing: number) { + if (easing === this._yEasing) { + return + } + this._yEasing = easing + this.controller.yEasing = easing + } + + /** + * Get the magnitude of change (in centimeters) needed to activate a translation for the target to follow the user's head translation. + */ + get translationBuffer(): number { + return this._translationBuffer + } + + /** + * Set the magnitude of change (in centimeters) needed to activate a translation for the target to follow the user's head translation. To keep the SceneObject from 'wobbling' when the user has an unstable head, a small buffer is recommended rather than 0. + */ + set translationBuffer(buffer: number) { + if (buffer === this._translationBuffer) { + return + } + this._translationBuffer = buffer + this.controller.translationBuffer = buffer + } + + /** + * Get if the camera will follow when the user moves their head along the pitch-axis (looking up/down) + */ + get lockedPitch(): boolean { + return this._lockedPitch + } + + /** + * Set if the camera will follow when the user moves their head along the pitch-axis (looking up/down) + */ + set lockedPitch(locked: boolean) { + if (locked === this._lockedPitch) { + return + } + this._lockedPitch = locked + this.controller.unlockPitch = !locked + } + + /** + * Get how many degrees of offset from the center point should the target sit. Positive values place the element below the center. + */ + get pitchOffsetDegrees(): number { + return this._pitchOffsetDegrees + } + + /** + * Set how many degrees of offset from the center point should the target sit. Positive values place the element below the center. + */ + set pitchOffsetDegrees(degrees: number) { + if (degrees === this._pitchOffsetDegrees) { + return + } + this._pitchOffsetDegrees = degrees + this.controller.pitchOffsetDegrees = degrees + } + + /** + * Get how fast the camera will follow along the pitch-axis, 0.1 for delayed follow, 1 for instant follow. + */ + get pitchEasing(): number { + return this._pitchEasing + } + + /** + * Set how fast the camera will follow along the pitch-axis, 0.1 for delayed follow, 1 for instant follow. + */ + set pitchEasing(easing: number) { + if (easing === this._pitchEasing) { + return + } + this._pitchEasing = easing + this.controller.pitchEasing = easing + } + + /** + * Get how many degrees of leeway along each direction (up/down) before change starts to occur. + */ + get pitchBufferDegrees(): number { + return this._pitchBufferDegrees + } + + /** + * Set how many degrees of leeway along each direction (up/down) before change starts to occur. + */ + set pitchBufferDegrees(degrees: number) { + if (degrees === this._pitchBufferDegrees) { + return + } + this._pitchBufferDegrees = degrees + this.controller.pitchBufferDegrees = degrees + } + + /** + * Get if the camera will follow when the user moves their head along the yaw-axis (looking left/right) + */ + get lockedYaw(): boolean { + return this._lockedYaw + } + + /** + * Set if the camera will follow when the user moves their head along the yaw-axis (looking left/right) + */ + set lockedYaw(locked: boolean) { + if (locked === this._lockedYaw) { + return + } + this._lockedYaw = locked + this.controller.unlockYaw = !locked + } + + /** + * Get how many degrees of offset from the center point should the target sit. Positive values place the element to the left. + */ + get yawOffsetDegrees(): number { + return this._yawOffsetDegrees + } + + /** + * Set how many degrees of offset from the center point should the target sit. Positive values place the element to the left. + */ + set yawOffsetDegrees(degrees: number) { + if (degrees === this._yawOffsetDegrees) { + return + } + this._yawOffsetDegrees = degrees + this.controller.yawOffsetDegrees = degrees + } + + /** + * Get how fast the camera will follow along the yaw-axis, 0.1 for delayed follow, 1 for instant follow. + */ + get yawEasing(): number { + return this._yawEasing + } + + /** + * Set how fast the camera will follow along the yaw-axis, 0.1 for delayed follow, 1 for instant follow. + */ + set yawEasing(easing: number) { + if (easing === this._yawEasing) { + return + } + this._yawEasing = easing + this.controller.yawEasing = easing + } + + /** + * Get how many degrees of leeway along each direction (left/right) before change starts to occur. + */ + get yawBufferDegrees(): number { + return this._yawBufferDegrees + } + + /** + * Set how many degrees of leeway along each direction (left/right) before change starts to occur. + */ + set yawBufferDegrees(degrees: number) { + if (degrees === this._yawBufferDegrees) { + return + } + this._yawBufferDegrees = degrees + this.controller.yawBufferDegrees = degrees + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts.meta new file mode 100644 index 00000000..5016ce0e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/Headlock.ts.meta @@ -0,0 +1,84 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 37c21f9a-dd95-4665-ac5c-60c72e00954d + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 37c21f9a-dd95-4665-ac5c-60c72e00954d + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! a08d14c0-f028-40cb-8d32-708ad6679dc5 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _distance: false + _lockedPitch: false + _lockedYaw: false + _pitchBufferDegrees: false + _pitchEasing: false + _pitchOffsetDegrees: false + _translationBuffer: false + _xzEasing: false + _xzEnabled: false + _yEasing: false + _yEnabled: false + _yawBufferDegrees: false + _yawEasing: false + _yawOffsetDegrees: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - _distance: ! 50.000000 + _xzEnabled: true + _xzEasing: ! 1.000000 + _yEnabled: true + _yEasing: ! 1.000000 + _translationBuffer: ! 0.000000 + _lockedPitch: true + _pitchEasing: ! 1.000000 + _pitchOffsetDegrees: ! 0.000000 + _pitchBufferDegrees: ! 0.000000 + _lockedYaw: true + _yawEasing: ! 1.000000 + _yawOffsetDegrees: ! 0.000000 + _yawBufferDegrees: ! 0.000000 + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Headlock"}' + - '// @input float _distance = 50 {"hint":"How far away the target will be from the camera"}' + - '// @ui {"widget":"group_start", "label":"Head Translation"}' + - '// @input bool _xzEnabled = true {"hint":"If the camera will follow when the user moves their head along XZ-plane"}' + - '// @input float _xzEasing = 1 {"hint":"How fast the camera will follow along the XZ-plane, 0.1 for delayed follow, 1 for instant follow."}' + - '// @input bool _yEnabled = true {"hint":"If the camera will follow when the user moves their head along Y-axis"}' + - '// @input float _yEasing = 1 {"hint":"How fast the camera will follow along the Y-axis, 0.1 for delayed follow, 1 for instant follow."}' + - '// @input float _translationBuffer {"hint":"The magnitude of change needed to activate a translation for the target to follow the camera."}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Head Rotation"}' + - '// @input bool _lockedPitch = true {"hint":"If the camera will NOT follow when the user moves their head along the pitch-axis (looking up/down)"}' + - '// @input float _pitchEasing = 1 {"hint":"How fast the camera will follow along the pitch-axis, 0.1 for delayed follow, 1 for instant follow."}' + - '// @input float _pitchOffsetDegrees {"hint":"How many degrees of offset from the center point should the target sit"}' + - '// @input float _pitchBufferDegrees {"hint":"How many degrees of leeway along each direction (up/down) before change starts to occur"}' + - '// @input bool _lockedYaw = true {"hint":"If the camera will follow when the user moves their head along the yaw-axis (looking left/right)"}' + - '// @input float _yawEasing = 1 {"hint":"How fast the camera will follow along the yaw-axis, 0.1 for delayed follow, 1 for instant follow."}' + - '// @input float _yawOffsetDegrees {"hint":"How many degrees of offset from the center point should the target sit"}' + - '// @input float _yawBufferDegrees {"hint":"How many degrees of leeway along each direction (left/right) before change starts to occur"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts new file mode 100644 index 00000000..bfa2afc6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts @@ -0,0 +1,315 @@ +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {Headlock} from "./Headlock" +import HeadlockRotationCalculator from "./HeadlockRotationCalculator" +import HeadlockTranslationCalculator from "./HeadlockTranslationCalculator" + +export enum RotationAxis { + Pitch, + Yaw, +} + +export type DefaultHeadlockConfig = { + script: ScriptComponent + target: SceneObject + distance: number + duration?: number + xzEnabled?: boolean + xzEasing?: number + yEnabled?: boolean + yEasing?: number + translationBuffer?: number + lockedPitch?: boolean + pitchEasing?: number + pitchOffsetDegrees?: number + pitchBufferDegrees?: number + lockedYaw?: boolean + yawEasing?: number + yawOffsetDegrees?: number + yawBufferDegrees?: number + headlockComponent: Headlock +} + +const rotationAxes = [RotationAxis.Pitch, RotationAxis.Yaw] + +const TAG = "HeadlockController" + +const DEFAULT_DURATION = 0.033 + +export default class DefaultHeadlockController { + private worldCameraProvider = WorldCameraFinderProvider.getInstance() + + // When true, the target will be moved according to the user's gaze. + private headlocked: boolean + + // The radius of the sphere on which the target rotates on. + private _distance: number + + // The center of the sphere that the target sits on will be controlled separately. + private translationCalculator: HeadlockTranslationCalculator + + // The angles along each axes will be calculated separately + private pitchCalculator: HeadlockRotationCalculator + private yawCalculator: HeadlockRotationCalculator + + // The target will be the SceneObject to rotate. + private target: SceneObject + private targetTransform: Transform + + // The target will move along a sphere according to the camera's rotation, maintaining the same pitch / yaw offset wherever the user looks. + private cameraTransform: Transform = this.worldCameraProvider.getTransform() + + private updateEvent: SceneEvent + private enableEvent: SceneEvent + + private headlockComponent: Headlock + + constructor(private config: DefaultHeadlockConfig) { + this.target = config.target + this.targetTransform = this.target.getTransform() + this.headlockComponent = config.headlockComponent + + this.headlocked = true + + this._distance = config.distance + + // Set up the translation calculator to center the sphere on the user's head with configurable behavior. + this.translationCalculator = new HeadlockTranslationCalculator({ + center: this.cameraTransform.getWorldPosition(), + duration: config.duration ?? DEFAULT_DURATION, + xzEnabled: config.xzEnabled ?? true, + xzEasing: config.xzEasing ?? 1, + yEnabled: config.yEnabled ?? true, + yEasing: config.yEasing ?? 1, + translationBuffer: config.translationBuffer ?? 0, + }) + + // Set up the rotation calculators to rotate the target along the sphere about the axes with configurable behavior. + this.pitchCalculator = new HeadlockRotationCalculator({ + distance: this.distance, + axis: RotationAxis.Pitch, + duration: config.duration ?? DEFAULT_DURATION, + axisEnabled: config.lockedPitch ?? true, + axisEasing: config.pitchEasing ?? 1, + axisOffsetRadians: MathUtils.DegToRad * (config.pitchOffsetDegrees ?? 0), + axisBufferRadians: MathUtils.DegToRad * (config.pitchBufferDegrees ?? 0), + }) + + this.yawCalculator = new HeadlockRotationCalculator({ + distance: this.distance, + axis: RotationAxis.Yaw, + duration: config.duration ?? DEFAULT_DURATION, + axisEnabled: config.lockedYaw ?? true, + axisEasing: config.yawEasing ?? 1, + axisOffsetRadians: MathUtils.DegToRad * (config.yawOffsetDegrees ?? 0), + axisBufferRadians: MathUtils.DegToRad * (config.yawBufferDegrees ?? 0), + }) + this.updateEvent = config.script.createEvent("UpdateEvent") + this.enableEvent = config.script.createEvent("OnEnableEvent") + + this.updateEvent.bind(this.onUpdate.bind(this)) + + // Whenever the script component or target object is re-enabled, reset the target to correct position. + this.enableEvent.bind(this.resetPosition.bind(this)) + this.target.onEnabled.add(this.resetPosition.bind(this)) + + this.resetPosition() + } + + get distance(): number { + return this._distance + } + set distance(distance: number) { + this._distance = distance + this.pitchCalculator.distance = distance + this.yawCalculator.distance = distance + } + + get xzEnabled(): boolean { + return this.translationCalculator.xzEnable + } + set xzEnabled(enabled: boolean) { + this.translationCalculator.xzEnable = enabled + } + + get yEnabled(): boolean { + return this.translationCalculator.yEnable + } + set yEnabled(enabled: boolean) { + this.translationCalculator.yEnable = enabled + } + + get xzEasing(): number { + return this.translationCalculator.xzEasing + } + set xzEasing(easing: number) { + this.translationCalculator.xzEasing = easing + } + + get yEasing(): number { + return this.translationCalculator.yEasing + } + set yEasing(easing: number) { + this.translationCalculator.yEasing = easing + } + + get translationBuffer(): number { + return this.translationCalculator.translationBuffer + } + set translationBuffer(distance: number) { + this.translationCalculator.translationBuffer = distance + } + + get unlockPitch(): boolean { + return !this.pitchCalculator.axisEnabled + } + set unlockPitch(unlocked: boolean) { + this.pitchCalculator.axisEnabled = !unlocked + } + + get pitchOffsetDegrees(): number { + return MathUtils.RadToDeg * this.pitchCalculator.axisOffsetRadians + } + set pitchOffsetDegrees(offsetDegrees: number) { + this.pitchCalculator.axisOffsetRadians = MathUtils.DegToRad * offsetDegrees + } + + get pitchEasing(): number { + return this.pitchCalculator.axisEasing + } + set pitchEasing(easing: number) { + this.pitchCalculator.axisEasing = easing + } + + get pitchBufferDegrees(): number { + return MathUtils.RadToDeg * this.pitchCalculator.axisBufferRadians + } + set pitchBufferDegrees(bufferDegrees: number) { + this.pitchCalculator.axisBufferRadians = MathUtils.DegToRad * bufferDegrees + } + + get unlockYaw(): boolean { + return !this.yawCalculator.axisEnabled + } + set unlockYaw(unlocked: boolean) { + this.yawCalculator.axisEnabled = !unlocked + } + + get yawOffsetDegrees(): number { + return MathUtils.RadToDeg * this.yawCalculator.axisOffsetRadians + } + set yawOffsetDegrees(offsetDegrees: number) { + this.yawCalculator.axisOffsetRadians = MathUtils.DegToRad * offsetDegrees + } + + get yawEasing(): number { + return this.yawCalculator.axisEasing + } + set yawEasing(easing: number) { + this.yawCalculator.axisEasing = easing + } + + get yawBufferDegrees(): number { + return MathUtils.RadToDeg * this.yawCalculator.axisBufferRadians + } + set yawBufferDegrees(bufferDegrees: number) { + this.yawCalculator.axisBufferRadians = MathUtils.DegToRad * bufferDegrees + } + + // Returns a NON-NORMALIZED unit vector aligned with the line to the target from the sphere's center for rotation along the sphere. + private getCenterToTargetVector() { + return this.targetTransform + .getWorldPosition() + .sub(this.translationCalculator.getCenter()) + } + + // Gets the direction in which the user is facing. + private getFaceForwardVector() { + return this.cameraTransform.back.normalize() + } + + // Rotates the target about each enabled axis separately. + private onUpdate(): void { + // If headlocking is currently disabled, do not update the target. + if (!this.headlocked) { + return + } + + // Move the sphere around the user's head and updates the target to maintain the same angle. + const translationOffset = this.translationCalculator.updateCenter( + this.cameraTransform.getWorldPosition() + ) + this.targetTransform.setWorldPosition( + translationOffset.add(this.targetTransform.getWorldPosition()) + ) + + // Rotate the target along the sphere to reach the desired offsets. + for (const axis of rotationAxes) { + let rotationOffset: vec3 + + switch (axis) { + // Head tilt is to be ignored for headlocking purposes, thus some vectors must be flattened on the XZ-plane if not already. + case RotationAxis.Pitch: + rotationOffset = this.pitchCalculator.getOffset( + // The pitch axis is the user's X-axis if yaw is enabled, otherwise use the world's X-axis. + this.headlockComponent.lockedYaw + ? this.cameraTransform.left.projectOnPlane(vec3.up()).normalize() // the axis vectors depend on if the other axis is enabled e.g. yaw disabled means we always use a constant right vector for pitch + : vec3.left(), + this.getCenterToTargetVector(), + vec3.up(), + this.getFaceForwardVector(), + this.cameraTransform.up + ) + break + case RotationAxis.Yaw: + rotationOffset = this.yawCalculator.getOffset( + // The yaw axis is the user's Y-axis projected onto a plane to prevent head-tilt from affecting positions if pitch is enabled, otherwise use the world's Y-axis. + this.headlockComponent.lockedPitch + ? this.cameraTransform.up.projectOnPlane( + new vec3( + this.cameraTransform.left.x, + 0, + this.cameraTransform.left.z + ) + ) + : vec3.up(), + this.getCenterToTargetVector(), + this.cameraTransform.right.projectOnPlane(vec3.up()), + this.getFaceForwardVector() + ) + break + default: + throw new Error(`Invalid axis: ${axis}`) + } + + this.targetTransform.setWorldPosition( + rotationOffset.add(this.targetTransform.getWorldPosition()) + ) + } + } + + public setHeadlocked(headlocked: boolean) { + this.headlocked = headlocked + } + + public isHeadlocked(): boolean { + return this.headlocked + } + + // Place the target at correct position according to offsets. + public resetPosition(): void { + let offset = this.getFaceForwardVector().uniformScale(this.distance) + let pitchQuaternion = quat.angleAxis( + MathUtils.DegToRad * (this.headlockComponent.pitchOffsetDegrees ?? 0), + vec3.left() + ) + offset = pitchQuaternion.multiplyVec3(offset) + let yawQuaternion = quat.angleAxis( + MathUtils.DegToRad * (this.headlockComponent.yawOffsetDegrees ?? 0), + vec3.up() + ) + offset = yawQuaternion.multiplyVec3(offset) + this.targetTransform.setWorldPosition( + this.cameraTransform.getWorldPosition().add(offset) + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts.meta new file mode 100644 index 00000000..842524b8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockController.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! fe1620d2-4e89-49a7-a04f-ffe90c81f98e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! fe1620d2-4e89-49a7-a04f-ffe90c81f98e + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 44e21eb0-2d26-469d-b63a-b7209c6921d1 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts new file mode 100644 index 00000000..b5731979 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts @@ -0,0 +1,210 @@ +import {RotationAxis} from "./HeadlockController" + +export type RotationCalculatorConfig = { + distance: number + axis: RotationAxis + duration: number + axisEnabled?: boolean + axisEasing?: number + axisOffsetRadians?: number + axisBufferRadians?: number +} + +const TAG = "HeadlockRotationCalculator" + +/** + * HeadlockRotationCalculator is used to calculate the offset to position an object to maintain a certain offset relative to where the user is looking. + */ +export default class HeadlockRotationCalculator { + private _distance: number = 50 + + private axis: RotationAxis + private _axisEnabled = true + + private _axisOffsetRadians = 0 + private _axisEasing = 0 + private _axisBufferRadians = 0 + + private duration: number + + constructor(config: RotationCalculatorConfig) { + this.distance = config.distance + this.axis = config.axis + this.duration = config.duration + + this.axisEnabled = config.axisEnabled ?? false + this.axisEasing = config.axisEasing ?? 1 + this.axisOffsetRadians = config.axisOffsetRadians ?? 0 + this.axisBufferRadians = config.axisBufferRadians ?? 0 + } + + get distance(): number { + return this._distance + } + set distance(distance: number) { + this._distance = distance + } + + get axisEnabled(): boolean { + return this._axisEnabled + } + set axisEnabled(enabled: boolean) { + this._axisEnabled = enabled + } + + get axisOffsetRadians(): number { + return this._axisOffsetRadians + } + set axisOffsetRadians(radians: number) { + this._axisOffsetRadians = radians + } + + get axisEasing(): number { + return this._axisEasing + } + set axisEasing(easing: number) { + this._axisEasing = easing + } + + get axisBufferRadians(): number { + return this._axisBufferRadians + } + set axisBufferRadians(radians: number) { + this._axisBufferRadians = radians + } + + /* + * Returns the exact angle to rotate the target by along the given axis. + * This function will include the logic for interpolation / buffer tolerances later. + */ + private calculateRotationOffset( + angle: number, + axisVector: vec3, + positionVector: vec3 + ): vec3 { + const rotationQuaternion = quat.angleAxis(angle, axisVector) + + // Rotate the current offset about the given axis, then normalize the new position onto the sphere. + let newPositionVector = rotationQuaternion + .multiplyVec3(positionVector) + .normalize() + .uniformScale(this.distance) + + if (this.axisEasing !== 1) { + const timeRatio = getDeltaTime() / this.duration + newPositionVector = vec3.lerp( + positionVector, + newPositionVector, + this.axisEasing * timeRatio + ) + } + const rotationOffset = newPositionVector.sub(positionVector) + + return rotationOffset + } + + /** + * Returns the angle about specified axis to rotate the target to align with the camera. + * By projecting the forward/up vector onto planes defined by the relevant axis as the normal, we can separately calculate the angles of each axis. + * The separate calculations allow for each axis to have its own buffer / interpolation values. + * Because the user is expected to walk around freely, we use local X and Z axes for calculation, but global Y axis as the user's perception of 'up' is constant. + */ + private calculateAngleDelta( + axisVector: vec3, + positionVector: vec3, + originVector: vec3, + forwardVector: vec3, + upVector?: vec3 + ): number { + const positionVectorOnPlane = positionVector + .projectOnPlane(axisVector) + .normalize() + const forwardVectorOnPlane = forwardVector + .projectOnPlane(axisVector) + .normalize() + + let angleBetween = forwardVectorOnPlane.angleTo(positionVectorOnPlane) + + let forwardAngleOnPlane = originVector.angleTo(forwardVectorOnPlane) + let positionAngleOnPlane = originVector.angleTo(positionVectorOnPlane) + + if (this.axis === RotationAxis.Pitch && upVector !== undefined) { + const forwardVectorOnXZ = new vec2( + forwardVectorOnPlane.x, + forwardVectorOnPlane.z + ).normalize() + const positionVectorOnXZ = new vec2( + positionVectorOnPlane.x, + positionVectorOnPlane.z + ).normalize() + + const sameDirection = + forwardVectorOnXZ.angleTo(positionVectorOnXZ) < Math.PI / 2 + + if (upVector.y < 0 || !sameDirection) { + const direction = -Math.sign(forwardVectorOnPlane.y) + const rotatedOriginVec = quat + .angleAxis((direction * Math.PI) / 2, axisVector) + .multiplyVec3(originVector) + + forwardAngleOnPlane = rotatedOriginVec.angleTo(forwardVectorOnPlane) + positionAngleOnPlane = rotatedOriginVec.angleTo(positionVectorOnPlane) + } + } + + if (forwardAngleOnPlane > positionAngleOnPlane) { + angleBetween = -angleBetween + } + + const angleDelta = this.axisOffsetRadians - angleBetween + if (Math.abs(angleDelta) < this.axisBufferRadians) { + return 0 + } + + // Calculate the angle to rotate just enough to keep the camera within the buffer cone. + // Possibly not needed. + const bufferAngle = + angleDelta - Math.sign(angleDelta) * this.axisBufferRadians + + return bufferAngle + } + + /** + * Returns the offset to move the target by based on the following vectors + * @param axisVector - the axis to rotate the target about + * @param positionVector - the current local position of the target relative to headlock center + * @param originVector - the vector to calculate an origin of rotation to determine counterclockwise or clockwise rotation + * @param forwardVector - the current look vector of the headlock controller + * @returns + */ + public getOffset( + axisVector: vec3, + positionVector: vec3, + originVector: vec3, + forwardVector: vec3, + upVector?: vec3 + ): vec3 { + if (this.skipRotation()) { + return vec3.zero() + } + const angle = this.calculateAngleDelta( + axisVector, + positionVector, + originVector, + forwardVector, + upVector + ) + const rotationOffset = this.calculateRotationOffset( + angle, + axisVector, + positionVector + ) + + return rotationOffset + } + + // Returns if the controller should skip translating about the specified axis. + private skipRotation(): boolean { + return !this.axisEnabled + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts.meta new file mode 100644 index 00000000..ceaddf65 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockRotationCalculator.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! dc104f74-e14c-4e38-b24c-8d0c76c8f572 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! dc104f74-e14c-4e38-b24c-8d0c76c8f572 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! f4c855d5-2e6b-413e-ba52-91e5b7426c1f + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts new file mode 100644 index 00000000..7f36ce38 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts @@ -0,0 +1,144 @@ +export type TranslationCalculatorConfig = { + center: vec3 + duration: number + xzEnabled?: boolean + xzEasing?: number + yEnabled?: boolean + yEasing?: number + translationBuffer?: number +} + +const TAG = "HeadlockTranslationCalculator" + +/** + * HeadlockTranslationCalculator is used to calculate the center of the sphere used when calculating the target's position relative to the pitch/yaw orientation of the camera. + */ +export default class HeadlockTranslationCalculator { + private center: vec3 + + // Controls the behavior of the sphere following along the flat plane defined by vec3.up(). + private _xzEnable: boolean = true + private _xzEasing: number = 1 + + // Controls the behavior of the sphere following along the line defined by vec3.up(). + private _yEnable: boolean = true + private _yEasing: number = 1 + + // Use an estimated time for the duration between each update to prevent FPS issues from slowing down billboarding effect. + private duration: number + + // If the user is 'close enough' to the center of the sphere, we avoid moving the sphere to decrease jitter + private _translationBuffer: number = 0 + + constructor(config: TranslationCalculatorConfig) { + this.center = config.center + + this.duration = config.duration + + this.xzEnable = config.xzEnabled ?? true + this.xzEasing = config.xzEasing ?? 1 + + this.yEnable = config.yEnabled ?? true + this.yEasing = config.yEasing ?? 1 + + this.translationBuffer = config.translationBuffer ?? 0 + } + + get xzEnable(): boolean { + return this._xzEnable + } + set xzEnable(enabled: boolean) { + this._xzEnable = enabled + } + + get yEnable(): boolean { + return this._yEnable + } + set yEnable(enabled: boolean) { + this._yEnable = enabled + } + + get xzEasing(): number { + return this._xzEasing + } + set xzEasing(easing: number) { + this._xzEasing = easing + } + + get yEasing(): number { + return this._yEasing + } + set yEasing(easing: number) { + this._yEasing = easing + } + + get translationBuffer(): number { + return this._translationBuffer + } + set translationBuffer(bufferDistance: number) { + this._translationBuffer = bufferDistance + } + + /** + * Returns the current center of the sphere. + */ + public getCenter(): vec3 { + return this.center + } + + /** + * Updates the center of the sphere and returns the offset vector to move the target by. + * @param cameraPosition - the current world position of the camera + */ + public updateCenter(cameraPosition: vec3): vec3 { + const oldCenter = new vec3(this.center.x, this.center.y, this.center.z) + // Test below implementation once everything is working. + // const oldCenter = this.center + + if (cameraPosition.sub(this.center).length < this.translationBuffer) { + return vec3.zero() + } + + if (this.xzEnable) { + const cameraPositionXZ = cameraPosition.projectOnPlane(vec3.up()) + const centerXZ = this.center.projectOnPlane(vec3.up()) + + let offset: vec3 + if (this.xzEasing !== 1) { + let timeRatio = getDeltaTime() / this.duration + const interpolatedXZ = vec3.lerp( + centerXZ, + cameraPositionXZ, + this.xzEasing * timeRatio + ) + offset = interpolatedXZ.sub(centerXZ) + } else { + offset = cameraPositionXZ.sub(centerXZ) + } + + this.center = this.center.add(offset) + } + + if (this.yEnable) { + const cameraPositionY = cameraPosition.y + const centerY = this.center.y + + let offset: number + if (this.yEasing !== 1) { + let timeRatio = getDeltaTime() / this.duration + const interpolatedY = MathUtils.lerp( + centerY, + cameraPositionY, + this.yEasing * timeRatio + ) + offset = interpolatedY - centerY + } else { + offset = cameraPositionY - centerY + } + + this.center = this.center.add(vec3.up().uniformScale(offset)) + } + + return this.center.sub(oldCenter) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts.meta new file mode 100644 index 00000000..6eb1a6d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Headlock/HeadlockTranslationCalculator.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 4b4508e4-b6d3-431b-91ce-bb134c53855a + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4b4508e4-b6d3-431b-91ce-bb134c53855a + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c6cc893d-32bc-47c1-9383-47f248b38be6 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts new file mode 100644 index 00000000..0f57b93f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts @@ -0,0 +1,359 @@ +import { + DragInteractorEvent, + InteractorEvent, +} from "../../../Core/Interactor/InteractorEvent" + +import Event from "../../../Utils/Event" +import {InteractionConfigurationProvider} from "../../../Providers/InteractionConfigurationProvider/InteractionConfigurationProvider" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {InteractorInputType} from "../../../Core/Interactor/Interactor" +import NativeLogger from "../../../Utils/NativeLogger" + +export type InteractableEventArgs = Omit + +const TAG = "Interactable" + +/** + * This class represents an interactable object that can respond to various interaction events such as hover, trigger, and drag. It provides event handlers for these interactions and uses the InteractionConfigurationProvider for configuration. + */ +@component +export class Interactable extends BaseScriptComponent { + // Events + private onHoverEnterEvent = new Event() + private onHoverUpdateEvent = new Event() + private onHoverExitEvent = new Event() + private onInteractorHoverEnterEvent = new Event() + private onInteractorHoverExitEvent = new Event() + + private onTriggerStartEvent = new Event() + private onTriggerUpdateEvent = new Event() + private onTriggerEndEvent = new Event() + private onInteractorTriggerStartEvent = new Event() + private onInteractorTriggerEndEvent = new Event() + + private onDragStartEvent = new Event() + private onDragUpdateEvent = new Event() + private onDragEndEvent = new Event() + private onTriggerCanceledEvent = new Event() + + private interactionConfigurationProvider: InteractionConfigurationProvider = + InteractionConfigurationProvider.getInstance() + + // Native Logging + private log = new NativeLogger(TAG) + + /** + * Called whenever the interactable enters the hovered state + */ + onHoverEnter = this.onHoverEnterEvent.publicApi() + + /** + * Called whenever a new interactor hovers over this interactable + */ + onInteractorHoverEnter = this.onInteractorHoverEnterEvent.publicApi() + + /** + * Called whenever an interactor remains hovering over this interactable + */ + onHoverUpdate = this.onHoverUpdateEvent.publicApi() + + /** + * Called whenever the interactable is no longer hovered + */ + onHoverExit = this.onHoverExitEvent.publicApi() + + /** + * Called whenever an interactor exits hovering this interactable + */ + onInteractorHoverExit = this.onInteractorHoverExitEvent.publicApi() + + /** + * Called whenever the interactable enters the triggered state + */ + onTriggerStart = this.onTriggerStartEvent.publicApi() + + /** + * Called whenever an interactor triggers an interactable + */ + onInteractorTriggerStart = this.onInteractorTriggerStartEvent.publicApi() + + /** + * Called whenever an interactor continues to trigger an interactable + */ + onTriggerUpdate = this.onTriggerUpdateEvent.publicApi() + + /** + * Called whenever the interactable exits the triggered state + */ + onTriggerEnd = this.onTriggerEndEvent.publicApi() + + /** + * Called whenever an interactor is no longer triggering the interactable + */ + onInteractorTriggerEnd = this.onInteractorTriggerEndEvent.publicApi() + + /** + * Called whenever an interactor is lost and was in a down event with this interactable + */ + onTriggerCanceled = this.onTriggerCanceledEvent.publicApi() + + /** + * Called when an interactor is in a down event with this interactable and + * has moved a minimum drag distance + */ + onDragStart = this.onDragStartEvent.publicApi() + + /** + * Called when an interactor is in a down event with this interactable and + * is moving + */ + onDragUpdate = this.onDragUpdateEvent.publicApi() + + /** + * Called when an interactor was in a down event with this interactable and + * was dragging + */ + onDragEnd = this.onDragEndEvent.publicApi() + + // Interactor + private _hoveringInteractor: InteractorInputType = InteractorInputType.None + private _triggeringInteractor: InteractorInputType = InteractorInputType.None + + /** + * Provides all colliders associated with this Interactable + */ + colliders: ColliderComponent[] = [] + + /** + * Defines how an interactor can interact with this interactable. + * Values are: + * 1: Direct + * 2: Indirect + * 3: Direct/Indirect + * 4: Poke + */ + @input + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Direct", 1), + new ComboBoxItem("Indirect", 2), + new ComboBoxItem("Direct/Indirect", 3), + new ComboBoxItem("Poke", 4), + new ComboBoxItem("All", 7), + ]), + ) + targetingMode: number = 3 + + @input + @hint( + "Enable this to allow the Interactable to instantly be dragged on trigger rather than obeying the Interactor's drag threshold.", + ) + enableInstantDrag: boolean = false + + /** + * Returns if an Interactable is scrollable + */ + @input + isScrollable: boolean = false + + /** + * Determines whether one or more interactors can interactor with this interactable + */ + @input + allowMultipleInteractors: boolean = true + + onAwake(): void { + this.createEvent("OnDestroyEvent").bind(() => this.release()) + this.createEvent("OnEnableEvent").bind(() => { + this.enableColliders(true) + }) + this.createEvent("OnDisableEvent").bind(() => { + this.enableColliders(false) + }) + + InteractionManager.getInstance().registerInteractable(this) + } + release(): void { + InteractionManager.getInstance().deregisterInteractable(this) + } + + /** + * Notifies the interactable that it is entering hover state + * @param eventArgs - the interactor that is driving the event {@link Interactor} + */ + hoverEnter = (eventArgs: InteractableEventArgs): void => { + if (this._hoveringInteractor === InteractorInputType.None) { + this.onHoverEnterEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Hover Enter Event") + } + this._hoveringInteractor |= eventArgs.interactor.inputType + this.onInteractorHoverEnterEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Interactor Hover Enter Event") + } + + /** + * Notifies the interactable that it is still hovering + * @param eventArgs - event parameters, with omitted interactable + */ + hoverUpdate = (eventArgs: InteractableEventArgs): void => { + this.onHoverUpdateEvent.invoke({ + ...eventArgs, + interactable: this, + }) + } + + /** + * Notifies the interactable that it is exiting hover state + * @param eventArgs - event parameters, with omitted interactable + */ + hoverExit = (eventArgs: InteractableEventArgs): void => { + this._hoveringInteractor &= ~eventArgs.interactor.inputType + this.onInteractorHoverExitEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Interactor Hover Exit Event") + + if (this._hoveringInteractor === InteractorInputType.None) { + this.onHoverExitEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Hover Exit Event") + } + } + + /** + * Notifies the interactable that it is entering trigger state + * @param eventArgs - event parameters, with omitted interactable + */ + triggerStart = (eventArgs: InteractableEventArgs): void => { + if (this._triggeringInteractor === InteractorInputType.None) { + this.onTriggerStartEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Trigger Start Event") + } + + this._triggeringInteractor |= eventArgs.interactor.inputType + this.onInteractorTriggerStartEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Interactor Trigger Start Event") + } + + /** + * Notifies the interactable that it is still in a triggering state + * @param eventArgs - event parameters, with omitted interactable + */ + triggerUpdate = (eventArgs: InteractableEventArgs): void => { + this.onTriggerUpdateEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.dragStartOrUpdate(eventArgs) + } + + /** + * Notifies the interactable that it is exiting trigger state + * @param eventArgs - event parameters, with omitted interactable + */ + triggerEnd = (eventArgs: InteractableEventArgs): void => { + this._triggeringInteractor &= ~eventArgs.interactor.inputType + this.onInteractorTriggerEndEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Interactor Trigger End Event") + + if (this._triggeringInteractor === InteractorInputType.None) { + this.onTriggerEndEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Trigger End Event") + } + + this.dragEnd(eventArgs) + } + + /** + * Notifies the interactable that it is a cancelled state with the interactor + * @param eventArgs - event parameters, with omitted interactable + */ + triggerCanceled = (eventArgs: InteractableEventArgs): void => { + this._triggeringInteractor === InteractorInputType.None + this.onTriggerCanceledEvent.invoke({ + ...eventArgs, + interactable: this, + }) + this.log.v("InteractionEvent : " + "On Trigger Canceled Event") + + this.dragEnd(eventArgs) + } + + /** + * Interactors that are hovering this interactable + */ + get hoveringInteractor(): InteractorInputType { + return this._hoveringInteractor + } + + /** + * Interactors that are triggering this interactable + */ + get triggeringInteractor(): InteractorInputType { + return this._triggeringInteractor + } + + private dragStartOrUpdate(eventArgs: InteractableEventArgs) { + const currentDragVector = eventArgs.interactor.currentDragVector + if (currentDragVector === null) { + return + } + + const previousDragVector = eventArgs.interactor.previousDragVector + const dragInteractorEvent = { + ...eventArgs, + interactable: this, + dragVector: currentDragVector, + planecastDragVector: eventArgs.interactor.planecastDragVector, + } + + if (previousDragVector === null) { + this.onDragStartEvent.invoke(dragInteractorEvent) + this.log.v("InteractionEvent : " + "On Drag Start Event") + } else { + this.onDragUpdateEvent.invoke(dragInteractorEvent) + } + } + + private dragEnd(eventArgs: InteractableEventArgs) { + const previousDragVector = eventArgs.interactor.previousDragVector + if (previousDragVector === null) { + return + } + + this.onDragEndEvent.invoke({ + ...eventArgs, + interactable: this, + dragVector: previousDragVector, + planecastDragVector: eventArgs.interactor.planecastDragVector, + }) + this.log.v("InteractionEvent : " + "On Drag End Event") + } + + private enableColliders(enable: boolean) { + for (let i = 0; i < this.colliders.length; i++) { + this.colliders[i].enabled = enable + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts.meta new file mode 100644 index 00000000..822ac66a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable.ts.meta @@ -0,0 +1,48 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b37f5740-6cb3-4174-96c1-1f8acf49d165 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + allowMultipleInteractors: false + enableInstantDrag: false + isScrollable: true + targetingMode: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - targetingMode: ! 3.000000 + isScrollable: false + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + - + {} + InputLines: + - '// @input float targetingMode = 3 {"widget":"combobox", "values":[{"label":"Direct", "value":1}, {"label":"Indirect", "value":2}, {"label":"Direct/Indirect", "value":3}, {"label":"Poke", "value":4}, {"label":"All", "value":7}]}' + - "// @input bool enableInstantDrag {\"hint\":\"Enable this to allow the Interactable to instantly be dragged on trigger rather than obeying the Interactor's drag threshold.\"}" + - // @input bool isScrollable + - // @input bool allowMultipleInteractors = true + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts new file mode 100644 index 00000000..cffca5ba --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts @@ -0,0 +1,1275 @@ +import Event, {PublicApi, unsubscribe} from "../../../Utils/Event" +import { + Interactor, + InteractorInputType, + TargetingMode, +} from "../../../Core/Interactor/Interactor" +import { + OneEuroFilterConfig, + OneEuroFilterQuat, + OneEuroFilterVec3, +} from "../../../Utils/OneEuroFilter" + +import {Interactable} from "../Interactable/Interactable" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {InteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import {MobileInteractor} from "../../../Core/MobileInteractor/MobileInteractor" +import NativeLogger from "../../../Utils/NativeLogger" +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {validate} from "../../../Utils/validate" + +export type TranslateEventArg = { + interactable: Interactable + startPosition: vec3 + currentPosition: vec3 +} + +export type RotationEventArg = { + interactable: Interactable + startRotation: quat + currentRotation: quat +} + +export type ScaleEventArg = { + interactable: Interactable + startWorldScale: vec3 + currentWorldScale: vec3 +} + +export type TransformEventArg = { + interactable: Interactable + startTransform: mat4 + currentTransform: mat4 +} + +export type ScaleLimitEventArg = { + interactable: Interactable + currentValue: vec3 +} + +export enum RotationAxis { + All = "All", + X = "X", + Y = "Y", + Z = "Z", +} + +const TAG = "InteractableManipulation" + +const MOBILE_DRAG_MULTIPLIER = 0.5 +const STRETCH_SMOOTH_SPEED = 15 +const YAW_NEGATIVE_90 = quat.fromEulerAngles(0, -90, 0) + +const CachedTransform = { + transform: mat4.identity(), + position: vec3.zero(), + rotation: quat.quatIdentity(), + scale: vec3.one(), +} + +/** + * This class provides manipulation capabilities for interactable objects, including translation, rotation, and scaling. It allows configuration of the manipulation root, scale limits, and rotation axes. + */ +@component +export class InteractableManipulation extends BaseScriptComponent { + @ui.group_start("Interactable Manipulation") + @input("SceneObject") + @hint( + "Root SceneObject of the set of SceneObjects to manipulate. If left blank, this script's SceneObject will be treated as the root. The root's transform will be modified by this script.", + ) + @allowUndefined + private manipulateRootSceneObject: SceneObject | null = null + @input + @widget(new SliderWidget(0, 1, 0.05)) + @hint( + "The smallest this object can scale down to, relative to its original scale. A value of 0.5 means it cannot scale smaller than 50% of its current size", + ) + /** + * The smallest this object can scale down to, relative to its original scale. + * A value of 0.5 means it cannot scale smaller than 50% of its current size + */ + minimumScaleFactor: number = 0.25 + @input + @widget(new SliderWidget(1, 20, 0.5)) + @hint( + "The largest this object can scale up to, relative to its original scale. A value of 2 means it cannot scale larger than twice its current size", + ) + /** + * The largest this object can scale up to, relative to its original scale. + * A value of 2 means it cannot scale larger than twice its current size + */ + maximumScaleFactor: number = 20 + @input + private enableTranslation: boolean = true + @input + private enableRotation: boolean = true + @input + private enableScale: boolean = true + @input + @hint("Toggles forward stretch for manipulating objects from afar.") + /** + * Toggle for stretching the forward manipulation axis of an object + * so that you can push or pull objects quicker + */ + enableStretchZ: boolean = true + @input + @showIf("enableStretchZ", true) + showStretchZProperties: boolean = false + @input + @showIf("showStretchZProperties", true) + @hint("Z multiplier on the near end of the stretch scale") + zStretchFactorMin: number = 1.0 + @input + @showIf("showStretchZProperties", true) + @hint("Z multiplier on the far end of the stretch scale") + zStretchFactorMax: number = 12.0 + @input + @hint("Apply filtering to smooth manipulation") + private useFilter: boolean = true + @input + @showIf("useFilter", true) + private showFilterProperties: boolean = false + @input + @showIf("showFilterProperties", true) + minCutoff: number = 2 + @input + @showIf("showFilterProperties", true) + beta: number = 0.015 + @input + @showIf("showFilterProperties", true) + dcutoff: number = 1 + @input + showTranslationProperties: boolean = false + @input + @showIf("showTranslationProperties", true) + @hint("Enable translation along the world's X-axis.") + private _enableXTranslation: boolean = true + @input + @showIf("showTranslationProperties", true) + @hint("Enable translation along the world's Y-axis.") + private _enableYTranslation: boolean = true + @input + @showIf("showTranslationProperties", true) + @hint("Enable translation along the world's Z-axis.") + private _enableZTranslation: boolean = true + + @input + showRotationProperties: boolean = false + @input + @showIf("showRotationProperties", true) + @hint( + "Enable rotation about all axes or a single world axis (x,y,z) when using to two hands.", + ) + @widget( + new ComboBoxWidget([ + new ComboBoxItem("All", "All"), + new ComboBoxItem("X", "X"), + new ComboBoxItem("Y", "Y"), + new ComboBoxItem("Z", "Z"), + ]), + ) + private _rotationAxis: string = "All" + @ui.group_end + private defaultFilterConfig: OneEuroFilterConfig | undefined + private camera = WorldCameraFinderProvider.getInstance() + private interactionManager = InteractionManager.getInstance() + + // Keep track of "Unsubscribe" functions when adding callbacks to Interactable Events, to ensure proper cleanup on destroy + private unsubscribeBag: unsubscribe[] = [] + + private interactable: Interactable | null = null + + // Native Logging + private log = new NativeLogger(TAG) + + // If the manipulate parent is set, use that SceneObject's transform, otherwise use the transform of the script's SceneObject. + // This is useful when using an external object to move other objects (e.g. grab bar). + private manipulateRoot: Transform | undefined + + private originalWorldTransform = CachedTransform + private originalLocalTransform = CachedTransform + + private startTransform = CachedTransform + + private offsetPosition = vec3.zero() + private offsetRotation = quat.quatIdentity() + private initialInteractorDistance = 0 + + private startStretchInteractorDistance = 0 + private mobileStretch = 0 + private smoothedStretch = 0 + + private initialObjectScale = vec3.zero() + + private hitPointToTransform = vec3.zero() + + private interactors: Interactor[] = [] + + private cachedTargetingMode: TargetingMode = TargetingMode.None + + // Used to avoid gimbal lock when crossing the Y-axis during single-axis manipulation. + private currentRotationSign = 0 + private currentUp = vec3.zero() + + /** + * - HandTracking's OneEuroFilter does not support quaternions. + * - Quaternions need to use slerp to interpolate correctly, which + * is not currently supported by the filter function. + * - SampleOps that HandTracking OneEuroFilter uses has functions that + * are not supported by quaternions (such as magnitude or addition) + */ + private translateFilter!: OneEuroFilterVec3 + private rotationFilter!: OneEuroFilterQuat + private scaleFilter!: OneEuroFilterVec3 + + /** + * Gets the transform of the root of the manipulated object(s). + */ + getManipulateRoot(): Transform | undefined { + return this.manipulateRoot + } + + /** + * Sets the transform of the passed SceneObject as the root of the manipulated object(s). + */ + setManipulateRoot(root: Transform): void { + this.manipulateRoot = root + } + + /** + * Returns true translation is enabled + */ + canTranslate(): boolean { + return this.enableTranslation + } + + /** + * Toggle for allowing an object to translate + */ + setCanTranslate(enabled: boolean): void { + this.enableTranslation = enabled + } + + /** + * Returns true if any of rotation x, y, or z is enabled + */ + canRotate(): boolean { + return this.enableRotation + } + + /** + * Toggle for allowing an object to rotate + */ + setCanRotate(enabled: boolean): void { + this.enableRotation = enabled + } + + /** + * Returns true if any of scale x, y, or z is enabled + */ + canScale(): boolean { + return this.enableScale + } + + /** + * Toggle for allowing an object to scale + */ + setCanScale(enabled: boolean): void { + this.enableScale = enabled + } + + /** + * Set if translation along world X-axis is enabled. + */ + set enableXTranslation(enabled: boolean) { + this._enableXTranslation = enabled + } + + /** + * Returns if translation along world X-axis is enabled. + */ + get enableXTranslation(): boolean { + return this._enableXTranslation + } + + /** + * Set if translation along world Y-axis is enabled. + */ + set enableYTranslation(enabled: boolean) { + this._enableYTranslation = enabled + } + + /** + * Returns if translation along world Y-axis is enabled. + */ + get enableYTranslation(): boolean { + return this._enableYTranslation + } + + /** + * Set if translation along world Z-axis is enabled. + */ + set enableZTranslation(enabled: boolean) { + this._enableZTranslation = enabled + } + + /** + * Returns if translation along world Z-axis is enabled. + */ + get enableZTranslation(): boolean { + return this._enableZTranslation + } + + /** + * Set if rotation occurs about all axes or a single world axis (x,y,z) when using to two hands. + */ + set rotationAxis(axis: RotationAxis) { + this._rotationAxis = axis + } + + /** + * Get if rotation occurs about all axes or a single world axis (x,y,z) when using to two hands.. + */ + get rotationAxis(): RotationAxis { + return this._rotationAxis as RotationAxis + } + + // Callbacks + private onTranslationStartEvent = new Event() + /** + * Callback for when translation begins + */ + onTranslationStart: PublicApi = + this.onTranslationStartEvent.publicApi() + + private onTranslationUpdateEvent = new Event() + /** + * Callback for when translation updates each frame + */ + onTranslationUpdate: PublicApi = + this.onTranslationUpdateEvent.publicApi() + + private onTranslationEndEvent = new Event() + /** + * Callback for when translation has ended + */ + onTranslationEnd: PublicApi = + this.onTranslationEndEvent.publicApi() + + private onRotationStartEvent = new Event() + /** + * Callback for when rotation begins + */ + onRotationStart: PublicApi = + this.onRotationStartEvent.publicApi() + + private onRotationUpdateEvent = new Event() + /** + * Callback for when rotation updates each frame + */ + onRotationUpdate: PublicApi = + this.onRotationUpdateEvent.publicApi() + + private onRotationEndEvent = new Event() + /** + * Callback for when rotation has ended + */ + onRotationEnd: PublicApi = + this.onRotationEndEvent.publicApi() + + private onScaleLimitReachedEvent = new Event() + /** + * Callback for when scale has reached the minimum or maximum limit + */ + onScaleLimitReached: PublicApi = + this.onScaleLimitReachedEvent.publicApi() + + private onScaleStartEvent = new Event() + /** + * Callback for when scale begins + */ + onScaleStart: PublicApi = this.onScaleStartEvent.publicApi() + + private onScaleUpdateEvent = new Event() + /** + * Callback for when scale updates each frame + */ + onScaleUpdate: PublicApi = this.onScaleUpdateEvent.publicApi() + + private onScaleEndEvent = new Event() + /** + * Callback for when scale has ended + */ + onScaleEnd: PublicApi = this.onScaleEndEvent.publicApi() + + private onManipulationStartEvent = new Event() + /** + * Callback for when any manipulation begins + */ + onManipulationStart: PublicApi = + this.onManipulationStartEvent.publicApi() + + private onManipulationUpdateEvent = new Event() + /** + * Callback for when any manipulation updates + */ + onManipulationUpdate: PublicApi = + this.onManipulationUpdateEvent.publicApi() + + private onManipulationEndEvent = new Event() + /** + * Callback for when any manipulation ends + */ + onManipulationEnd: PublicApi = + this.onManipulationEndEvent.publicApi() + + onAwake(): void { + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + + if (this.interactable === null) { + throw new Error( + "InteractableManipulation requires an interactable to function.", + ) + } + + this.setManipulateRoot( + !isNull(this.manipulateRootSceneObject) + ? this.manipulateRootSceneObject!.getTransform() + : this.getTransform(), + ) + + this.createEvent("OnDestroyEvent").bind(() => this.onDestroy()) + this.cacheTransform() + this.setupCallbacks() + + this.defaultFilterConfig = { + frequency: 60, //fps + minCutoff: this.minCutoff, + beta: this.beta, + dcutoff: this.dcutoff, + } + + this.translateFilter = new OneEuroFilterVec3(this.defaultFilterConfig) + this.rotationFilter = new OneEuroFilterQuat(this.defaultFilterConfig) + this.scaleFilter = new OneEuroFilterVec3(this.defaultFilterConfig) + } + + private onDestroy(): void { + // If we don't unsubscribe, component will keep working after destroy() due to event callbacks added to Interactable Events + this.unsubscribeBag.forEach((unsubscribeCallback: unsubscribe) => { + unsubscribeCallback() + }) + this.unsubscribeBag = [] + } + + private setupCallbacks(): void { + validate(this.interactable) + + this.unsubscribeBag.push( + this.interactable.onInteractorTriggerStart.add((event) => { + if ( + event.propagationPhase === "Target" || + event.propagationPhase === "BubbleUp" + ) { + event.stopPropagation() + this.onTriggerToggle(event) + } + }), + ) + + this.unsubscribeBag.push( + this.interactable.onTriggerUpdate.add((event) => { + if ( + event.propagationPhase === "Target" || + event.propagationPhase === "BubbleUp" + ) { + event.stopPropagation() + this.onTriggerUpdate(event) + } + }), + ) + + this.unsubscribeBag.push( + this.interactable.onTriggerCanceled.add((event) => { + if ( + event.propagationPhase === "Target" || + event.propagationPhase === "BubbleUp" + ) { + event.stopPropagation() + this.onTriggerToggle(event) + } + }), + ) + + this.unsubscribeBag.push( + this.interactable.onInteractorTriggerEnd.add((event) => { + if ( + event.propagationPhase === "Target" || + event.propagationPhase === "BubbleUp" + ) { + event.stopPropagation() + this.onTriggerToggle(event) + } + }), + ) + } + + private updateStartValues(): void { + validate(this.manipulateRoot) + validate(this.interactable) + + const interactors: Interactor[] = this.getTriggeringInteractors() + + this.mobileStretch = 0 + this.smoothedStretch = 0 + this.startStretchInteractorDistance = 0 + + // Reset filters + this.translateFilter.reset() + this.rotationFilter.reset() + this.scaleFilter.reset() + + // Set the starting transform values to be used for callbacks + this.startTransform = { + transform: this.manipulateRoot.getWorldTransform(), + position: this.manipulateRoot.getWorldPosition(), + rotation: this.manipulateRoot.getWorldRotation(), + scale: this.manipulateRoot.getWorldScale(), + } + + const cameraPosition = this.camera.getTransform().getWorldPosition() + const cameraRotation = this.camera.getTransform().getWorldRotation() + + if (interactors.length === 1) { + const interactor = interactors[0] + if (this.isInteractorValid(interactor) === false) { + this.log.e("Interactor must not be valid for setting initial values") + return + } + + const startPoint = interactor.startPoint ?? vec3.zero() + const orientation = interactor.orientation ?? quat.quatIdentity() + + this.cachedTargetingMode = interactor.activeTargetingMode + + if (interactor.activeTargetingMode === TargetingMode.Direct) { + this.offsetPosition = this.startTransform.position.sub(startPoint) + this.offsetRotation = orientation + .invert() + .multiply(this.startTransform.rotation) + } else { + const rayPosition = this.getRayPosition(interactor) + + this.offsetPosition = rayPosition.sub(startPoint) + this.hitPointToTransform = this.startTransform.position.sub(rayPosition) + this.offsetRotation = cameraRotation + .invert() + .multiply(this.startTransform.rotation) + } + } else if (interactors.length === 2) { + if ( + this.isInteractorValid(interactors[0]) === false || + this.isInteractorValid(interactors[1]) === false + ) { + this.log.e("Both interactors must be valid for setting initial values") + return + } + + const isDirect = + interactors[0].activeTargetingMode === TargetingMode.Direct || + interactors[1].activeTargetingMode === TargetingMode.Direct + this.cachedTargetingMode = isDirect + ? TargetingMode.Direct + : TargetingMode.Indirect + + const firstStartPoint = interactors[0].startPoint ?? vec3.zero() + const secondStartPoint = interactors[1].startPoint ?? vec3.zero() + + const interactorMidPoint = firstStartPoint + .add(secondStartPoint) + .uniformScale(0.5) + + this.currentUp = vec3.up() + this.currentRotationSign = 0 + const dualInteractorDirection = this.getDualInteractorDirection( + interactors[0], + interactors[1], + ) + + this.initialInteractorDistance = + firstStartPoint.distance(secondStartPoint) + this.initialObjectScale = this.manipulateRoot.getLocalScale() + this.onScaleStartEvent.invoke({ + interactable: this.interactable, + startWorldScale: this.startTransform.scale, + currentWorldScale: this.manipulateRoot.getWorldScale(), + }) + + if (dualInteractorDirection === null) { + return + } + + this.offsetRotation = dualInteractorDirection + .invert() + .multiply(this.startTransform.rotation) + + if (isDirect) { + this.offsetPosition = + this.startTransform.position.sub(interactorMidPoint) + } else { + const firstRayPosition = this.getRayPosition(interactors[0]) + const secondRayPosition = this.getRayPosition(interactors[1]) + const dualRayPosition = firstRayPosition + .add(secondRayPosition) + .uniformScale(0.5) + + this.offsetPosition = dualRayPosition.sub(interactorMidPoint) + this.hitPointToTransform = + this.startTransform.position.sub(dualRayPosition) + } + } + } + + /** + * Hit position from interactor does not necessarily mean the actual + * ray position. We need to maintain offset so that there's isn't a pop + * on pickup. + */ + private getRayPosition(interactor: Interactor): vec3 { + if (this.isInteractorValid(interactor) === false) { + return vec3.zero() + } + + const startPoint = interactor.startPoint ?? vec3.zero() + const direction = interactor.direction ?? vec3.zero() + const distanceToTarget = interactor.distanceToTarget ?? 0 + + return startPoint.add(direction.uniformScale(distanceToTarget)) + } + + private cacheTransform() { + validate(this.manipulateRoot) + + this.originalWorldTransform = { + transform: this.manipulateRoot.getWorldTransform(), + position: this.manipulateRoot.getWorldPosition(), + rotation: this.manipulateRoot.getWorldRotation(), + scale: this.manipulateRoot.getWorldScale(), + } + + this.originalLocalTransform = { + transform: mat4.compose( + this.manipulateRoot.getLocalPosition(), + this.manipulateRoot.getLocalRotation(), + this.manipulateRoot.getLocalScale(), + ), + position: this.manipulateRoot.getLocalPosition(), + rotation: this.manipulateRoot.getLocalRotation(), + scale: this.manipulateRoot.getLocalScale(), + } + } + + private onTriggerToggle(eventData: InteractorEvent): void { + if ( + !this.enabled || + (!this.canTranslate() && !this.canRotate() && !this.canScale()) + ) { + return + } + + // Cache the interactors on trigger start/end + this.interactors = this.getTriggeringInteractors() + + if (this.interactors.length > 0) { + this.updateStartValues() + // Scale only happens with two handed manipulation so start event firing deferred to updateStartValues() + this.invokeEvents( + this.onTranslationStartEvent, + this.onRotationStartEvent, + null, + this.onManipulationStartEvent, + ) + this.log.v("InteractionEvent : " + "On Manipulation Start Event") + } else { + this.invokeEvents( + this.onTranslationEndEvent, + this.onRotationEndEvent, + this.onScaleEndEvent, + this.onManipulationEndEvent, + ) + this.log.v("InteractionEvent : " + "On Manipulation End Event") + } + } + + private onTriggerUpdate(eventData: InteractorEvent): void { + if ( + !this.enabled || + (!this.canTranslate() && !this.canRotate() && !this.canScale()) + ) { + return + } + + if (this.interactors.length === 1) { + this.singleInteractorTransform(this.interactors[0]) + } else if (this.interactors.length === 2) { + this.dualInteractorsTransform(this.interactors) + } else { + this.log.w( + `${this.interactors.length} interactors found for onTriggerUpdate. This is not supported.`, + ) + return + } + + // Scale only happens with two handed manipulation, so its event firing is deferred to this.dualInteractorsTransform() + this.invokeEvents( + this.onTranslationUpdateEvent, + this.onRotationUpdateEvent, + null, + this.onManipulationUpdateEvent, + ) + } + + private getTriggeringInteractors(): Interactor[] { + validate(this.interactable) + + const interactors: Interactor[] = + this.interactionManager.getInteractorsByType( + this.interactable.triggeringInteractor, + ) + + if (interactors === null) { + this.log.w( + `Failed to retrieve interactors on ${this.getSceneObject().name}: ${ + this.interactable.triggeringInteractor + } (InteractorInputType)`, + ) + return [] + } + + return interactors + } + + private invokeEvents( + translateEvent: Event | null, + rotationEvent: Event | null, + scaleEvent: Event | null, + manipulationEvent: Event | null, + ): void { + validate(this.interactable) + validate(this.manipulateRoot) + + if (this.canTranslate() && translateEvent) { + translateEvent.invoke({ + interactable: this.interactable, + startPosition: this.startTransform.position, + currentPosition: this.manipulateRoot.getWorldPosition(), + }) + } + + if (this.canRotate() && rotationEvent) { + rotationEvent.invoke({ + interactable: this.interactable, + startRotation: this.startTransform.rotation, + currentRotation: this.manipulateRoot.getWorldRotation(), + }) + } + + if (this.canScale() && scaleEvent) { + scaleEvent.invoke({ + interactable: this.interactable, + startWorldScale: this.startTransform.scale, + currentWorldScale: this.manipulateRoot.getWorldScale(), + }) + } + + if ( + (this.canTranslate() || this.canRotate() || this.canScale()) && + manipulationEvent + ) { + manipulationEvent.invoke({ + interactable: this.interactable, + startTransform: this.startTransform.transform, + currentTransform: this.manipulateRoot.getWorldTransform(), + }) + } + } + + private getDualInteractorDirection( + interactor1: Interactor, + interactor2: Interactor, + ): quat | null { + if ( + interactor1 === null || + interactor1.startPoint === null || + interactor2 === null || + interactor2.startPoint === null + ) { + this.log.e( + "Interactors and their start points should not be null for getDualInteractorDirection", + ) + return null + } + + let point1 = interactor1.startPoint + let point2 = interactor2.startPoint + let sign: number = 0 + + // Handle single axis rotation by projecting the start points onto plane. + if (this.rotationAxis !== RotationAxis.All) { + let axis: vec3 + switch (this.rotationAxis) { + case RotationAxis.X: + axis = vec3.right() + break + case RotationAxis.Y: + axis = vec3.up() + break + case RotationAxis.Z: + axis = vec3.forward() + break + } + // When rotating about a single axis, project the start points onto the plane defined by that axis to calculate rotation about that axis. + point1 = point1.projectOnPlane(axis) + point2 = point2.projectOnPlane(axis) + + if (this.rotationAxis === RotationAxis.X) { + sign = Math.sign(point2.z - point1.z) + } else if (this.rotationAxis === RotationAxis.Z) { + sign = Math.sign(point2.x - point1.x) + } + } + + // For X and Z rotation, flip the 'up' orientation of the rotation when the vector between the projected points crosses the Y-axis. + if (sign !== this.currentRotationSign) { + this.currentUp = this.currentUp.uniformScale(-1) + this.currentRotationSign = sign + } + + // Get the direction from the two palm points, rotate yaw 90 degrees to get forward direction + const rotation = quat + .lookAt(point2.sub(point1), this.currentUp) + .multiply(YAW_NEGATIVE_90) + + const currentRotation = this.limitQuatRotation(rotation) + + return currentRotation + } + + private limitQuatRotation(rotation: quat): quat { + let euler = rotation.toEulerAngles() + + if (!this.canRotate()) { + euler.x = 0 + euler.y = 0 + euler.z = 0 + } + + return quat.fromEulerVec(euler) + } + + private isInteractorValid(interactor: Interactor): boolean { + return ( + interactor !== null && + interactor.startPoint !== null && + interactor.orientation !== null && + interactor.direction !== null && + interactor.distanceToTarget !== null && + interactor.isActive() + ) + } + + private singleInteractorTransform(interactor: Interactor): void { + if (this.isInteractorValid(interactor) === false) { + this.log.e("Interactor must be valid") + return + } + validate(this.manipulateRoot) + + const startPoint = interactor.startPoint ?? vec3.zero() + const orientation = interactor.orientation ?? quat.quatIdentity() + const direction = interactor.direction ?? vec3.zero() + + const limitRotation = this.limitQuatRotation(orientation).multiply( + this.offsetRotation, + ) + // Do not rotate the object if using a single Interactor for single axis usecase. + let deltaRotation = + this.rotationAxis === RotationAxis.All + ? limitRotation.multiply( + this.manipulateRoot.getWorldRotation().invert(), + ) + : quat.quatIdentity() + + // Single Interactor Direct + if (this.enableTranslation) { + let newPosition: vec3 | null + + if (this.cachedTargetingMode === TargetingMode.Direct) { + newPosition = startPoint.add( + this.canRotate() + ? limitRotation + .multiply(this.startTransform.rotation.invert()) + .multiplyVec3(this.offsetPosition) + : this.offsetPosition, + ) + + this.updatePosition(newPosition, this.useFilter) + } else { + // Single Interactor Indirect + this.smoothedStretch = MathUtils.lerp( + this.smoothedStretch, + this.calculateStretchFactor(interactor), + getDeltaTime() * STRETCH_SMOOTH_SPEED, + ) + const offset = direction + .uniformScale(this.offsetPosition.length) + .add(this.hitPointToTransform) + newPosition = startPoint + .add(offset) + .add(direction.uniformScale(this.smoothedStretch)) + this.updatePosition(newPosition, this.useFilter) + + deltaRotation = quat.quatIdentity() + } + } + + if (this.canRotate()) { + if (this.cachedTargetingMode === TargetingMode.Direct) { + const newRotation = deltaRotation.multiply( + this.manipulateRoot.getWorldRotation(), + ) + this.updateRotation(newRotation, this.useFilter) + } + } + } + + private dualInteractorsTransform(interactors: Interactor[]): void { + if ( + interactors.length < 2 || + !this.isInteractorValid(interactors[0]) || + !this.isInteractorValid(interactors[1]) + ) { + this.log.e( + "There should be two valid interactors for dualInteractorsTransform", + ) + } + validate(this.manipulateRoot) + validate(this.interactable) + + const isDirect = this.cachedTargetingMode === TargetingMode.Direct + + const startPoint1 = interactors[0].startPoint + const startPoint2 = interactors[1].startPoint + + if (startPoint1 === null || startPoint2 === null) { + this.log.e( + "Both start points should be valid for dualInteractorsTransform", + ) + return + } + + const interactorMidPoint = startPoint1.add(startPoint2).uniformScale(0.5) + const dualDirection = this.getDualInteractorDirection( + interactors[0], + interactors[1], + ) + + if (dualDirection === null) { + return + } + + const dualDistance = startPoint1.distance(startPoint2) + + if (this.canRotate()) { + const newRotation = dualDirection.multiply(this.offsetRotation) + this.updateRotation(newRotation, this.useFilter) + } + + if (this.enableTranslation) { + let newPosition: vec3 | null + + // Dual Interactor Direct + if (isDirect) { + newPosition = + this.canRotate() && isDirect + ? interactorMidPoint.add( + this.manipulateRoot + .getWorldRotation() + .multiply(this.startTransform.rotation.invert()) + .multiplyVec3(this.offsetPosition), + ) + : interactorMidPoint.add(this.offsetPosition) + this.updatePosition(newPosition, this.useFilter) + } else { + // Dual Interactor Indirect + const dualRaycastDistance = + (interactors[0].maxRaycastDistance + + interactors[1].maxRaycastDistance) * + 0.5 + const zDistance = Math.min( + dualRaycastDistance, + this.offsetPosition.length, + ) + + const direction1 = interactors[0].direction ?? vec3.zero() + const direction2 = interactors[1].direction ?? vec3.zero() + const dualDirection = direction1.add(direction2).uniformScale(0.5) + + let finalOffset = dualDirection + .uniformScale(zDistance) + .add(this.hitPointToTransform) + newPosition = interactorMidPoint.add(finalOffset) + this.updatePosition(newPosition, this.useFilter) + } + } + + if (this.canScale() && this.initialInteractorDistance !== 0) { + const distanceDifference = dualDistance - this.initialInteractorDistance + + /* + * Calculate the scaling factor based on the distanceDifference and the initialInteractorDistance. + * This factor will be used to uniformly scale the object based on the change in distance. + */ + const uniformScalingFactor = + 1 + distanceDifference / this.initialInteractorDistance + + const updatedObjectScale = + this.initialObjectScale.uniformScale(uniformScalingFactor) + + this.setScale(updatedObjectScale, this.useFilter) + + this.onScaleUpdateEvent.invoke({ + interactable: this.interactable, + startWorldScale: this.startTransform.scale, + currentWorldScale: this.manipulateRoot.getWorldScale(), + }) + } + } + + private updatePosition(newPosition: vec3 | null, useFilter = true) { + if (newPosition === null) { + return + } + validate(this.manipulateRoot) + + if (!this.enableXTranslation) { + newPosition.x = this.manipulateRoot.getWorldPosition().x + } + if (!this.enableYTranslation) { + newPosition.y = this.manipulateRoot.getWorldPosition().y + } + if (!this.enableZTranslation) { + newPosition.z = this.manipulateRoot.getWorldPosition().z + } + + if (useFilter) { + newPosition = this.translateFilter.filter(newPosition, getTime()) + } + + this.manipulateRoot.setWorldPosition(newPosition) + } + + private updateRotation(newRotation: quat | null, useFilter = true) { + if (newRotation === null) { + return + } + validate(this.manipulateRoot) + + if (useFilter) { + newRotation = this.rotationFilter.filter(newRotation, getTime()) + } + + this.manipulateRoot.setWorldRotation(newRotation) + } + + private calculateStretchFactor(interactor: Interactor): number { + if (this.enableStretchZ === false) { + return 1 + } + //get distance from hand to camera along z axis only + const startPoint = interactor.startPoint ?? vec3.zero() + const interactorDistance = + this.camera + .getTransform() + .getInvertedWorldTransform() + .multiplyPoint(startPoint).z * -1 + + if (this.startStretchInteractorDistance === 0) { + this.startStretchInteractorDistance = interactorDistance + } + const dragAmount = interactorDistance - this.startStretchInteractorDistance + + //scale movement based on distance from ray start to object + const currDistance = interactor.distanceToTarget ?? 0 + const distanceFactor = + (this.zStretchFactorMax / interactor.maxRaycastDistance) * currDistance + + this.zStretchFactorMin + + const minStretch = -this.offsetPosition.length + 1 + const maxStretch = + -this.offsetPosition.length + interactor.maxRaycastDistance - 1 + + let finalStretchAmount = MathUtils.clamp( + dragAmount * distanceFactor, + minStretch, + maxStretch, + ) + + if (interactor.inputType === InteractorInputType.Mobile) { + const mobileInteractor = interactor as MobileInteractor + + let mobileDragVector = vec3.zero() + if (mobileInteractor.touchpadDragVector !== null) { + mobileDragVector = mobileInteractor.touchpadDragVector + } + + const mobileMoveAmount = + mobileDragVector.z === 0 + ? mobileDragVector.y * MOBILE_DRAG_MULTIPLIER + : 0 + + this.mobileStretch += mobileMoveAmount * distanceFactor + + //dont let value accumulate out of bounds + this.mobileStretch = Math.min( + maxStretch - finalStretchAmount, + Math.max(minStretch - finalStretchAmount, this.mobileStretch), + ) + finalStretchAmount += this.mobileStretch + } + return finalStretchAmount + } + + private clampUniformScale(scale: vec3, minScale: vec3, maxScale: vec3): vec3 { + let finalScale = scale + + /* + * Calculate the ratios between the input scale and the min and max scales + * for each axis (x, y, z). These ratios indicate how close the input scale + * is to the min or max scale limits. + */ + const minRatio = Math.min( + scale.x / minScale.x, + scale.y / minScale.y, + scale.z / minScale.z, + ) + const maxRatio = Math.min( + scale.x / maxScale.x, + scale.y / maxScale.y, + scale.z / maxScale.z, + ) + + /* + * If the minRatio is less than 1, it means at least one axis of the input + * scale is smaller than the corresponding axis of the minScale. To preserve + * the uniform scaling, apply a uniform scaling factor (1 / minRatio) to the + * input scale, effectively scaling it up just enough to meet the minScale + * limit on the smallest axis. + */ + if (minRatio < 1) { + finalScale = finalScale.uniformScale(1 / minRatio) + } + + /* + * If the maxRatio is greater than 1, it means at least one axis of the input + * scale is larger than the corresponding axis of the maxScale. To preserve + * the uniform scaling, apply a uniform scaling factor (1 / maxRatio) to the + * input scale, effectively scaling it down just enough to meet the maxScale + * limit on the largest axis. + */ + if (maxRatio > 1) { + finalScale = finalScale.uniformScale(1 / maxRatio) + } + + return finalScale + } + + private setScale(newScale: vec3, useFilter = true): void { + if (!this.canScale()) { + return + } + validate(this.interactable) + validate(this.manipulateRoot) + + // Calculate min and max scale + const minScale = this.originalLocalTransform.scale.uniformScale( + this.minimumScaleFactor, + ) + const maxScale = this.originalLocalTransform.scale.uniformScale( + this.maximumScaleFactor, + ) + + // Calculate final scale + let finalScale = this.clampUniformScale(newScale, minScale, maxScale) + + if (newScale !== finalScale) { + this.onScaleLimitReachedEvent.invoke({ + interactable: this.interactable, + currentValue: finalScale, + }) + } + if (useFilter) { + finalScale = this.scaleFilter.filter(finalScale, getTime()) + } + + this.manipulateRoot.setLocalScale(finalScale) + } + + /** + * Resets the interactable's position + */ + resetPosition(local: boolean = false): void { + validate(this.manipulateRoot) + + if (local) { + this.manipulateRoot.setLocalPosition(this.originalLocalTransform.position) + } else { + this.manipulateRoot.setWorldPosition(this.originalWorldTransform.position) + } + } + + /** + * Resets the interactable's rotation + */ + resetRotation(local: boolean = false): void { + validate(this.manipulateRoot) + + if (local) { + this.manipulateRoot.setLocalRotation(this.originalLocalTransform.rotation) + } else { + this.manipulateRoot.setWorldRotation(this.originalWorldTransform.rotation) + } + } + + /** + * Resets the interactable's scale + */ + resetScale(local: boolean = false): void { + validate(this.manipulateRoot) + + if (local) { + this.manipulateRoot.setLocalScale(this.originalLocalTransform.scale) + } else { + this.manipulateRoot.setWorldScale(this.originalWorldTransform.scale) + } + } + + /** + * Resets the interactable's transform + */ + resetTransform(local: boolean = false): void { + validate(this.manipulateRoot) + + if (local) { + this.manipulateRoot.setLocalTransform( + this.originalLocalTransform.transform, + ) + } else { + this.manipulateRoot.setWorldTransform( + this.originalWorldTransform.transform, + ) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts.meta new file mode 100644 index 00000000..e228c351 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractableManipulation/InteractableManipulation.ts.meta @@ -0,0 +1,101 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! ea5059d4-c4db-4ff5-b1fd-10c785f9bdb8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _enableXTranslation: false + _enableYTranslation: false + _enableZTranslation: false + _rotationAxis: false + beta: false + dcutoff: false + enableRotation: false + enableScale: false + enableStretchZ: false + enableTranslation: false + manipulateRootSceneObject: false + maximumScaleFactor: false + minCutoff: false + minimumScaleFactor: false + showFilterProperties: false + showRotationProperties: false + showStretchZProperties: false + showTranslationProperties: false + useFilter: false + zStretchFactorMax: false + zStretchFactorMin: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - manipulateRootSceneObject: ! 00000000-0000-0000-0000-000000000000 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + useFilter: true + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Interactable Manipulation"}' + - "// @input SceneObject manipulateRootSceneObject {\"hint\":\"Root SceneObject of the set of SceneObjects to manipulate. If left blank, this script's SceneObject will be treated as the root. The root's transform will be modified by this script.\"}" + - '// @input float minimumScaleFactor = 0.25 {"hint":"The smallest this object can scale down to, relative to its original scale. A value of 0.5 means it cannot scale smaller than 50% of its current size", "widget":"slider", "min":0, "max":1, "step":0.05}' + - '// @input float maximumScaleFactor = 20 {"hint":"The largest this object can scale up to, relative to its original scale. A value of 2 means it cannot scale larger than twice its current size", "widget":"slider", "min":1, "max":20, "step":0.5}' + - // @input bool enableTranslation = true + - // @input bool enableRotation = true + - // @input bool enableScale = true + - '// @input bool enableStretchZ = true {"hint":"Toggles forward stretch for manipulating objects from afar."}' + - '// @input bool showStretchZProperties {"showIf":"enableStretchZ", "showIfValue":true}' + - '// @input float zStretchFactorMin = 1 {"hint":"Z multiplier on the near end of the stretch scale", "showIf":"showStretchZProperties", "showIfValue":true}' + - '// @input float zStretchFactorMax = 12 {"hint":"Z multiplier on the far end of the stretch scale", "showIf":"showStretchZProperties", "showIfValue":true}' + - '// @input bool useFilter = true {"hint":"Apply filtering to smooth manipulation"}' + - '// @input bool showFilterProperties {"showIf":"useFilter", "showIfValue":true}' + - '// @input float minCutoff = 2 {"showIf":"showFilterProperties", "showIfValue":true}' + - '// @input float beta = 0.015 {"showIf":"showFilterProperties", "showIfValue":true}' + - '// @input float dcutoff = 1 {"showIf":"showFilterProperties", "showIfValue":true}' + - // @input bool showTranslationProperties + - "// @input bool _enableXTranslation = true {\"hint\":\"Enable translation along the world's X-axis.\", \"showIf\":\"showTranslationProperties\", \"showIfValue\":true}" + - "// @input bool _enableYTranslation = true {\"hint\":\"Enable translation along the world's Y-axis.\", \"showIf\":\"showTranslationProperties\", \"showIfValue\":true}" + - "// @input bool _enableZTranslation = true {\"hint\":\"Enable translation along the world's Z-axis.\", \"showIf\":\"showTranslationProperties\", \"showIfValue\":true}" + - // @input bool showRotationProperties + - '// @input string _rotationAxis = "All" {"hint":"Enable rotation about all axes or a single world axis (x,y,z) when using to two hands.", "widget":"combobox", "values":[{"label":"All", "value":"All"}, {"label":"X", "value":"X"}, {"label":"Y", "value":"Y"}, {"label":"Z", "value":"Z"}], "showIf":"showRotationProperties", "showIfValue":true}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts new file mode 100644 index 00000000..6646afdf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts @@ -0,0 +1,213 @@ +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" + +/** + * point - the projection's position on the plane in world space. + * distance - the distance from the point to plane in world space (negative if behind the plane) + * isWithinInteractionZone - if the point is nearby in front of the plane + * isWithinBehindZone - if the point is nearby behind the plane + */ +export type ZoneProjection = { + point: vec3 + distance: number + isWithinInteractionZone: boolean + isWithinBehindZone: boolean +} + +const DEFAULT_INTERACTION_ZONE_DISTANCE_CM = 20 +// The value to use to widen the interaction zone as it gets further away from the plane. +const DEFAULT_INTERACTION_ZONE_SLOPE = 0.25 + +const DEFAULT_BEHIND_ZONE_DISTANCE_CM = 15 + +/** + * An InteractionPlane defines a zone which triggers near field targeting logic for HandInteractors. + * An InteractionPlane should be added to any 2D UIs with high button density, such as ContainerFrame menus. + * Only one InteractionPlane should be added per UI (ContainerFrame adds an InteractionPlane by default). + */ +@component +export class InteractionPlane extends BaseScriptComponent { + @input + private _planeSize: vec2 = new vec2(10, 10) + + @input + private _proximityDistance: number = DEFAULT_INTERACTION_ZONE_DISTANCE_CM + + @input + private _drawDebug: boolean = false + + @input + private _behindDistance: number = DEFAULT_BEHIND_ZONE_DISTANCE_CM + + private _collider: ColliderComponent = + this.sceneObject.createComponent("ColliderComponent") + + constructor() { + super() + + this.createEvent("OnDestroyEvent").bind(() => this.release()) + + InteractionManager.getInstance().registerInteractionPlane(this) + + this.buildMeshShape() + + this.collider.debugDrawEnabled = this.drawDebug + } + + release() { + InteractionManager.getInstance().deregisterInteractionPlane(this) + } + + // Manually create the mesh shape for the interaction zone to trigger NearField targeting. + private buildMeshShape() { + const slopeOffset = DEFAULT_INTERACTION_ZONE_SLOPE * this.proximityDistance + const shape = Shape.createBoxShape() + shape.size = new vec3( + this.planeSize.x + slopeOffset, + this.planeSize.y + slopeOffset, + this.proximityDistance * 2 + ) + + this.collider.shape = shape + } + + /** + * Sets the size (in world units) of the plane's interaction zone along the local X and Y axes of the SceneObject. + */ + set planeSize(size: vec2) { + this._planeSize = size + + this.buildMeshShape() + } + + /** + * @returns the size (in world units) of the plane's interaction zone along the local X and Y axes of the SceneObject. + */ + get planeSize(): vec2 { + return this._planeSize + } + + /** + * Sets the depth (in world units) of the plane's interaction zone along the local Z axis of the SceneObject. + */ + set proximityDistance(distance: number) { + this._proximityDistance = distance + + this.buildMeshShape() + } + + /** + * Returns the depth (in world units) of the plane's interaction zone along the local Z axis of the SceneObject. + */ + get proximityDistance(): number { + return this._proximityDistance + } + + /** + * Sets the depth (in world units) of the plane's behind zone along the local Z axis of the SceneObject. + */ + set behindDistance(distance: number) { + this._behindDistance = distance + + this.buildMeshShape() + } + + /** + * Returns the depth (in world units) of the plane's interaction zone along the local Z axis of the SceneObject. + */ + get behindDistance(): number { + return this._behindDistance + } + + /** + * Sets if the interaction zone should be drawn via debug gizmos. + */ + set drawDebug(enabled: boolean) { + this._drawDebug = enabled + + this.collider.debugDrawEnabled = enabled + } + + /** + * @returns if the interaction zone should be drawn via debug gizmos. + */ + get drawDebug(): boolean { + return this._drawDebug + } + + /** + * @returns a vec3 representing the normal vector of the plane. + */ + get normal(): vec3 { + return this.getTransform().forward + } + + /** + * Returns the collider of the InteractionPlane. + */ + get collider(): ColliderComponent { + return this._collider + } + + /** + * Project a 3D point in world space onto the InteractionPlane. + * @param point - a 3D point in world space + * @returns - a ZoneProjection representing the point's projection onto the plane, the distance of the point from the plane (negative if behind the plane), + * a boolean checking if the point resides within the interaction zone of the plane (defined by size and proximityDistance), + * and a boolean checking if the point resides within the behind zone of the plane (right behind the plane), + * or null if the point does not project onto the plane. + */ + projectPoint(point: vec3): ZoneProjection { + if (!this.enabled || !this.sceneObject.isEnabledInHierarchy) { + return null + } + + // This logic uses the equation of t = ((p0-l0)·n)/(l·n) with l0 + l*t = the point of intersection. + // l0 represents point, l represents direction, p0 represents plane origin, and n represents the plane normal. + const po = this.sceneObject.getTransform().getWorldPosition() + const n = this.sceneObject.getTransform().forward + + const v = po.sub(point) + const l = n.uniformScale(-1) + + const t = v.dot(n) / l.dot(n) + + // Project the point onto the plane. + const projectedPoint = point.add(l.uniformScale(t)) + + const r = this.sceneObject.getTransform().right + const u = this.sceneObject.getTransform().up + + // Get the local X and Y coordinates within the plane space to check if the point resides within the interaction zone. + const d = projectedPoint.sub(po) + const x = d.dot(r) + const y = d.dot(u) + + // Get the distance of the original point from the plane. + const distance = point.sub(projectedPoint).length * Math.sign(t) + + // Check if the point is in front of the plane, within the proximity distance threshold, and within the planeSize boundaries. + const isWithinInteractionZone = + distance >= 0 && + distance <= this.proximityDistance && + Math.abs(x) <= + this.planeSize.x + distance * DEFAULT_INTERACTION_ZONE_SLOPE && + Math.abs(y) <= + this.planeSize.y + distance * DEFAULT_INTERACTION_ZONE_SLOPE + + // Check if the point is in behind the plane, within the behind zone distance threshold, and within the planeSize boundaries. + const isWithinBehindZone = + distance < 0 && + distance >= -this.behindDistance && + Math.abs(x) <= this.planeSize.x && + Math.abs(y) <= this.planeSize.y + + // If the point is within the interaction zone, return the plane projection data. Otherwise, return null. + const planeProjection = { + point: projectedPoint, + distance: distance, + isWithinInteractionZone: isWithinInteractionZone, + isWithinBehindZone: isWithinBehindZone, + } + return planeProjection + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts.meta new file mode 100644 index 00000000..f13ff752 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractionPlane/InteractionPlane.ts.meta @@ -0,0 +1,47 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! edbbf5fe-8295-4a71-a954-1b265437d6ee + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! edbbf5fe-8295-4a71-a954-1b265437d6ee + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 9b8e0750-02a2-43e5-be2e-b953aebee549 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _behindDistance: false + _drawDebug: false + _planeSize: false + _proximityDistance: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - _planeSize: ! {x: 10.000000, y: 10.000000} + _proximityDistance: ! 20.000000 + _drawDebug: false + _behindDistance: ! 5.000000 + ScriptTypes: + - + {} + InputLines: + - // @input vec2 _planeSize + - // @input float _proximityDistance + - // @input bool _drawDebug + - // @input float _behindDistance diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts new file mode 100644 index 00000000..e4908358 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts @@ -0,0 +1,408 @@ +import {HandType} from "../../../Providers/HandInputData/HandType" +import animate, {CancelSet} from "../../../Utils/animate" +import {validate} from "../../../Utils/validate" +import {Billboard} from "../Billboard/Billboard" +import {CursorMode} from "./InteractorCursor" + +export type CircleVisualTextureConfig = { + translate: Texture + scaleTL: Texture + scaleTR: Texture + disabled: Texture +} + +export type CircleVisualConfig = { + meshSceneObject: SceneObject + textures: CircleVisualTextureConfig +} + +// To make the math of calculating angles easier to follow, the CursorMat graph uses -1 and 1 to represent the left/right hand. +const enum CursorMaterialHandType { + Left = -1, + NonHand = 0, + Right = 1, +} + +const OUTLINE_ANIMATE_DURATION = 0.1 +const DEFAULT_RENDER_ORDER = 100 + +const DEFAULT_SCALE = new vec3(0.8, 0.8, 0.8) + +/** + * CircleVisual provides the circle visual of the cursor & controls the fade in/out animations. + */ +export class CircleVisual { + private _outlineAlpha = 1.0 + private _isShown = false + private _isTriggering = false + private _outlineOffset = 0.0 + private _circleSquishScale = 1.0 + private showCancelSet = new CancelSet() + private outlineAlphaCancelSet = new CancelSet() + private outlineOffsetCancelSet = new CancelSet() + + private _cursorMode: CursorMode = CursorMode.Auto + private _useTexture: boolean = false + private _materialtexture: Texture | null = null + private _customTexture: Texture | null = null + + private visual = this.sceneObject.getComponent("Component.RenderMeshVisual") + + private billboardComponent = this.sceneObject.createComponent( + Billboard.getTypeName() + ) + + constructor(private config: CircleVisualConfig) { + const cloneMaterial = this.visual.mainMaterial.clone() + this.visual.mainMaterial = cloneMaterial + this.renderOrder = DEFAULT_RENDER_ORDER + this.sceneObject.enabled = false + this.visual.getTransform().setWorldScale(DEFAULT_SCALE) + + this.configureBillboardComponent() + } + + private configureBillboardComponent() { + this.billboardComponent.xAxisEnabled = true + this.billboardComponent.yAxisEnabled = true + this.billboardComponent.zAxisEnabled = false + this.billboardComponent.axisEasing = new vec3(1, 1, 1) + this.billboardComponent.axisBufferDegrees = new vec3(0, 0, 0) + } + + get sceneObject(): SceneObject { + return this.config.meshSceneObject + } + + set worldPosition(position: vec3) { + this.sceneObject.getTransform().setWorldPosition(position) + } + + get worldPosition(): vec3 { + return this.sceneObject.getTransform().getWorldPosition() + } + + /** + * Sets whether or not the cursor itself should be shown, and fades it in/out accordingly. + */ + set isShown(show: boolean) { + if (show === this._isShown) { + return + } + + this.showCancelSet() + const initialAlpha = this.visual.mainPass.maxAlpha as number + if (show) { + this.sceneObject.enabled = true + animate({ + cancelSet: this.showCancelSet, + duration: OUTLINE_ANIMATE_DURATION, + update: (t: number) => { + this.visual.mainPass.maxAlpha = MathUtils.lerp(initialAlpha, 1, t) + }, + }) + } else { + animate({ + cancelSet: this.showCancelSet, + duration: OUTLINE_ANIMATE_DURATION, + update: (t: number) => { + this.visual.mainPass.maxAlpha = MathUtils.lerp(initialAlpha, 0, t) + }, + ended: () => { + this.sceneObject.enabled = false + }, + }) + } + this._isShown = show + } + + /** + * Sets whether or not the cursor itself should be shown. + */ + get isShown(): boolean { + return this._isShown + } + + /** + * Sets whether or not the cursor outline should be shown and fades the outline in/out accordingly. + */ + set outlineAlpha(alpha: number) { + if (alpha === this._outlineAlpha) { + return + } + + this.outlineAlphaCancelSet() + const initialAlpha = this.visual.mainPass.outlineAlpha as number + animate({ + cancelSet: this.outlineAlphaCancelSet, + duration: OUTLINE_ANIMATE_DURATION, + update: (t: number) => { + this.visual.mainPass.outlineAlpha = MathUtils.lerp( + initialAlpha, + alpha, + t + ) + }, + }) + this._outlineAlpha = alpha + } + + /** + * Returns the current alpha of the outline. + */ + get outlineAlpha(): number { + return this._outlineAlpha + } + + /** + * Sets the offset to increase the outline radius (both inner and outer edges) + * e.g. outlineOffset = 0.1 changes the outer/inner radii from default of (0.5,0.4) to (0.6,0.5) + */ + set outlineOffset(offset: number) { + if (offset === this._outlineOffset) { + return + } + + this.outlineOffsetCancelSet() + const initialOffset = this.visual.mainPass.outlineOffset as number + animate({ + cancelSet: this.outlineOffsetCancelSet, + duration: OUTLINE_ANIMATE_DURATION, + update: (t: number) => { + this.visual.mainPass.outlineOffset = MathUtils.lerp( + initialOffset, + offset, + t + ) + }, + }) + + this._outlineOffset = offset + } + + /** + * Returns the current outline offset. + */ + get outlineOffset(): number { + return this._outlineOffset + } + + /** + * Sets the squish scale of the inner circle + */ + set circleSquishScale(scale: number) { + if (scale === this._circleSquishScale) { + return + } + + this.visual.mainPass.circleSquishScale = scale + this._circleSquishScale = scale + } + + /** + * Returns the current outline offset. + */ + get circleSquishScale(): number { + return this._circleSquishScale + } + + /** + * Sets if the cursor should reflect a triggered state. + */ + set isTriggering(triggering: boolean) { + if (triggering === this._isTriggering) { + return + } + + this.visual.mainPass.isTriggering = triggering + + this._isTriggering = triggering + } + + /** + * Returns if the cursor is in a triggered state. + */ + get isTriggering(): boolean { + return this._isTriggering + } + + /** + * Sets if the visual should use a texture instead of drawing onto the plane mesh. + */ + set useTexture(useTexture: boolean) { + if (useTexture === this._useTexture) { + return + } + + this.visual.mainPass.useTexture = useTexture + + this._useTexture = useTexture + } + + /** + * Returns if the visual should use a texture instead of drawing onto the plane mesh. + */ + get useTexture(): boolean { + return this._useTexture + } + + /** + * Sets the texture of the cursor material's mainPass to place onto the plane mesh. + */ + set materialTexture(texture: Texture) { + if (texture === this._materialtexture) { + return + } + + this.visual.mainPass.cursorTexture = texture + + this._materialtexture = texture + } + + /** + * Returns the texture to place onto the plane mesh. + */ + get materialTexture(): Texture | null { + return this._materialtexture + } + + /** + * Caches the custom texture to place onto the plane mesh when using {@link CursorMode}.Custom. + */ + set customTexture(texture: Texture) { + if (texture === this._customTexture) { + return + } + + if (this.cursorMode === CursorMode.Custom) { + this.materialTexture = texture + } + + this._customTexture = texture + } + + /** + * Returns the custom texture to place onto the plane mesh when using {@link CursorMode}.Custom. + */ + get customTexture(): Texture | null { + return this._customTexture + } + + /** + * Set the {@link CursorMode} of the cursor to change the visual + * To return the cursor to its default {@link StateMachine} logic, use {@link CursorMode}.Auto + * @param cursorMode - The new mode of the cursor visual + */ + set cursorMode(cursorMode: CursorMode) { + if (cursorMode === this.cursorMode) { + return + } + + this.useTexture = cursorMode !== CursorMode.Auto + + switch (cursorMode) { + case CursorMode.Translate: + this.materialTexture = this.config.textures.translate + break + case CursorMode.ScaleTopLeft: + this.materialTexture = this.config.textures.scaleTL + break + case CursorMode.ScaleTopRight: + this.materialTexture = this.config.textures.scaleTR + break + case CursorMode.Disabled: + this.materialTexture = this.config.textures.disabled + break + case CursorMode.Custom: + validate(this.customTexture) + this.materialTexture = this.customTexture + break + + default: + break + } + + this._cursorMode = cursorMode + } + + /** + * Returns the {@link Texture} of the cursor when using the {@link CursorMode}.Custom mode + * @returns the custom texture (typically cached via requireAsset(.../assetName.png) as Texture) to use + */ + get cursorMode(): CursorMode { + return this._cursorMode + } + + set renderOrder(renderOrder: number) { + this.visual.setRenderOrder(renderOrder) + } + + get renderOrder(): number { + return this.visual.getRenderOrder() + } + + /** + * Set the 'handedness' of the cursor, e.g. left, right, or non-hand. + */ + set handType(type: HandType | null) { + let materialInput: number + + // The material graph uses -1,0,1 to differentiate the types. + switch (type) { + case "left": + materialInput = CursorMaterialHandType.Left + break + case "right": + materialInput = CursorMaterialHandType.Right + break + default: + materialInput = CursorMaterialHandType.NonHand + } + + this.visual.mainPass.handType = materialInput + } + + /** + * Get the 'handedness' of the cursor, e.g. left, right, or non-hand. + * @returns -1 for Left, 0 for Non-Hand, 1 for Right + */ + get handType(): HandType | null { + switch (this.visual.mainPass.handType) { + case -1: + return "left" + case 1: + return "right" + + default: + return null + } + } + + /** + * Set if there are multiple Interactors active in the scene to enable the multi-Interactor look. + */ + set multipleInteractorsActive(active: boolean) { + this.visual.mainPass.multipleInteractorsActive = active + } + + /** + * Returns if there are multiple Interactors active in the scene to enable the multi-Interactor look. + */ + get multipleInteractorsActive(): boolean { + return this.visual.mainPass.multipleInteractorsActive + } + + /** + * Set the world scale of the cursor. + */ + set worldScale(scale: vec3) { + this.visual.getTransform().setWorldScale(scale) + } + + /** + * Returns the world scale of the cursor. + */ + get worldScale(): vec3 { + return this.visual.getTransform().getWorldScale() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts.meta new file mode 100644 index 00000000..6eae92f3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CircleVisual.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! fe54526f-e42a-4026-97af-89cc58407e76 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! fe54526f-e42a-4026-97af-89cc58407e76 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6d3b21c7-4208-495e-82bb-2ca39782a9ae + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat new file mode 100644 index 00000000..82f7947f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat @@ -0,0 +1,279 @@ +- ! + PackagePath: "" + PassesInfo: + - ! bcb1bd2b-fd10-4461-b704-9bfc7d1b2471 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: true + DepthFunction: Always + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Center_N019: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Default_N010: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Default_N048: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_Default_N088: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N131: + typeIdx: 1 + value: 0.000000 + Port_Default_N153: + typeIdx: 1 + value: 0.000000 + Port_Default_N155: + typeIdx: 1 + value: 0.000000 + Port_Default_N156: + typeIdx: 1 + value: 0.000000 + Port_Input0_N083: + typeIdx: 1 + value: 0.700000 + Port_Input1_N020: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input1_N026: + typeIdx: 1 + value: 1.000000 + Port_Input1_N027: + typeIdx: 1 + value: 0.000000 + Port_Input1_N028: + typeIdx: 1 + value: 0.000000 + Port_Input1_N029: + typeIdx: 1 + value: 1.000000 + Port_Input1_N035: + typeIdx: 1 + value: 0.000000 + Port_Input1_N054: + typeIdx: 1 + value: 2.000000 + Port_Input1_N071: + typeIdx: 1 + value: 2.000000 + Port_Input1_N083: + typeIdx: 1 + value: 1.000000 + Port_Input1_N084: + typeIdx: 1 + value: 2.000000 + Port_Input1_N094: + typeIdx: 1 + value: 2.000000 + Port_Input1_N097: + typeIdx: 1 + value: 1.500000 + Port_Input1_N112: + typeIdx: 1 + value: 2.000000 + Port_Input1_N143: + typeIdx: 1 + value: 2.000000 + Port_RangeMaxA_N001: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N013: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N161: + typeIdx: 1 + value: 0.200000 + Port_RangeMaxB_N001: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N013: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N146: + typeIdx: 1 + value: 0.000000 + Port_RangeMaxB_N151: + typeIdx: 1 + value: 0.000000 + Port_RangeMaxB_N152: + typeIdx: 1 + value: 0.000000 + Port_RangeMaxB_N154: + typeIdx: 1 + value: 0.000000 + Port_RangeMaxB_N161: + typeIdx: 1 + value: 0.500000 + Port_RangeMinA_N001: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N013: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N161: + typeIdx: 1 + value: 1.000000 + Port_RangeMinB_N001: + typeIdx: 1 + value: -1.000000 + Port_RangeMinB_N013: + typeIdx: 1 + value: -1.000000 + Port_RangeMinB_N161: + typeIdx: 1 + value: 1.000000 + Port_Scale_N002: + typeIdx: 3 + value: {x: 2.000000, y: 2.000000} + Port_Value1_N014: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_Value1_N046: + typeIdx: 1 + value: 0.000000 + Port_Value1_N048: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 0.000000} + Port_Value1_N131: + typeIdx: 1 + value: 1.000000 + Port_Value1_N149: + typeIdx: 1 + value: 0.623400 + Port_Value1_N156: + typeIdx: 1 + value: 1.000000 + Port_Value2_N046: + typeIdx: 1 + value: 0.000000 + Port_Value2_N131: + typeIdx: 1 + value: 1.000000 + Port_Value2_N149: + typeIdx: 1 + value: 0.376600 + Port_Value2_N156: + typeIdx: 1 + value: 1.000000 + Port_Value3_N131: + typeIdx: 1 + value: 1.000000 + Port_Value3_N149: + typeIdx: 1 + value: 0.000000 + Port_Value3_N156: + typeIdx: 1 + value: 1.000000 + Port_Value4_N156: + typeIdx: 1 + value: 1.000000 + Port_Value_N036: + typeIdx: 1 + value: 0.500000 + Port_Value_N037: + typeIdx: 1 + value: 0.400000 + Port_Value_N041: + typeIdx: 0 + value: 60 + Port_Value_N042: + typeIdx: 1 + value: 0.300000 + Port_Value_N068: + typeIdx: 1 + value: 0.900000 + Port_Value_N091: + typeIdx: 0 + value: 45 + Port_Value_N164: + typeIdx: 1 + value: 2.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + circleSquishScale: + typeIdx: 1 + value: 1.000000 + cursorTexture: + typeIdx: 9 + value: + id: 51b1ce57-da27-43f9-af3c-6d08f0445dea + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + cursorTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + cursorTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + cursorTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + cursorTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + handType: + typeIdx: 0 + value: 0 + isTriggering: + typeIdx: 2 + value: false + maxAlpha: + typeIdx: 1 + value: 1.000000 + multipleInteractorsActive: + typeIdx: 2 + value: false + outlineAlpha: + typeIdx: 1 + value: 1.000000 + outlineOffset: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + shadowGradientOffset: + typeIdx: 1 + value: 0.100000 + shadowOpacity: + typeIdx: 1 + value: 0.100000 + useTexture: + typeIdx: 2 + value: false + Pass: ! 288aad0f-0f63-48be-a2e3-3f8b378d8379 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat.meta new file mode 100644 index 00000000..9adccca3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Cursor.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! cae9a018-3d89-458f-9260-baee98b8a85e + ImporterName: MaterialImporter + PrimaryAsset: ! cae9a018-3d89-458f-9260-baee98b8a85e + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts new file mode 100644 index 00000000..8679a96f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts @@ -0,0 +1,68 @@ +import { + Interactor, + InteractorInputType, +} from "../../../Core/Interactor/Interactor" + +import BaseInteractor from "../../../Core/Interactor/BaseInteractor" +import {CursorControllerProvider} from "../../../Providers/CursorControllerProvider/CursorControllerProvider" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {InteractorCursor} from "./InteractorCursor" + +/** + * This class manages the creation and retrieval of InteractorCursor instances for interactors. It initializes cursors for all interactors on awake and provides methods to get cursors by interactor or input type. + */ +@component +export class CursorController extends BaseScriptComponent { + private cursorControllerProvider = CursorControllerProvider.getInstance() + + onAwake(): void { + const interactors = InteractionManager.getInstance().getInteractorsByType( + InteractorInputType.All, + ) + + interactors.forEach((interactor: Interactor) => { + const cursor = this.getSceneObject().createComponent( + InteractorCursor.getTypeName(), + ) + cursor.interactor = interactor as BaseInteractor + }) + } + + /** + * @deprecated in favor of getCursorByInteractor + * Gets the InteractorCursor for a specified interactor + * @param interactor - The interactor to get the cursor for + * @returns the InteractorCursor for the requested interactor, or null if it doesn't exist + */ + getCursor(interactor: Interactor): InteractorCursor | null { + return this.cursorControllerProvider.getCursor(interactor) + } + + /** + * Gets the InteractorCursor for a specified interactor + * @param interactor - The interactor to get the cursor for + * @returns the InteractorCursor for the requested interactor, or null if it doesn't exist + */ + getCursorByInteractor(interactor: Interactor): InteractorCursor | null { + return this.cursorControllerProvider.getCursorByInteractor(interactor) + } + + /** + * Gets the InteractorCursor for a specified input type + * @param inputType - The InteractorInputType to get the cursor for + * @returns the InteractorCursor for the requested InteractorInputType, or null if it doesn't exist + */ + getCursorByInputType( + inputType: InteractorInputType, + ): InteractorCursor | null { + return this.cursorControllerProvider.getCursorByInputType(inputType) + } + + /** + * Gets all InteractorCursors within the scene + * @returns a list of InteractorCursors + */ + getAllCursors(): InteractorCursor[] { + return this.cursorControllerProvider.getAllCursors() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts.meta new file mode 100644 index 00000000..44d7a473 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorController.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 7217890d-94fe-4565-b9c9-df31bdb6e095 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph new file mode 100644 index 00000000..db7aea30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3172a4684c5d399f7257039391b050c5fedd8af9ae99afb559966874f401a602 +size 859347 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph.meta new file mode 100644 index 00000000..13d88aab --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorMat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 288aad0f-0f63-48be-a2e3-3f8b378d8379 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 288aad0f-0f63-48be-a2e3-3f8b378d8379 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts new file mode 100644 index 00000000..b180c00a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts @@ -0,0 +1,688 @@ +import {Interactable} from "../../../Components/Interaction/Interactable/Interactable" +import {InteractableManipulation} from "../../../Components/Interaction/InteractableManipulation/InteractableManipulation" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import { + Interactor, + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "../../../Core/Interactor/Interactor" +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {HandInputData} from "../../../Providers/HandInputData/HandInputData" +import {InteractionConfigurationProvider} from "../../../Providers/InteractionConfigurationProvider/InteractionConfigurationProvider" +import animate, {CancelSet, easingFunctions} from "../../../Utils/animate" +import Event, {unsubscribe} from "../../../Utils/Event" +import NativeLogger from "../../../Utils/NativeLogger" +import {OneEuroFilterVec3} from "../../../Utils/OneEuroFilter" +import StateMachine from "../../../Utils/StateMachine" +import {ScrollView} from "../../UI/ScrollView/ScrollView" + +export enum CursorState { + Inactive = "Inactive", + Idle = "Idle", + Hovering = "Hovering", + Manipulating = "Manipulating", + Scrolling = "Scrolling", +} + +export enum CursorInteractor { + Primary, + Secondary, +} + +export type CursorViewState = ( + | { + cursorEnabled: true + cursorData: CursorData + } + | { + cursorEnabled: false + } +) & + ( + | { + lineEnabled: true + lineData: ManipulateLineData + } + | { + lineEnabled: false + } + ) + +export type CursorData = { + position: vec3 | null + interactionStrength: number | null + isTriggering: boolean + scale: number +} + +export type ManipulateLineData = { + origin: vec3 + endPoint: vec3 + delta: vec3 | null +} + +const DISTANCE_SCALE_FACTOR = 10 +const DEFAULT_INITIAL_DISTANCE = 160 +const MIN_DISTANCE = 15 +const DEFAULT_MANIPULATE_STRENGTH = 1 +const DEFAULT_HOVER_ANIMATE_DURATION_SECONDS = 0.2 +const DEFAULT_IDLE_ANIMATE_DURATION_SECONDS = 0.7 + +const DEFAULT_NEAR_FIELD_SCALE = 0.4 +const DEFAULT_MID_FIELD_SCALE = 0.8 +const DEFAULT_FAR_FIELD_SCALE = 1.2 + +const DEFAULT_NEAR_FIELD_THRESHOLD_CM = 70 +const DEFAULT_MID_FIELD_THRESHOLD_CM = 130 +const DEFAULT_FAR_FIELD_THRESHOLD_CM = 200 + +const DEFAULT_CURSOR_FILTER = { + frequency: 60, + dcutoff: 0.16, + minCutoff: 0.5, + beta: 0.2, +} + +const TAG = "CursorViewModel" + +/** + * ViewModel for the InteractorCursor that uses a StateMachine to keep track of cursor updates & state changes. + */ +export class CursorViewModel { + private interactionConfigurationProvider: InteractionConfigurationProvider = + InteractionConfigurationProvider.getInstance() + + private camera = WorldCameraFinderProvider.getInstance() + + // Native Logging + private log = new NativeLogger(TAG) + + private stateMachine = new StateMachine("CursorViewModel") + + private handProvider: HandInputData = HandInputData.getInstance() + + private interactionManager: InteractionManager = + InteractionManager.getInstance() + + private onStateChangeEvent = new Event() + public onStateChange = this.onStateChangeEvent.publicApi() + private onCursorUpdateEvent = new Event() + public onCursorUpdate = this.onCursorUpdateEvent.publicApi() + + private _cursorPosition: vec3 | null = null + + private currentInteractableUnsubscribeCallback: unsubscribe | null = null + private currentInteractable: Interactable | null = null + private currentManipulation: InteractableManipulation | null = null + private isScrolling = false + + private cursorDistance = DEFAULT_INITIAL_DISTANCE + + private distanceCancelSet = new CancelSet() + private isAnimating = false + + private scrollView: ScrollView | null = null + + // Allows the developer to set position manually, setting to null whenever the developer wants to resume default behavior. + positionOverride: vec3 | null = null + + /** + * Currently using a one-euro filter optimized for reducing slow speed jitter. + */ + private filter = new OneEuroFilterVec3(DEFAULT_CURSOR_FILTER) + + constructor( + private enableCursorHolding: boolean, + private enableFilter: boolean, + private _interactor?: Interactor + ) { + // If passing an Interactor within the constructor, ensure the Interactor callbacks are setup correctly. + if (_interactor !== undefined) { + this.setInteractor(_interactor) + } + + this.setupStateMachine() + } + + setInteractor(interactor: Interactor): void { + if (this.currentInteractableUnsubscribeCallback !== null) { + this.currentInteractableUnsubscribeCallback() + this.currentInteractableUnsubscribeCallback = null + } + + this._interactor = interactor + + this.currentInteractableUnsubscribeCallback = + this.interactor?.onCurrentInteractableChanged.add((interactable) => { + this.currentInteractable = interactable + this.currentManipulation = + interactable !== null + ? interactable.sceneObject.getComponent( + InteractableManipulation.getTypeName() + ) + : null + this.isScrolling = + interactable !== null + ? this.checkScrollable(interactable.sceneObject) + : false + }) ?? null + } + + private get interactor(): Interactor | null { + return this._interactor ?? null + } + + get cursorPosition(): vec3 | null { + return this._cursorPosition + } + + private setupStateMachine() { + this.stateMachine.addState({ + name: CursorState.Inactive, + onEnter: () => { + this.onStateChangeEvent.invoke(CursorState.Inactive) + + // If we enter the inactive state due to direct targeting, set the cursor distance to be closer to hand for post-direct interaction. + const isDirect = + this.interactor !== null && + this.interactor.activeTargetingMode === TargetingMode.Direct + this.cursorDistance = isDirect ? MIN_DISTANCE : DEFAULT_INITIAL_DISTANCE + }, + transitions: [ + { + nextStateName: CursorState.Idle, + checkOnUpdate: () => { + return ( + (this.checkVisibleTargetingState() && + this.interactor?.currentInteractable === null) ?? + false + ) + }, + }, + { + nextStateName: CursorState.Hovering, + // If the interactor targets an object on the first frame of being active, jump immediately to the object to avoid jumpy cursor. + checkOnUpdate: () => { + return ( + this.checkVisibleTargetingState() && + this.interactor?.currentInteractable !== null + ) + }, + }, + ], + }) + + this.stateMachine.addState({ + name: CursorState.Idle, + onEnter: () => { + this.onStateChangeEvent.invoke(CursorState.Idle) + + // When entering idle state with no Interactable target, lerp to the default distance + const distance = Math.max(this.cursorDistance, MIN_DISTANCE) + this.animateCursorDistance( + distance, + "ease-in-out-cubic", + DEFAULT_IDLE_ANIMATE_DURATION_SECONDS + ) + }, + onUpdate: (): void => { + const position = this.getFarFieldCursorPosition() + + this.updateIndirectCursorPosition( + this.interactor?.interactionStrength ?? null, + position + ) + }, + transitions: [ + { + nextStateName: CursorState.Inactive, + checkOnUpdate: () => { + return !this.interactor || !this.checkVisibleTargetingState() + }, + }, + { + nextStateName: CursorState.Hovering, + checkOnUpdate: () => { + return this.interactor?.currentInteractable !== null + }, + // Lerp to the targeted Interactable when transitioning to hover state + onExecution: () => { + const origin = this.interactor?.startPoint ?? null + const hitPosition = this.interactor?.targetHitPosition ?? null + + if (origin === null || hitPosition === null) { + return + } + + const distance = origin.distance(hitPosition) + + this.animateCursorDistance( + distance, + "linear", + DEFAULT_HOVER_ANIMATE_DURATION_SECONDS + ) + }, + }, + ], + }) + + this.stateMachine.addState({ + name: CursorState.Hovering, + onEnter: () => { + this.onStateChangeEvent.invoke(CursorState.Hovering) + }, + onUpdate: () => { + // Cancel the animation if a trigger happens mid-animation + if ( + this.isAnimating && + this.interactor?.currentTrigger !== InteractorTriggerType.None + ) { + this.cancelAnimation() + } + + if (!this.isAnimating) { + if (!this.interactor || !this.interactor.startPoint) { + return + } + + this.cursorDistance = + this.interactor?.targetHitInfo?.hit.position.distance( + this.interactor.startPoint + ) ?? this.cursorDistance + } + + const position = this.shouldCursorHold() + ? this.getHeldCursorPosition() + : this.getFarFieldCursorPosition() + + this.updateIndirectCursorPosition( + this.interactor?.interactionStrength ?? null, + position + ) + }, + transitions: [ + { + nextStateName: CursorState.Inactive, + checkOnUpdate: () => { + return !this.interactor || !this.checkVisibleTargetingState() + }, + }, + { + nextStateName: CursorState.Idle, + checkOnUpdate: () => { + return !this.interactor?.currentInteractable + }, + }, + { + nextStateName: CursorState.Manipulating, + checkOnUpdate: () => { + return ( + this.interactor?.currentTrigger !== InteractorTriggerType.None && + this.currentManipulation !== null + ) + }, + }, + { + nextStateName: CursorState.Scrolling, + checkOnUpdate: () => { + return ( + this.interactor?.currentTrigger !== InteractorTriggerType.None && + this.isScrolling && + this.interactor?.currentDragVector !== null + ) + }, + }, + ], + onExit: () => { + this.cancelAnimation() + }, + }) + + this.stateMachine.addState({ + name: CursorState.Manipulating, + onEnter: () => this.onStateChangeEvent.invoke(CursorState.Manipulating), + onUpdate: () => { + /** + * We were showing the cursor held to center as a visual feedback if line is disabled, + * But we disabled this by default in LAF-3485. + */ + this.updateIndirectCursorPosition( + DEFAULT_MANIPULATE_STRENGTH, + this.getHeldCursorPosition() + ) + }, + transitions: [ + { + nextStateName: CursorState.Inactive, + checkOnUpdate: () => { + return !this.interactor || !this.checkVisibleTargetingState() + }, + }, + { + nextStateName: CursorState.Idle, + checkOnUpdate: () => { + return !this.interactor?.currentInteractable + }, + }, + { + nextStateName: CursorState.Hovering, + checkOnUpdate: () => { + return ( + this.interactor?.currentTrigger === InteractorTriggerType.None + ) + }, + }, + ], + }) + + this.stateMachine.addState({ + name: CursorState.Scrolling, + onEnter: () => this.onStateChangeEvent.invoke(CursorState.Scrolling), + onUpdate: () => { + const planecastPosition = this.getPlanecastCursorPosition() + + this.updateIndirectCursorPosition( + this.interactor?.interactionStrength ?? null, + planecastPosition + ) + }, + + transitions: [ + { + nextStateName: CursorState.Inactive, + checkOnUpdate: () => { + return !this.interactor || !this.checkVisibleTargetingState() + }, + }, + { + nextStateName: CursorState.Idle, + checkOnUpdate: () => { + return ( + !this.interactor?.currentInteractable || + // If the planecasted point is not within the ScrollView's bounds, immediately switch to Idle to avoid a flicker. + (!this.checkPlanecastWithinScrollView() && + this.interactor?.currentTrigger === InteractorTriggerType.None) + ) + }, + }, + { + nextStateName: CursorState.Hovering, + checkOnUpdate: () => { + return ( + this.interactor?.currentTrigger === InteractorTriggerType.None + ) + }, + }, + ], + }) + + this.stateMachine.enterState(CursorState.Inactive) + } + + private getPlanecastCursorPosition(): vec3 | null { + if (this.interactor === null) { + this.log.d( + "Cursor failed to get planecast position due to null interactor, and will return null." + ) + return null + } + + const position = this.interactor.planecastPoint + + return this.shouldFilter() && position + ? this.filter.filter(position, getTime()) + : position + } + + private checkPlanecastWithinScrollView() { + const cursorPos = this.getPlanecastCursorPosition() + if (cursorPos === null) { + return false + } + + return ( + this.scrollView + ?.getSceneObject() + ?.getComponent("Component.ScreenTransform") + ?.containsWorldPoint(cursorPos) ?? false + ) + } + + /** + * Calculates the position of the cursor based on the center of the targeting ray. + * @returns the position of the cursor, or null if not applicable + */ + private getFarFieldCursorPosition(): vec3 | null { + const origin = this.interactor?.startPoint ?? null + const direction = this.interactor?.direction ?? null + if (this.interactor === null || origin === null || direction === null) { + this.log.d( + "Cursor failed to get far field position due to null interactor, origin, or direction, and will return null." + ) + return null + } + const position = origin.add(direction.uniformScale(this.cursorDistance)) + return this.shouldFilter() + ? this.filter.filter(position, getTime()) + : position + } + + /** + * Returns the held cursor position, where it's stuck to the center of target when currently selecting, or the hit position otherwise. + * @returns the position of the held cursor, with the regular far field cursor position or null as a fallback if the target hit position cannot be found. + */ + private getHeldCursorPosition(): vec3 | null { + let position: vec3 | null + + if (!this.interactor) { + return null + } + const isTriggering = + (this.interactor.currentTrigger & InteractorTriggerType.Select) !== 0 + + const wasTriggering = + (this.interactor.previousTrigger & InteractorTriggerType.Select) !== 0 + + if (isTriggering) { + // While triggering, ensuring that the initial local position is maintained. + position = + this.interactor?.currentInteractable?.sceneObject + .getTransform() + .getWorldTransform() + .multiplyPoint( + this.interactor?.targetHitInfo?.localHitPosition ?? vec3.zero() + ) ?? null + } else if (wasTriggering && !isTriggering) { + // On the frame that the Interactor stops triggering, maintain the same cursor position as previous frame to account for targeting changes. + position = this.cursorPosition + } else { + // We calculate the direction from the interactor to the hit point, then use the stored cursor distance to respect animated distance. + const origin = this.interactor.startPoint + if (!origin) { + return null + } + const direction = this.interactor.targetHitInfo?.hit.position + ?.sub(origin) + .normalize() + + if (!direction) { + return null + } + + position = origin.add(direction.uniformScale(this.cursorDistance)) + } + + if (position) { + return this.shouldFilter() + ? this.filter.filter(position, getTime()) + : position + } else { + return this.getFarFieldCursorPosition() + } + } + + /** + * @returns if the cursor should be held to the hit position. + * During manipulation, since the interactor is assumed to be triggered, we hold the cursor to maintain local offset. + */ + private shouldCursorHold(): boolean { + return ( + this.enableCursorHolding && + ((this.interactor && + (this.interactor.inputType & InteractorInputType.BothHands) !== 0) ?? + false) + ) + } + + private shouldFilter(): boolean { + return ( + this.enableFilter && + ((this.interactor && + (this.interactor.inputType & InteractorInputType.BothHands) !== 0) ?? + false) + ) + } + + // Animates the cursor to move to a certain distance using easing functions + private animateCursorDistance( + distance: number, + easing: keyof typeof easingFunctions, + duration: number + ) { + // Ensure only one thing is modifying the cursor distance at a time + this.distanceCancelSet.cancel() + this.isAnimating = true + + const initialDistance = this.cursorDistance + animate({ + cancelSet: this.distanceCancelSet, + duration: duration, + update: (t: number) => { + this.cursorDistance = MathUtils.lerp(initialDistance, distance, t) + }, + ended: () => { + this.isAnimating = false + }, + easing: easing, + }) + } + + /** + * Cancel the existing animation and set the isAnimating boolean to false, + * allowing other functions ({@link getFarFieldCursorPosition} and {@link getHeldCursorPosition}) + * to modify {@link cursorDistance} to jump the cursor to the Interactable object + */ + private cancelAnimation() { + this.distanceCancelSet.cancel() + this.isAnimating = false + } + + // Check if interacted item is within a ScrollView + private checkScrollable(sceneObject: SceneObject | null): boolean { + if (sceneObject === null) { + return false + } + + const interactable = + this.interactionManager.getInteractableBySceneObject(sceneObject) + + if (interactable !== null && interactable.isScrollable) { + this.scrollView = sceneObject.getComponent(ScrollView.getTypeName()) + if (this.scrollView !== null) { + return this.scrollView.contentLength > this.scrollView.scrollAreaSize.y + } + } + + return this.checkScrollable(sceneObject.getParent()) + } + + /** + * When in indirect interaction mode while targeting an Interactable, + * positions to interaction hit point if snapping. + * If there is no origin, then hide the cursor instead. + */ + private updateIndirectCursorPosition( + interactionStrength: number | null, + position: vec3 | null + ): void { + if (position !== null) { + if (!this.isAnimating) { + this.cursorDistance = + this.interactor?.startPoint?.distance(position) ?? this.cursorDistance + } + + this._cursorPosition = this.positionOverride ?? position + + this.onCursorUpdateEvent.invoke({ + cursorEnabled: true, + cursorData: { + position: this.cursorPosition, + interactionStrength: interactionStrength ?? null, + isTriggering: + this.interactor?.currentTrigger !== InteractorTriggerType.None, + scale: this.calculateCursorScale(), + }, + lineEnabled: false, + }) + } + } + + // Check if the interactor is not in a state that should hide the cursor (poke or direct), as well as if the interactor is active/targeting. + private checkVisibleTargetingState(): boolean { + if (this.interactor?.enabled) { + // If the interactor is targeting via direct pinch or poke (but not necessarily near field mode due to no plane), hide the cursor. + const isVisibleTargetingMode = + (this.interactor.activeTargetingMode & + (TargetingMode.Poke | TargetingMode.Direct | TargetingMode.None)) === + 0 + + return ( + (isVisibleTargetingMode || + this.interactor.inputType === InteractorInputType.Mouse) && + this.interactor.isActive() && + this.interactor.isTargeting() + ) + } + + return false + } + + private calculateCursorScale(): number { + if (this.cursorDistance > DEFAULT_FAR_FIELD_THRESHOLD_CM) { + return DEFAULT_FAR_FIELD_SCALE + } else if ( + this.cursorDistance > DEFAULT_MID_FIELD_THRESHOLD_CM && + this.cursorDistance <= DEFAULT_FAR_FIELD_THRESHOLD_CM + ) { + const scaleDifference = DEFAULT_FAR_FIELD_SCALE - DEFAULT_MID_FIELD_SCALE + + const t = MathUtils.remap( + this.cursorDistance, + DEFAULT_MID_FIELD_THRESHOLD_CM, + DEFAULT_FAR_FIELD_THRESHOLD_CM, + 0, + 1 + ) + + return DEFAULT_MID_FIELD_SCALE + scaleDifference * t + } else if ( + this.cursorDistance > DEFAULT_NEAR_FIELD_THRESHOLD_CM && + this.cursorDistance <= DEFAULT_MID_FIELD_THRESHOLD_CM + ) { + const scaleDifference = DEFAULT_MID_FIELD_SCALE - DEFAULT_NEAR_FIELD_SCALE + + const t = MathUtils.remap( + this.cursorDistance, + DEFAULT_NEAR_FIELD_THRESHOLD_CM, + DEFAULT_MID_FIELD_THRESHOLD_CM, + 0, + 1 + ) + + return DEFAULT_NEAR_FIELD_SCALE + scaleDifference * t + } else { + return DEFAULT_NEAR_FIELD_SCALE + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts.meta new file mode 100644 index 00000000..ce2f023b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/CursorViewModel.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 32a0c15f-9bb8-489e-b94c-d03d3c78a6fe + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 32a0c15f-9bb8-489e-b94c-d03d3c78a6fe + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 61fb97de-3768-43db-b2a2-b70dba7a8077 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts new file mode 100644 index 00000000..bdbcd4c4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts @@ -0,0 +1,353 @@ +import {CircleVisual, CircleVisualConfig} from "./CircleVisual" +import { + CursorData, + CursorState, + CursorViewModel, + CursorViewState, + ManipulateLineData, +} from "./CursorViewModel" +import { + Interactor, + InteractorInputType, +} from "../../../Core/Interactor/Interactor" +import LineRenderer, { + LineViewConfig, +} from "../../../Utils/views/LineRenderer/LineRenderer" + +import BaseInteractor from "../../../Core/Interactor/BaseInteractor" +import {CursorControllerProvider} from "../../../Providers/CursorControllerProvider/CursorControllerProvider" +import Event from "../../../Utils/Event" +import {HandType} from "../../../Providers/HandInputData/HandType" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {validate} from "../../../Utils/validate" + +export enum CursorMode { + Auto = "Auto", + Translate = "Translate", + ScaleTopLeft = "ScaleTopLeft", + ScaleTopRight = "ScaleTopRight", + Disabled = "Disabled", + Custom = "Custom", +} + +const TAG = "InteractorCursor" + +const LINE_VERTICES = 10 +const LINE_MIDPOINT = 0.7 + +const DEFAULT_IDLE_OUTLINE_OFFSET = 0.0 +const DEFAULT_HOVER_OUTLINE_OFFSET = 0.1 + +const DEFAULT_IDLE_SCALE = 1.0 +const DEFAULT_SQUISH_SCALE = 0.6 + +const DEFAULT_IDLE_OUTLINE_ALPHA = 1.0 +const DEFAULT_HOVER_OUTLINE_ALPHA = 0.5 + +const MESH_SCENE_OBJECT_INDEX = 0 + +/** + * This class represents a cursor for interactors, providing visual feedback for different interaction states. It manages the cursor's appearance, including its circle visual and manipulation line, and handles state changes and events. + */ +@component +export class InteractorCursor extends BaseScriptComponent { + private circleVisualConfig!: CircleVisualConfig + + private manipulateLineConfig!: LineViewConfig + + private circleVisual!: CircleVisual + private circleVisualEnabled = true + + private manipulateLine!: LineRenderer + + private viewModel!: CursorViewModel + + private interactionManager = InteractionManager.getInstance() + private cursorController = CursorControllerProvider.getInstance() + + // Events + private onEnableChangedEvent = new Event() + + /** + * Called whenever the cursor changes enabled state (showing / hiding the cursor visual) + */ + onEnableChanged = this.onEnableChangedEvent.publicApi() + + private onStateChange = (state: CursorState) => { + switch (state) { + case CursorState.Inactive: + // If the visual is already hidden, do not invoke the extra event. + if (this.circleVisual.isShown) { + this.onEnableChangedEvent.invoke(false) + } + this.circleVisual.isShown = false + this.circleVisual.outlineOffset = DEFAULT_IDLE_OUTLINE_OFFSET + break + case CursorState.Idle: + this.circleVisual.outlineAlpha = DEFAULT_IDLE_OUTLINE_ALPHA + this.circleVisual.outlineOffset = DEFAULT_IDLE_OUTLINE_OFFSET + break + case CursorState.Hovering: + this.circleVisual.outlineAlpha = DEFAULT_HOVER_OUTLINE_ALPHA + this.circleVisual.outlineOffset = DEFAULT_HOVER_OUTLINE_OFFSET + break + } + } + + private onCursorUpdate = (viewState: CursorViewState) => { + // If the script component has been disabled, do not show the cursor visual. + const shouldShow = viewState.cursorEnabled && this.circleVisualEnabled + if (shouldShow !== this.circleVisual.isShown) { + this.onEnableChangedEvent.invoke(shouldShow) + } + + this.circleVisual.isShown = shouldShow + this.circleVisual.multipleInteractorsActive = + this.checkMultipleInteractorsActive() + + this.manipulateLine.setEnabled(viewState.lineEnabled) + if (viewState.cursorEnabled) { + this.updateWorldCursor(viewState.cursorData) + } + if (viewState.lineEnabled) { + this.updateManipulateLine(viewState.lineData) + } + } + + @input + enableCursorHolding: boolean = true + @input + enableFilter: boolean = false + + @input("Component.ScriptComponent") + @allowUndefined + _interactor?: BaseInteractor + + visual!: SceneObject + + onAwake(): void { + this.defineScriptEvents() + + this.visual = this.createVisual() + + this.circleVisualConfig = { + meshSceneObject: this.visual, + textures: { + translate: requireAsset("./translate.png") as Texture, + scaleTL: requireAsset("./scale-tl.png") as Texture, + scaleTR: requireAsset("./scale-tr.png") as Texture, + disabled: requireAsset("./disabled.png") as Texture, + }, + } + this.manipulateLineConfig = { + points: [new vec3(0, 0, 0), new vec3(0, 100, 0)], + material: requireAsset("./ManipulateLineMaterial.mat") as Material, + startWidth: 0.1, + endWidth: 0.1, + startColor: new vec4(1, 1, 1, 1), + endColor: new vec4(1, 1, 1, 1), + enabled: false, + } + + this.circleVisual = new CircleVisual(this.circleVisualConfig) + + this.manipulateLine = new LineRenderer(this.manipulateLineConfig) + this.manipulateLine.getSceneObject().setParent(this.getSceneObject()) + + this.viewModel = new CursorViewModel( + this.enableCursorHolding, + this.enableFilter, + this.interactor as Interactor, + ) + this.viewModel.onStateChange.add(this.onStateChange) + this.viewModel.onCursorUpdate.add(this.onCursorUpdate) + + if (this._interactor !== undefined) { + this.interactor = this._interactor + } + } + + set interactor(interactor: BaseInteractor) { + validate( + interactor, + "InteractorCursor cannot have an undefined Interactor reference.", + ) + + this._interactor = interactor as BaseInteractor + this.viewModel.setInteractor(interactor) + + this.cursorController.registerCursor(this) + + let handType: HandType | null + switch (interactor.inputType) { + case InteractorInputType.LeftHand: + handType = "left" + break + case InteractorInputType.RightHand: + handType = "right" + break + + default: + return + } + + this.circleVisual.handType = handType + } + + get interactor(): BaseInteractor | null { + return this._interactor ?? null + } + + /** + * Programmatically instantiates the cursor visual + * @returns The SceneObject for the cursor visual + */ + private createVisual(): SceneObject { + const visual = global.scene.createSceneObject("CursorVisual") + visual.setParent(this.getSceneObject()) + + const visualMesh = visual.createComponent("Component.RenderMeshVisual") + visualMesh.mesh = requireAsset("./Plane.mesh") as RenderMesh + visualMesh.mainMaterial = requireAsset("./Cursor.mat") as Material + + return visual + } + + private updateWorldCursor(data: CursorData) { + validate(data.position) + + this.circleVisual.worldPosition = data.position + if (data.interactionStrength !== null) { + this.circleVisual.circleSquishScale = MathUtils.lerp( + DEFAULT_IDLE_SCALE, + DEFAULT_SQUISH_SCALE, + data.interactionStrength, + ) + } else { + this.circleVisual.circleSquishScale = DEFAULT_IDLE_SCALE + } + + this.circleVisual.isTriggering = data.isTriggering + + this.circleVisual.worldScale = vec3.one().uniformScale(data.scale) + } + + /** + * Get the world position of this interactor's cursor visual + * @returns vec3 of the worldPosition + */ + get cursorPosition(): vec3 | null { + return this.viewModel.cursorPosition + } + + /** + * Set the world position of this interactor's cursor visual + * @param position - vec3 of the worldPosition, null to revert to default behavior to follow raycast + */ + set cursorPosition(position: vec3 | null) { + this.viewModel.positionOverride = position + } + + /** + * Set the {@link CursorMode} of the cursor to change the visual + * To return the cursor to its default {@link StateMachine} logic, use {@link CursorMode}.Auto + * @param mode - The new mode of the cursor visual + */ + set cursorMode(mode: CursorMode) { + this.circleVisual.cursorMode = mode + } + + /** + * Set the {@link Texture} of the cursor when using the {@link CursorMode}.Custom mode + * Must explicitly set the {@link CursorMode} to {@link CursorMode}.Custom before the texture appears. + * @param texture - The custom texture (typically cached via requireAsset(.../assetName.png) as Texture) to use + */ + set customTexture(texture: Texture) { + this.circleVisual.customTexture = texture + } + + /** + * Set the render order of the cursor visual. + */ + set renderOrder(renderOrder: number) { + this.circleVisual.renderOrder = renderOrder + } + + private updateManipulateLine(data: ManipulateLineData) { + this.manipulateLine.points = this.getCurvedLinePoints( + data.origin, + data.endPoint, + data.delta, + ) + } + + private defineScriptEvents() { + this.createEvent("OnEnableEvent").bind(() => { + this.onEnable() + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.onDisable() + }) + + this.createEvent("OnDestroyEvent").bind(() => { + this.onDestroy() + }) + } + + /** + * Enable the cursor visual. + */ + private onEnable() { + this.circleVisualEnabled = true + } + + /** + * Disable the cursor visual. + */ + private onDisable() { + this.circleVisualEnabled = false + } + + private onDestroy() { + this.visual.destroy() + } + + /** + * Creates the points of the curved line used for far field manipulation. + * @param start - where the line starts + * @param end - where the line ends + * @param curveOffset - the vector that the line's midpoint will be offset by to create the curve + * @returns an array of points along the curved line created from start to end. + */ + private getCurvedLinePoints( + start: vec3, + end: vec3, + curveOffset: vec3 | null, + ): vec3[] { + let midPoint = vec3.lerp(start, end, LINE_MIDPOINT) + if (curveOffset !== null) { + midPoint = midPoint.add(curveOffset) + } + const points = [] + for (let ratio = 0; ratio <= 1; ratio += 1 / LINE_VERTICES) { + const tangent1 = vec3.lerp(start, midPoint, ratio) + const tangent2 = vec3.lerp(midPoint, end, ratio) + const curve = vec3.lerp(tangent1, tangent2, ratio) + points.push(curve) + } + return points + } + + private checkMultipleInteractorsActive(): boolean { + const interactors = this.interactionManager.getInteractorsByType( + InteractorInputType.All, + ) + + const activeInteractors = interactors.filter((interactor) => { + return interactor.isActive() && interactor.isTargeting() + }) + + return activeInteractors.length > 1 + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts.meta new file mode 100644 index 00000000..18978a89 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/InteractorCursor.ts.meta @@ -0,0 +1,45 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 9269b22e-25c9-41f2-adf8-4c557341e25f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 9269b22e-25c9-41f2-adf8-4c557341e25f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 200fbd88-9fca-42b8-912c-c98225fdbca1 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _interactor: false + enableCursorHolding: false + enableFilter: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - enableFilter: false + _interactor: ! 00000000-0000-0000-0000-000000000000 + enableCursorHolding: true + ScriptTypes: + - + {} + InputLines: + - // @input bool enableCursorHolding = true + - // @input bool enableFilter + - // @input Component.ScriptComponent _interactor + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph new file mode 100644 index 00000000..3da09588 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15d90b6accc7074c1d01d5e67cb5a9289248633215b2ea578a848381a552303b +size 459580 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph.meta new file mode 100644 index 00000000..c23fa880 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! b4a4847a-aa6c-4fb3-b3e6-d2bf7f550eb2 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! b4a4847a-aa6c-4fb3-b3e6-d2bf7f550eb2 + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat new file mode 100644 index 00000000..9e3c3f82 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat @@ -0,0 +1,93 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 820b696c-e593-4322-a9f8-d4aacc697c23 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Input1_N014: + typeIdx: 1 + value: 2.000000 + Port_Position1_N066: + typeIdx: 1 + value: 0.200000 + Port_Position1_N070: + typeIdx: 1 + value: 1.000000 + Port_Position1_N073: + typeIdx: 1 + value: 0.300000 + Port_Position1_N077: + typeIdx: 1 + value: 0.700000 + Port_Position2_N073: + typeIdx: 1 + value: 0.700000 + Port_Value0_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000} + Port_Value2_N067: + typeIdx: 1 + value: 0.000000 + Port_Value2_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000} + Port_Value3_N040: + typeIdx: 1 + value: 0.000000 + Port_Value3_N060: + typeIdx: 1 + value: 0.000000 + Port_Value_N008: + typeIdx: 2 + value: true + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 77 + endColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + endWidth: + typeIdx: 1 + value: 0.100000 + maxAlpha: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + startColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + startWidth: + typeIdx: 1 + value: 0.100000 + visualStyle: + typeIdx: 0 + value: 3 + Pass: ! b4a4847a-aa6c-4fb3-b3e6-d2bf7f550eb2 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat.meta new file mode 100644 index 00000000..fc321b41 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/ManipulateLineMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! ef78ad11-68e1-4523-a61f-e5aa54e554c0 + ImporterName: MaterialImporter + PrimaryAsset: ! ef78ad11-68e1-4523-a61f-e5aa54e554c0 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh new file mode 100644 index 00000000..861851fc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9385db440b20fced91ff6a93efa38d2fb30d0c7ea60377e4b25e346df83838c +size 1450 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh.meta new file mode 100644 index 00000000..fbf6a2d3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/Plane.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImporterSettings: ! + ModifiedVertexFormats: + color: UNorm Byte + normal: Float + position: Float + tangent: Float + texture0: Float + ImportedAssetIds: + FileMesh: ! 3f783937-5580-41ea-b408-6cb2d7866d25 + ImporterName: FileMeshImporter + PrimaryAsset: ! 3f783937-5580-41ea-b408-6cb2d7866d25 + PackageType: NotAPackage + AssetDataMap: + FileMesh: ! 00000000-0000-0000-0000-000000000000 + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png new file mode 100644 index 00000000..ffb4094c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e0a9ca84b4193da0a4970b29a30c5bf37e6380e6beae3267a025937bb426b7a +size 2491 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png.meta new file mode 100644 index 00000000..4394b1e8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/disabled.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! f2ce530f-fa20-4482-9d27-0ee7ef3fb716 + ImporterName: FileTextureImporter + PrimaryAsset: ! f2ce530f-fa20-4482-9d27-0ee7ef3fb716 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png new file mode 100644 index 00000000..18d31425 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db1967179afeea5bd9ee122f48862afe6c4958d198fcb7c0d8007152259891c7 +size 4836 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png.meta new file mode 100644 index 00000000..075759b9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tl.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 83ac226a-d970-42ee-9efa-1d3f435f82a4 + ImporterName: FileTextureImporter + PrimaryAsset: ! 83ac226a-d970-42ee-9efa-1d3f435f82a4 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png new file mode 100644 index 00000000..8fcc3bf0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a16407f4fb61619cc268b75a3b2d7eb2d87f08f5fe22bcd6f38cfd2ef8ad839 +size 859 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png.meta new file mode 100644 index 00000000..d7747553 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/scale-tr.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! b1d51e70-570b-454c-8fbc-f882b5d94e38 + ImporterName: FileTextureImporter + PrimaryAsset: ! b1d51e70-570b-454c-8fbc-f882b5d94e38 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png new file mode 100644 index 00000000..bfe88156 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c334d32b2ee20f9136f792d25ba3b54f2bf06ca700cee426c365d6c72f527642 +size 1048 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png.meta new file mode 100644 index 00000000..0e5bca30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorCursor/translate.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! a45b1ba5-feb4-494a-b6b4-0e710768a4df + ImporterName: FileTextureImporter + PrimaryAsset: ! a45b1ba5-feb4-494a-b6b4-0e710768a4df + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph new file mode 100644 index 00000000..3da09588 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15d90b6accc7074c1d01d5e67cb5a9289248633215b2ea578a848381a552303b +size 459580 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph.meta new file mode 100644 index 00000000..8a2a38b1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ShaderGraph: ! 9d012abc-f38f-4f1c-88bf-8967fa2d87fe + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 9d012abc-f38f-4f1c-88bf-8967fa2d87fe + PackageType: NotAPackage + AssetDataMap: + ShaderGraph: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat new file mode 100644 index 00000000..7b9cdfd1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat @@ -0,0 +1,93 @@ +- ! + PackagePath: "" + PassesInfo: + - ! c319275e-877b-41fe-9e1a-089a8e753feb +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Input1_N014: + typeIdx: 1 + value: 2.000000 + Port_Position1_N066: + typeIdx: 1 + value: 0.200000 + Port_Position1_N070: + typeIdx: 1 + value: 1.000000 + Port_Position1_N073: + typeIdx: 1 + value: 0.300000 + Port_Position1_N077: + typeIdx: 1 + value: 0.700000 + Port_Position2_N073: + typeIdx: 1 + value: 0.700000 + Port_Value0_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000} + Port_Value2_N067: + typeIdx: 1 + value: 0.000000 + Port_Value2_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000} + Port_Value3_N040: + typeIdx: 1 + value: 0.000000 + Port_Value3_N060: + typeIdx: 1 + value: 0.000000 + Port_Value_N008: + typeIdx: 2 + value: true + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 77 + endColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + endWidth: + typeIdx: 1 + value: 0.100000 + maxAlpha: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + startColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + startWidth: + typeIdx: 1 + value: 0.100000 + visualStyle: + typeIdx: 0 + value: 3 + Pass: ! 9d012abc-f38f-4f1c-88bf-8967fa2d87fe + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat.meta new file mode 100644 index 00000000..5b376baa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + ImporterName: MaterialImporter + PrimaryAsset: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts new file mode 100644 index 00000000..bd1484eb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts @@ -0,0 +1,42 @@ +import LineRenderer from "../../../Utils/views/LineRenderer/LineRenderer" + +export enum VisualStyle { + Full = 0, + Split = 1, + FadedEnd = 2, + FadedStart = 3, +} + +/** + * InteractorLineRenderer is a modified LineRenderer meant for use with Interactors. + * It uses a special shader material in order to display the line gradients and visuals shown in the spec. + */ +export default class InteractorLineRenderer extends LineRenderer { + /** + * @returns visual gradient style of the line + */ + get visualStyle(): VisualStyle { + return this.material.mainPass.visualStyle as VisualStyle + } + + /** + * Set the visual gradient style of the line + */ + set visualStyle(style: VisualStyle) { + this.material.mainPass.visualStyle = style + } + + /** + * @returns maximum opacity level of the line + */ + get opacity(): number { + return this.material.mainPass.maxAlpha as number + } + + /** + * Set the maximum opacity level of the line + */ + set opacity(opacity: number) { + this.material.mainPass.maxAlpha = opacity + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts.meta new file mode 100644 index 00000000..e099671f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineRenderer.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 48778cd1-cf1d-4ee4-bca0-8fe118f56188 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 48778cd1-cf1d-4ee4-bca0-8fe118f56188 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! 6b134150-15a6-4728-b105-5597676deed9 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts new file mode 100644 index 00000000..be46a9c0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts @@ -0,0 +1,302 @@ +import { + Interactor, + InteractorTriggerType, + TargetingMode, +} from "../../../Core/Interactor/Interactor" +import InteractorLineRenderer, {VisualStyle} from "./InteractorLineRenderer" +import animate, {CancelSet} from "../../../Utils/animate" +import {withAlpha, withoutAlpha} from "../../../Utils/color" + +import BaseInteractor from "../../../Core/Interactor/BaseInteractor" +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {ViewConfig} from "../../../Utils/views/View" +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" + +const FADE_DURATION_SECS = 0.21 + +const TAG = "InteractorLineVisual" + +export type InteractorLineConfig = ViewConfig & { + interactor: Interactor + material: Material + visualStyle: VisualStyle + beginColor: vec3 + endColor: vec3 + width: number + defaultLength?: number + stickyTrigger?: boolean +} + +/** + * This class provides visual representation for interactor lines. It allows customization of the line's material, colors, width, length, and visual style. The class integrates with the InteractionManager and WorldCameraFinderProvider to manage interactions and camera positioning. + */ +@component +export class InteractorLineVisual extends BaseScriptComponent { + private camera = WorldCameraFinderProvider.getInstance() + private interactionManager: InteractionManager = + InteractionManager.getInstance() + + @input + private lineMaterial!: Material + + @input("vec3", "{1, 1, 0}") + @widget(new ColorWidget()) + public _beginColor: vec3 = new vec3(1, 1, 0) + + @input("vec3", "{1, 1, 0}") + @widget(new ColorWidget()) + public _endColor: vec3 = new vec3(1, 1, 0) + + @input + private lineWidth: number = 0.5 + + @input + private lineLength: number = 160 + + @input + @widget( + new ComboBoxWidget() + .addItem("Full", 0) + .addItem("Split", 1) + .addItem("FadedEnd", 2), + ) + public lineStyle: number = 2 + + @input + private shouldStick: boolean = true + + @input("Component.ScriptComponent") + @allowUndefined + _interactor?: BaseInteractor + + private _enabled = true + private isShown = false + private animationCancelSet = new CancelSet() + private defaultScale = new vec3(1, 1, 1) + private maxLength: number = 500 + private line!: InteractorLineRenderer + private transform!: Transform + + /** + * Sets whether the visual can be shown, so developers can show/hide the ray in certain parts of their lens. + */ + set isEnabled(isEnabled: boolean) { + this._enabled = isEnabled + } + + /** + * Gets whether the visual is active (can be shown if hand is in frame and we're in far field targeting mode). + */ + get isEnabled(): boolean { + return this._enabled + } + + /** + * Sets how the visuals for the line drawer should be shown. + */ + set visualStyle(style: VisualStyle) { + this.line.visualStyle = style + } + + /** + * Gets the current visual style. + */ + get visualStyle(): VisualStyle { + return this.line.visualStyle + } + + /** + * Sets the color of the visual from the start. + */ + set beginColor(color: vec3) { + this.line.startColor = withAlpha(color, 1) + } + + /** + * Gets the color of the visual from the start. + */ + get beginColor(): vec3 { + return withoutAlpha(this.line.startColor) + } + + /** + * Sets the color of the visual from the end. + */ + set endColor(color: vec3) { + this.line.endColor = withAlpha(color, 1) + } + + /** + * Gets the color of the visual from the end. + */ + get endColor(): vec3 { + return withoutAlpha(this.line.endColor) + } + + onAwake() { + this.transform = this.sceneObject.getTransform() + this.defaultScale = this.transform.getWorldScale() + + this.line = new InteractorLineRenderer({ + material: this.lineMaterial, + points: [vec3.zero(), vec3.up().uniformScale(this.maxLength)], + startColor: withAlpha(this._beginColor, 1), + endColor: withAlpha(this._endColor, 1), + startWidth: this.lineWidth, + endWidth: this.lineWidth, + }) + + this.line.getSceneObject().setParent(this.sceneObject) + + if (this.lineStyle !== undefined) { + this.line.visualStyle = this.lineStyle + } + + if (this.lineLength && this.lineLength > 0) { + this.defaultScale = new vec3(1, this.lineLength / this.maxLength, 1) + } + + this.showVisual(false) + + this.defineScriptEvents() + } + + private defineScriptEvents() { + this.createEvent("OnEnableEvent").bind(() => { + this.isEnabled = true + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.isEnabled = false + }) + + this.createEvent("UpdateEvent").bind(() => { + this.update() + }) + + this.createEvent("OnDestroyEvent").bind(() => { + this.onDestroy() + }) + } + + private showVisual(isShown: boolean) { + if (this.isShown === isShown) { + return + } + + this.isShown = isShown + + this.animationCancelSet() + animate({ + cancelSet: this.animationCancelSet, + duration: FADE_DURATION_SECS, + easing: "ease-out-cubic", + update: (t) => { + this.line.opacity = isShown ? t : 1 - t + }, + }) + } + + private rotationFromOrthogonal(right: vec3, up: vec3, fwd: vec3): quat { + const vec3to4 = (v3: vec3) => new vec4(v3.x, v3.y, v3.z, 0) + const rotationMatrix = new mat4() + rotationMatrix.column0 = vec3to4(right) + rotationMatrix.column1 = vec3to4(up) + rotationMatrix.column2 = vec3to4(fwd) + return quat.fromEulerVec(rotationMatrix.extractEulerAngles()) + } + + /** + * Calculates the world scale of the line visual, if distance is valid (greater than the minimum distance to show the visual). + * If an item is targeted directly and the distance is valid, returns a vec3 representing the ray scaled to the distance to the target. + * If an item is targeted indirectly, returns the default scale so as not to throw the user off. + * Otherwise, returns default scale if no item is targeted, or null if the distance is not valid. + */ + private getScale(): vec3 | null { + const distance = this.interactor?.distanceToTarget ?? null + if (distance === null) { + return this.defaultScale + } + + return this.interactor?.activeTargetingMode === TargetingMode.Direct || + this.shouldStick + ? new vec3(1, distance / this.maxLength, 1) + : this.defaultScale + } + + /** + * Updates the line visual each frame + */ + update() { + if ( + this.interactor === null || + !this.isEnabled || + !this.interactor.enabled || + this.interactor.activeTargetingMode !== TargetingMode.Indirect || + !this.interactor.isTargeting() + ) { + this.showVisual(false) + return + } + + this.updateActiveCursor() + } + + /** + * Moves and rotates cursor based on locus and direction updates + * Scales cursor length to nearest interactable if it is being hit + */ + private updateActiveCursor(): void { + if (!this.interactor) { + return + } + + // Hide ray if the scale is below the minimum distance, or if locus/direction aren't provided. + const distanceScale = this.getScale() + const locus: vec3 | null = this.interactor.startPoint + let direction: vec3 | null = this.interactor.direction + + if (distanceScale === null || locus === null || direction === null) { + this.showVisual(false) + return + } + + this.transform.setWorldPosition(locus) + this.transform.setWorldScale(distanceScale) + + if ( + this.shouldStick && + (InteractorTriggerType.Select & this.interactor.currentTrigger) !== 0 + ) { + const target = this.interactor.currentInteractable + if (target) { + const targetPos: vec3 = target.sceneObject + .getTransform() + .getWorldPosition() + direction = targetPos.sub(locus).normalize() + } + } + // Create rotation from orthogonal vectors & set world rotation + const locusToCamera = this.camera.getWorldPosition().sub(locus).normalize() + const newRight = direction.cross(locusToCamera).normalize() + const newForward = newRight.cross(direction) + + this.transform.setWorldRotation( + this.rotationFromOrthogonal(newRight, direction, newForward), + ) + + this.showVisual(true) + } + + /** + * Destroys cursor & line renderer when the custom component is destroyed. + */ + onDestroy(): void { + this.line.destroy() + this.sceneObject.destroy() + } + + private get interactor(): Interactor | null { + return this._interactor ?? null + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts.meta new file mode 100644 index 00000000..9d533d1a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/Interaction/InteractorLineVisual/InteractorLineVisual.ts.meta @@ -0,0 +1,60 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! e5dc66fb-d375-465a-a8b2-83f0853cf4d8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - // @input Asset.Material lineMaterial + - '// @input vec3 _beginColor = "{1, 1, 0}" {"widget":"color"}' + - '// @input vec3 _endColor = "{1, 1, 0}" {"widget":"color"}' + - // @input float lineWidth = 0.5 + - // @input float lineLength = 160 + - '// @input float lineStyle = 2 {"widget":"combobox", "values":[{"label":"Full", "value":0}, {"label":"Split", "value":1}, {"label":"FadedEnd", "value":2}]}' + - // @input bool shouldStick = true + - // @input Component.ScriptComponent _interactor + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _beginColor: false + _endColor: false + _interactor: false + lineLength: false + lineMaterial: false + lineStyle: false + lineWidth: false + shouldStick: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - lineMaterial: ! 00000000-0000-0000-0000-000000000000 + lineWidth: 0.500000 + lineLength: ! 160.000000 + lineStyle: ! 2.000000 + shouldStick: true + _beginColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _endColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _interactor: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts new file mode 100644 index 00000000..fe29e756 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts @@ -0,0 +1,1740 @@ +import animate, {AnimationManager, CancelSet} from "../../../Utils/animate" +import Event, {PublicApi, unsubscribe} from "../../../Utils/Event" +import {FrameInputHandler, FrameInputOptions} from "./modules/FrameInputHandler" + +import {Billboard} from "../../../Components/Interaction/Billboard/Billboard" +import {Interactable} from "../../../Components/Interaction/Interactable/Interactable" +import {InteractableManipulation} from "../../../Components/Interaction/InteractableManipulation/InteractableManipulation" +import {InteractionPlane} from "../../../Components/Interaction/InteractionPlane/InteractionPlane" +import {Interactor} from "../../../Core/Interactor/Interactor" +import {InteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {CursorControllerProvider} from "../../../Providers/CursorControllerProvider/CursorControllerProvider" +import {lerp} from "../../../Utils/mathUtils" +import NativeLogger from "../../../Utils/NativeLogger" +import {validate} from "../../../Utils/validate" +import {CursorHandler} from "./modules/CursorHandler" +import {HoverBehavior} from "./modules/HoverBehavior" +import {LabeledPinchButton} from "./modules/LabeledPinchButton" +import {SmoothFollow} from "./modules/SmoothFollow" +import {SnappableBehavior} from "./modules/SnappableBehavior" + +const log = new NativeLogger("ContainerFrame") + +export type InputState = { + isHovered: boolean + rawHovered: boolean + isPinching: boolean + position: vec3 + drag: vec3 + innerInteractableActive: boolean +} + +export type ContainerFrameConfig = { + target: SceneObject + parent: SceneObject +} + +const OPACITY_TWEEN_DURATION = 0.2 +const SQUEEZE_TWEEN_DURATION = 0.4 + +const DEFAULT_BACKING_ALPHA = 1 +const CAPTURE_BACKING_ALPHA = 0.1 + +/* + * use forced depth for now + * only 2d content + */ +const scaleZ = 1 + +/* + * ratio for scaling between world space and margin space + * testing different values here, leaving for reference during continued visdev + * const scaleFactor = 90 + * const scaleFactor = 70 + */ +const scaleFactor = 50 +// frame depth factor +const zScaleAdjuster = 15 + +const CURSOR_HIGHLIGHT_ANIMATION_DURATION = 0.15 + +/** + * History of this magic number: + * I added the frame mesh to the scene with a basic material + * And overlayed it on a Unit Plane + * I switched the camera to orthographic + * And scaled up the Frame Mesh until it's edges just touched the edges of the unit plane + * That was at scale 8.24 + * So without any stretching, the mesh is 1 / 8.24 + * 1 / 8.24 = 0.1213592233 + * And since we set the base scale of the mesh to a constant and then stretch with vertex shader + * I multiply that base scale by this number above, to get the size of the frame that isn't stretched + * And subtract that from the amount we need to stretch + * ヽ(`Д´)⊃━☆゚. * ・ 。゚, + */ +const magicScalar = 0.1213592233 + +/** + * the base scale of the frame + */ +const scaleFactorVector = new vec3( + scaleFactor + magicScalar, + scaleFactor + magicScalar, + scaleZ * zScaleAdjuster +) + +// the current system UI button is not unit sized +// it's closer to 2.35 in X and Y +const buttonMagicNumber = 0.4474272931 +// constant size of button +const defaultButtonSize = 3 * buttonMagicNumber + +const BUTTON_CORNER_OFFSET = 1 / scaleFactor + +const NEAR_FIELD_INTERACTION_ZONE_DISTANCE_CM = 30 + +/** + * This class represents a container frame that can hold and manage UI elements. It provides settings for auto show/hide, inner size, border, constant padding, and scaling. The class uses prefabs for the frame and labeled buttons, and textures for icons. + */ +@component +export class ContainerFrame extends BaseScriptComponent { + private framePrefab: ObjectPrefab = requireAsset( + "./Prefabs/FramePrefab.prefab" + ) as ObjectPrefab + private labeledButtonPrefab = requireAsset( + "./Prefabs/container-button.prefab" + ) as ObjectPrefab + private closeIcon: Texture = requireAsset( + "./Textures/close-icon-1.png" + ) as Texture + private followIcon: Texture = requireAsset( + "./Textures/follow-white.png" + ) as Texture + private unfollowIcon: Texture = requireAsset( + "./Textures/follow-black.png" + ) as Texture + + @ui.group_start("Frame Settings") + @input + autoShowHide: boolean = true + @input("vec2", "{32,32}") + innerSize: vec2 = new vec2(32, 32) + @input + border: number = 7 + @input("vec2", "{0,0}") + @hint("In world units (cm), stays constant through scaling") + constantPadding: vec2 = new vec2(0, 0) + @input + private allowScaling: boolean = true + @input + autoScaleContent: boolean = true + @input + private isContentInteractable: boolean = false + @input + allowTranslation: boolean = true + @ui.group_end + @ui.label("") + @ui.group_start("Min/Max Size") + @input("vec2", "{10,10}") + @hint("In world units (cm)") + private minimumSize: vec2 = new vec2(10, 10) + @input("vec2", "{150,150}") + @hint("In world units (cm)") + private maximumSize: vec2 = new vec2(150, 150) + @ui.group_end + @ui.label("") + @ui.group_start("Billboarding") + @input + private useBillboarding: boolean = false + @input + @showIf("useBillboarding") + private xOnTranslate: boolean = false + @input + @showIf("xOnTranslate") + private xAlways: boolean = false + @input + @showIf("useBillboarding") + private yOnTranslate: boolean = false + @input + @showIf("yOnTranslate") + private yAlways: boolean = false + @ui.group_end + @ui.label("") + @ui.group_start("Snapping") + @input + @hint("Use Snapping Behaviors") + private useSnapping: boolean = false + @input + @showIf("useSnapping") + @hint("Container to Container Snapping") + private itemSnapping: boolean = false + @input + @showIf("useSnapping") + @hint("Container to World Snapping") + private worldSnapping: boolean = false + @ui.group_end + @ui.label("") + @ui.group_start("Follow Behavior") + @input + private showFollowButton: boolean = false + @input + @label("Front Follow Behavior") + @showIf("showFollowButton") + private useFOVFollow: boolean = false + @input + @showIf("useFOVFollow") + isFollowing: boolean = false + @ui.group_end + @ui.label("") + @ui.group_start("Close Button") + @input + private showCloseButton: boolean = true + @ui.group_end + @ui.group_start("Interaction Plane") + @input + private _enableInteractionPlane: boolean = false + @ui.group_end + @ui.separator + private squeezeAmount = this.border * 0.15 + + private frame!: SceneObject + material!: Material + private frameTransform!: Transform + private target!: SceneObject + private targetTransform!: Transform + private targetScaleCache!: vec2 + private originalScale!: vec2 + scalingSizeStart: vec2 | null = null + private parent!: SceneObject + parentTransform!: Transform + private collider: ColliderComponent | null = null + private colliderShape: BoxShape | null = null + private colliderTransform: Transform | null = null + + closeButton!: LabeledPinchButton + /** + * event for callback on close button trigger + */ + followButton!: LabeledPinchButton + /** + * event for callback on follow button toggle on + */ + + private buttonSize: number = defaultButtonSize + + private buttonScaleVector: vec3 = vec3 + .one() + .uniformScale(defaultButtonSize) + .div(scaleFactorVector) + + private cursorHandler!: CursorHandler + + private animationManager: AnimationManager = new AnimationManager() + + /** + * event handler for frame scaling update + */ + private onScalingUpdate: Event = new Event() + /** + * event handler for frame scaling started + */ + onScalingStart: Event = new Event() + /** + * event handler for frame scaling ended + */ + onScalingEnd: Event = new Event() + /** + * public api for adding functions to the onScalingUpdate event handler + */ + onScalingUpdateEvent = this.onScalingUpdate.publicApi() + /** + * public api for adding functions to the onScalingStart event handler + */ + onScalingStartEvent = this.onScalingStart.publicApi() + /** + * public api for adding functions to the onScalingEnd event handler + */ + onScalingEndEvent = this.onScalingEnd.publicApi() + + private onTranslationStartEvent = new Event() + /** + * public api for adding functions to the onTranslationStartEvent event handler + */ + onTranslationStart = this.onTranslationStartEvent.publicApi() + + private onTranslationEndEvent = new Event() + /** + * public api for adding functions to the onTranslationEndEvent event handler + */ + onTranslationEnd = this.onTranslationEndEvent.publicApi() + + private onHoverEnterInnerInteractableEvent = new Event() + onHoverEnterInnerInteractable = + this.onHoverEnterInnerInteractableEvent.publicApi() + + private onHoverExitInnerInteractableEvent = new Event() + onHoverExitInnerInteractable = + this.onHoverExitInnerInteractableEvent.publicApi() + + forceTranslate: boolean = false + + private inputState: InputState = { + isHovered: false, + rawHovered: false, + isPinching: false, + position: vec3.zero(), + drag: vec3.zero(), + innerInteractableActive: false, + } + + private _opacity: number = 1 + private opacityCancel: CancelSet = new CancelSet() + + /** + * boolean tracking visibility of frame + */ + private _isVisible: boolean = true + + private set isVisible(isVisible: boolean) { + this._isVisible = isVisible + } + + get isVisible() { + return this._isVisible + } + + private scalingLastFrame: boolean = false + private translatingLastFrame: boolean = false + + private onMovingShrinkFactor: number = 0 + private squeezeCancel: CancelSet = new CancelSet() + + private translateMode: number = 0 + private translateModeCancel: CancelSet = new CancelSet() + + private interactable!: Interactable + private manipulate!: InteractableManipulation + + private allInteractables: Interactable[] = [] + + billboardComponent: Billboard | null = null + private interactableCached: Interactable | null = null + private manipulateCached: InteractableManipulation | null = null + + // Parent Hover state of frame + private parentCollider!: ColliderComponent + private parentInteractable!: Interactable + + /** + * reference to HoverBehavior on parent element + */ + parentHoverBehavior!: HoverBehavior + + private renderMeshVisual: RenderMeshVisual | null = null + + private inputHandlerOptions!: FrameInputOptions + + private inputHandler!: FrameInputHandler + + private snapBehavior: SnappableBehavior | null = null + + currentInteractor: Interactor | null = null + + /** + * public api for adding functions to the onSnappingComplete event handler + */ + onSnappingComplete: PublicApi | null = null + + /** + * reference to world camera + */ + worldCamera: Camera = WorldCameraFinderProvider.getInstance().getComponent() + + /** + * reference to frame's default front follow behavior + */ + smoothFollow: SmoothFollow | null = null + + private currentBorder: number = this.border + + private destroyed: boolean = false + + private hoveringInnerInteractableLast: boolean = false + private interactableHoverOpacity: number = 0.34 + + private backingAlphaCache: number = DEFAULT_BACKING_ALPHA + + private hoveringContentInteractable: boolean = false + private hoveringContentInteractableLast: boolean = false + private cursorHighlightCancel = new CancelSet() + + private forcePreserveScale: boolean = false + + private lastConstantPadding: vec2 = this.constantPadding.uniformScale(1) + + // tweakable for frustum optimizations + private frustumBuffer: number = 0 + + private unSubscribeList: unsubscribe[] = [] + + private interactionPlane: InteractionPlane + + onAwake() { + // frame + this.frame = this.framePrefab.instantiate(null) + this.frameTransform = this.frame.getTransform() + + this.targetScaleCache = new vec2(this.innerSize.x, this.innerSize.y) + this.originalScale = new vec2(this.innerSize.x, this.innerSize.y) + // parent + this.parent = this.getSceneObject() + this.parentTransform = this.parent.getTransform() + // target + this.target = global.scene.createSceneObject("ContainerInner") + this.targetTransform = this.target.getTransform() + this.parent.children.forEach((child: SceneObject) => { + child.setParent(this.target) + }) + this.target.setParent(this.parent) + + // collider + this.collider = this.frame.getComponent("Physics.ColliderComponent") + this.colliderShape = this.collider.shape as BoxShape + this.colliderTransform = this.collider.getSceneObject().getTransform() + // buttons + this.closeButton = new LabeledPinchButton({ + prefab: this.labeledButtonPrefab, + parent: this.frame, + labels: [this.closeIcon], + }) + + this.closeButton.onTrigger.add(() => { + this.inputState.isPinching = false + }) + + this.followButton = new LabeledPinchButton({ + prefab: this.labeledButtonPrefab, + parent: this.frame, + labels: [this.followIcon, this.unfollowIcon], + toggle: true, + triggerColor: new vec4(0.8, 0.8, 0.8, 1), + }) + this.followButton.setIconScale(new vec2(1.85, 1.85)) + + this.followButton.onTrigger.add(() => { + this.inputState.isPinching = false + this.setIsFollowing(!this.isFollowing) + }) + + // cursor + this.cursorHandler = new CursorHandler({ + target: this.target, + frame: this, + margin: this.border, + }) + + // SIK Components + this.interactable = this.frame.createComponent(Interactable.getTypeName()) + + /* + * indirect targeting only with one interactor + * prevents direct manipulation controls which are undesired for frame + */ + this.interactable.targetingMode = 2 + this.interactable.allowMultipleInteractors = false + + this.manipulate = this.frame.createComponent( + InteractableManipulation.getTypeName() + ) + + this.billboardComponent = this.useBillboarding + ? this.parent.createComponent(Billboard.getTypeName()) + : null + + if (this.billboardComponent !== null) { + this.billboardComponent.xAxisEnabled = false || this.xAlways + this.billboardComponent.yAxisEnabled = false || this.yAlways + } + + // material + this.renderMeshVisual = this.frame.getComponent( + "Component.RenderMeshVisual" + ) + this.material = this.renderMeshVisual.mainMaterial.clone() + this.renderMeshVisual.mainMaterial = this.material + + this.material.mainPass.frustumCullMode = FrustumCullMode.UserDefinedAABB + + // input handler + this.inputHandlerOptions = { + frame: this, + manipulate: this.manipulate, + target: this.target, + parentTransform: this.parentTransform, + cursorHandler: this.cursorHandler, + isInteractable: this.isContentInteractable, + scaleSpeed: undefined, + allowScaling: this.allowScaling, + minimumSize: this.minimumSize, + maximumSize: this.maximumSize, + } + + this.inputHandler = new FrameInputHandler(this.inputHandlerOptions) + + // Use the FrameInputHandler as the authoritative source on when translation starts + this.inputHandler.onTranslationStart.add(() => { + this.onTranslationStartEvent.invoke() + this.smoothFollow?.startDragging() + }) + this.inputHandler.onTranslationEnd.add(() => { + this.onTranslationEndEvent.invoke() + this.smoothFollow?.finishDragging() + }) + + // button logic + this.enableCloseButton(this.showCloseButton) + this.enableFollowButton(this.showFollowButton) + + // following logic + this.setIsFollowing(this.isFollowing) + + this.manipulate.setManipulateRoot(this.parentTransform) + this.manipulate.setCanScale(false) + + this.parentTransform.setWorldPosition( + this.targetTransform.getWorldPosition() + ) + this.parentTransform.setWorldRotation( + this.targetTransform.getWorldRotation() + ) + this.frame.setParentPreserveWorldTransform(this.parent) + + this.frameTransform.setLocalPosition(vec3.zero()) + this.frameTransform.setLocalRotation(quat.quatIdentity()) + this.frameTransform.setWorldScale(scaleFactorVector) + + this.targetTransform.setLocalPosition(new vec3(0, 0, 0.5)) + this.targetTransform.setLocalRotation(quat.quatIdentity()) + + this.opacity = this.material.mainPass.opacity as number + this.scaleFrame() + + // We need a collider or one is created. We don't actually use it for anything + this.parentCollider = this.parent.createComponent( + "Physics.ColliderComponent" + ) + const shape = Shape.createBoxShape() + shape.size = new vec3(0.01, 0.01, 0.01) + this.parentCollider.shape = shape + + this.parentInteractable = this.parent.createComponent( + Interactable.getTypeName() + ) + this.parentHoverBehavior = new HoverBehavior(this.parentInteractable) + + this.unSubscribeList.push( + this.parentHoverBehavior.onHoverStart.add((e: InteractorEvent) => { + this.cursorHandler.setCursor( + CursorControllerProvider.getInstance().getCursorByInteractor( + e.interactor + ) + ) + if (this.autoShowHide) this.showVisual() + if (this.material.mainPass.isHovered === 0) { + this.showCursorHighlight() + } + this.inputState.isHovered = true + this.inputState.rawHovered = true + }) + ) + + this.unSubscribeList.push( + this.parentHoverBehavior.onHoverUpdate.add((e: InteractorEvent) => { + const targetObject = e?.target.sceneObject + + this.updateCursorHighlightPosition(e) + + let targetParent: SceneObject | null = targetObject + let hoveringInteractable = false + + while ( + targetParent !== null && + !targetParent.isSame(this.sceneObject) + ) { + if (targetObject === this.target || targetParent === this.target) { + hoveringInteractable = true + break + } + targetParent = isNull(targetParent) ? null : targetParent.getParent() + } + + // hovering over interactable container content ONLY + if (hoveringInteractable) { + if (!this.hoveringContentInteractableLast) { + this.hideCursorHighlight() + } + } else { + if (this.hoveringContentInteractableLast) { + this.showCursorHighlight() + } + } + this.hoveringContentInteractableLast = hoveringInteractable + + // hover over interactable area ( non border container ) OR interactable container content + if ( + hoveringInteractable || + this.inputHandler.state.hoveringInteractable + ) { + this.inputState.innerInteractableActive = true + } else { + this.inputState.innerInteractableActive = false + } + }) + ) + + this.unSubscribeList.push( + this.parentHoverBehavior.onHoverEnd.add(() => { + if (this.autoShowHide) this.hideVisual() + if (this.material.mainPass.isHovered > 0) { + this.hideCursorHighlight() + } + this.inputState.isHovered = false + this.inputState.rawHovered = false + this.inputState.innerInteractableActive = false + }) + ) + + this.unSubscribeList.push( + this.interactable.onHoverUpdate.add((event: InteractorEvent) => { + if (event.interactor.targetHitInfo) { + this.updateCursorHighlightPosition(event) + + if (event.target === this.interactable) + this.inputHandler.lastHovered = true + } + }) + ) + + let dragStart = vec3.zero() + + this.unSubscribeList.push( + this.interactable.onTriggerStart((e: InteractorEvent) => { + const targetObject = e?.target.sceneObject + let targetParent: SceneObject | null = targetObject + validate(e.interactor.planecastPoint) + dragStart = this.parentTransform + .getInvertedWorldTransform() + .multiplyPoint(e.interactor.planecastPoint) + + while ( + targetParent !== null && + !targetParent.isSame(this.sceneObject) + ) { + if ( + targetObject === this.target || + targetObject === this.frame || + targetParent === this.target + ) { + this.inputState.isPinching = true + this.currentInteractor = e.interactor + } + if (targetObject === this.target || targetParent === this.target) { + break + } + targetParent = targetParent?.getParent() + } + }) + ) + + this.unSubscribeList.push( + this.interactable.onTriggerUpdate((event: InteractorEvent) => { + if (event.interactor.targetHitInfo && this.inputHandler.state.scaling) { + validate(event.interactor.planecastPoint) + validate(this.scalingSizeStart) + const dragPos = this.parentTransform + .getInvertedWorldTransform() + .multiplyPoint(event.interactor.planecastPoint) + const dragSign = new vec3( + Math.sign(dragStart.x), + Math.sign(dragStart.y), + Math.sign(dragStart.z) + ) + const dragDeltaTemp = dragPos.sub(dragStart).mult(dragSign) + const dragDelta = new vec2(dragDeltaTemp.x, dragDeltaTemp.y) + const dragScaleVec = dragDelta.div( + this.scalingSizeStart.uniformScale(0.5) + ) + const dragScale = Math.max(dragScaleVec.x, dragScaleVec.y) + const newInnerSize = this.scalingSizeStart.uniformScale(1 + dragScale) + + if ( + newInnerSize.x > this.minimumSize.x && + newInnerSize.y > this.minimumSize.y && + newInnerSize.x < this.maximumSize.x && + newInnerSize.y < this.maximumSize.y + ) { + this.innerSize = newInnerSize + this.interactionPlane.planeSize = this.totalInnerSize.add( + vec2.one().uniformScale(this.border * 2) + ) + } + } + }) + ) + + this.unSubscribeList.push( + this.interactable.onTriggerEnd(() => { + this.inputState.isPinching = false + this.currentInteractor = null + }) + ) + + this.unSubscribeList.push( + this.interactable.onTriggerCanceled(() => { + this.inputState.isPinching = false + this.currentInteractor = null + }) + ) + + if (this.useSnapping) { + this.createSnappableBehavior() + } + + if (this.useFOVFollow) { + this.setUseFollow(true) + } + + this.allInteractables.push(this.interactable) + this.allInteractables.push(this.parentInteractable) + const closeButton = this.closeButton.getInteractable() + if (closeButton) { + this.allInteractables.push(closeButton) + } + const followButton = this.followButton.getInteractable() + if (followButton) { + this.allInteractables.push(followButton) + } + + // start hidden + if (this.autoShowHide) { + this.hideVisual() + } else { + this._opacity = 0 + this.showVisual() + } + + // handle scaling affordances + this.setAllowScaling(this.allowScaling) + + this.createEvent("OnDestroyEvent").bind(this.onDestroy) + + // hide cursorHighlight on start + this.material.mainPass.isHovered = 0 + this.backingAlpha = this.material.mainPass.backingAlpha + + this.interactionPlane = this.sceneObject.createComponent( + InteractionPlane.getTypeName() + ) + this.interactionPlane.planeSize = this.totalInnerSize.add( + vec2.one().uniformScale(this.border * 2) + ) + this.interactionPlane.proximityDistance = + NEAR_FIELD_INTERACTION_ZONE_DISTANCE_CM + + this.interactionPlane.enabled = this.enableInteractionPlane + + this.createEvent("LateUpdateEvent").bind(this.lateUpdate) + + this.update() + } + + set enableInteractionPlane(enabled: boolean) { + this.interactionPlane.enabled = enabled + this._enableInteractionPlane = enabled + } + + get enableInteractionPlane(): boolean { + return this._enableInteractionPlane + } + + private updateCursorHighlightPosition = (e: InteractorEvent) => { + validate(this.colliderShape) + validate(this.colliderTransform) + + if (e.interactor.targetHitInfo) { + const hitPosition = e.interactor.targetHitInfo?.hit.position + const normalizer = vec3.one().div(this.colliderShape.size) + this.inputState.position = this.colliderTransform + .getInvertedWorldTransform() + .multiplyPoint(hitPosition) + .mult(normalizer) + } + } + + private showCursorHighlight = () => { + if (this.cursorHighlightCancel) this.cursorHighlightCancel.cancel() + const startingHighlight = this.material.mainPass.isHovered + animate({ + duration: CURSOR_HIGHLIGHT_ANIMATION_DURATION * (1 - startingHighlight), + cancelSet: this.cursorHighlightCancel, + update: (t) => { + this.material.mainPass.isHovered = t + }, + }) + } + + private hideCursorHighlight = () => { + if (this.cursorHighlightCancel) this.cursorHighlightCancel.cancel() + const startingHighlight = this.material.mainPass.isHovered + animate({ + duration: CURSOR_HIGHLIGHT_ANIMATION_DURATION * startingHighlight, + cancelSet: this.cursorHighlightCancel, + update: (t) => { + this.material.mainPass.isHovered = + startingHighlight - t * startingHighlight + }, + }) + } + + /** + * set diameter of buttons in centimeters + * @param size + */ + + setButtonScale = (size: number) => { + this.buttonSize = size * buttonMagicNumber + this.buttonScaleVector = vec3 + .one() + .uniformScale(this.buttonSize) + .div(scaleFactorVector) + this.scaleAndPositionButtons() + } + + private update = () => { + /// if in capture getDeltaTime returns 0 + if (getDeltaTime() === 0) { + // lighten background if in capture + if (this.backingAlpha !== CAPTURE_BACKING_ALPHA) { + // set directly to not update backingAlphaCache + this.material.mainPass.backingAlpha = CAPTURE_BACKING_ALPHA + } + } else { + //not in capture + if (this.backingAlpha !== this.backingAlphaCache) { + // reset to stored value + this.backingAlpha = this.backingAlphaCache + } + } + + // confirm not destroyed before looping more + if (this.destroyed) { + // if destroyed return will stop looping as update requests itself + return + } + + this.inputHandler.update(this.inputState) + + // only billboard on translate + if (this.inputHandler.state.translating) { + if (this.billboardComponent !== null) { + this.billboardComponent.xAxisEnabled = + (this.xOnTranslate && + (this.allowTranslation || this.forceTranslate)) || + this.xAlways + this.billboardComponent.yAxisEnabled = + (this.yOnTranslate && + (this.allowTranslation || this.forceTranslate)) || + this.yAlways + } + if (!this.translatingLastFrame) { + // just started translating + const currentSqueeze = this.onMovingShrinkFactor + this.tweenMarginSqueeze(currentSqueeze, this.squeezeAmount) + const currentTranslateMode = this.translateMode + this.tweenTranslateMode(currentTranslateMode, 1) + } + this.translatingLastFrame = true + } else { + if ( + this.billboardComponent !== null && + (!this.isFollowing || this.xAlways || this.yAlways) + ) { + this.billboardComponent.xAxisEnabled = false || this.xAlways + this.billboardComponent.yAxisEnabled = false || this.yAlways + } + if (this.translatingLastFrame) { + // just stopped translating + const currentSqueeze = this.onMovingShrinkFactor + this.tweenMarginSqueeze(currentSqueeze, 0) + const currentTranslateMode = this.translateMode + this.tweenTranslateMode(currentTranslateMode, 0) + } + this.translatingLastFrame = false + } + + this.currentBorder = this.border - this.onMovingShrinkFactor + + if ( + !this.innerSize.equal(this.targetScaleCache) || + this.currentBorder !== this.material.mainPass.frameMargin || + !this.constantPadding.equal(this.lastConstantPadding) + ) { + this.targetScaleCache.x = this.innerSize.x + this.targetScaleCache.y = this.innerSize.y + this.lastConstantPadding.x = this.constantPadding.x + this.lastConstantPadding.y = this.constantPadding.y + this.scaleFrame() + } + + this.inputState.innerInteractableActive = + this.inputState.innerInteractableActive || + this.inputHandler.state.hoveringInteractable + + if ( + this.inputState.innerInteractableActive && + !this.hoveringInnerInteractableLast + ) { + const currentOpacity = this._opacity + if (this.autoShowHide) { + this.tweenOpacity(currentOpacity, this.interactableHoverOpacity) + } + // start hovering inner interactable + this.onHoverEnterInnerInteractableEvent.invoke() + } else if ( + !this.inputState.innerInteractableActive && + this.hoveringInnerInteractableLast + ) { + const currentOpacity = this._opacity + if (this.inputState.rawHovered) { + if (this.autoShowHide) { + this.tweenOpacity(currentOpacity, 1) + } + } + // stop hovering inner interactable + this.onHoverExitInnerInteractableEvent.invoke() + } + this.hoveringInnerInteractableLast = this.inputState.innerInteractableActive + + this.cursorHandler.update(this.inputState, this.inputHandler.state) + + this.material.mainPass.translateMode = this.translateMode + + if (!this.scalingLastFrame && !this.translatingLastFrame) { + this.material.mainPass.touchPosition = this.inputState.position + } + + if (this.inputHandler.state.scaling && !this.scalingLastFrame) { + // first frame scaling + this.smoothFollow?.startDragging() + } + + if (!this.inputHandler.state.scaling && this.scalingLastFrame) { + // first frame NOT scaling + this.smoothFollow?.finishDragging() + } + + this.scalingLastFrame = this.inputHandler.state.scaling + + this.snapBehavior?.setScaling(this.inputHandler.state.scaling) + + if (this.inputHandler.state.translating) this.snapBehavior?.update() + + if (this.isFollowing) { + this.smoothFollow?.onUpdate() + } + + this.animationManager.requestAnimationFrame(this.update) + } + + private lateUpdate = () => { + this.parentHoverBehavior.lateUpdate() + } + + private scaleFrame = () => { + validate(this.colliderShape) + validate(this.renderMeshVisual) + + this.material.mainPass.frameMargin = this.currentBorder + + this.material.mainPass.scaleFactor = scaleFactor + + const doubleMargin = this.currentBorder * 2 + + const meshEdges = scaleFactor * magicScalar + + this.material.mainPass.scaleX = + this.targetScaleCache.x + + doubleMargin - + meshEdges + + this.constantPadding.x + this.material.mainPass.scaleY = + this.targetScaleCache.y + + doubleMargin - + meshEdges + + this.constantPadding.y + + this.material.mainPass.scaleZ = scaleZ / zScaleAdjuster + + this.material.mainPass.rawScale = new vec2( + this.targetScaleCache.x + this.constantPadding.x, + this.targetScaleCache.y + this.constantPadding.y + ) + + const fullScale = new vec2( + this.targetScaleCache.x + this.constantPadding.x + doubleMargin, + this.targetScaleCache.y + this.constantPadding.y + doubleMargin + ) + + this.material.mainPass.fullScale = new vec2(fullScale.x, fullScale.y) + + let aspectRatio = new vec2(1, 1) + if (fullScale.x > fullScale.y) { + aspectRatio.y = fullScale.x / fullScale.y + } else { + aspectRatio.x = fullScale.y / fullScale.x + } + + this.material.mainPass.aspectRatio = new vec2(aspectRatio.x, aspectRatio.y) + + this.material.mainPass.originalScale = new vec2( + this.originalScale.x + this.currentBorder, + this.originalScale.y + this.currentBorder + ) + + this.colliderShape.size = new vec3( + (this.targetScaleCache.x + + this.currentBorder * 2 + + this.constantPadding.x) / + scaleFactor, + (this.targetScaleCache.y + + this.currentBorder * 2 + + this.constantPadding.y) / + scaleFactor, + scaleZ / zScaleAdjuster + ) + + this.renderMeshVisual.mainMaterial.mainPass.frustumCullMin = new vec3( + this.colliderShape.size.x * -0.5 - this.frustumBuffer, + this.colliderShape.size.y * -0.5 - this.frustumBuffer, + this.colliderShape.size.z * -0.5 + ) + + this.renderMeshVisual.mainMaterial.mainPass.frustumCullMax = new vec3( + this.colliderShape.size.x * 0.5 + this.frustumBuffer, + this.colliderShape.size.y * 0.5 + this.frustumBuffer, + this.colliderShape.size.z * 0.5 + ) + + this.inputHandler.gutterSize.x = + this.currentBorder / (scaleFactor * this.colliderShape.size.x) + this.inputHandler.gutterSize.y = + this.currentBorder / (scaleFactor * this.colliderShape.size.y) + + this.scaleAndPositionButtons() + + this.frameTransform.setLocalPosition(vec3.zero()) + this.frameTransform.setLocalRotation(quat.quatIdentity()) + + this.targetTransform.setLocalPosition(new vec3(0, 0, scaleZ + 0.5)) + this.targetTransform.setLocalRotation(quat.quatIdentity()) + + if (this.autoScaleContent) { + if (!this.forcePreserveScale) { + const factor = this.innerSize.div(this.originalScale) + this.targetTransform.setLocalScale(new vec3(factor.x, factor.y, 1)) + } else { + // update original with cloned cache to prevent reset on next scaling + this.originalScale = this.targetScaleCache.uniformScale(1) + } + } + + this.smoothFollow?.resize( + this.innerSize.x + doubleMargin + this.constantPadding.x + ) + + if (!this.forcePreserveScale) { + this.onScalingUpdate.invoke() + } else { + this.forcePreserveScale = false + } + } + + private scaleAndPositionButtons = () => { + this.closeButton.transform.setLocalScale(this.buttonScaleVector) + this.followButton.transform.setLocalScale(this.buttonScaleVector) + + const halfFrameWidth = + (this.innerSize.x * 0.5 + + this.constantPadding.x * 0.5 + + this.currentBorder) / + scaleFactor + const halfFrameHeight = + (this.innerSize.y * 0.5 + + this.constantPadding.y * 0.5 + + this.currentBorder) / + scaleFactor + + const buttonOffset = + (this.buttonSize / scaleFactor) * -1 - BUTTON_CORNER_OFFSET + + // CORNER POSITIONING + this.closeButton.transform.setLocalPosition( + new vec3( + -halfFrameWidth - buttonOffset, + halfFrameHeight + buttonOffset, + 0.1 + ) + ) + + this.followButton.transform.setLocalPosition( + new vec3( + halfFrameWidth + buttonOffset, + halfFrameHeight + buttonOffset, + 0.1 + ) + ) + } + + /** + * setup billboarding component with the following parameters + * @param useBillboard + * @param xOnTranslate + * @param xAlways + * @param yOnTranslate + * @param yAlways + */ + setBillboarding = ( + useBillboard: boolean, + xOnTranslate: boolean = false, + xAlways: boolean = false, + yOnTranslate: boolean = false, + yAlways: boolean = false + ): void => { + this.useBillboarding = useBillboard + + if (this.useBillboarding) { + this.xOnTranslate = xOnTranslate + this.xAlways = xAlways + this.yOnTranslate = yOnTranslate + this.yAlways = yAlways + + if (this.billboardComponent === null) { + this.billboardComponent = this.parent.createComponent( + Billboard.getTypeName() + ) + } + + this.billboardComponent.xAxisEnabled = false || this.xAlways + this.billboardComponent.yAxisEnabled = false || this.yAlways + } else { + if (this.billboardComponent) { + this.billboardComponent.xAxisEnabled = false + this.billboardComponent.yAxisEnabled = false + } + } + } + + setYAlways = (yAlways: boolean) => { + this.setBillboarding( + this.useBillboarding, + this.xOnTranslate, + this.xAlways, + this.yOnTranslate, + yAlways + ) + } + + setUseBillboarding = (useBillboarding: boolean): void => { + this.setBillboarding( + useBillboarding, + this.xOnTranslate, + this.xAlways, + this.yOnTranslate, + this.yAlways + ) + } + + /** + * @returns frame's Interactable + */ + getInteractable = (): Interactable => { + if (this.interactableCached === null) { + this.interactableCached = this.interactable + } + return this.interactableCached + } + + /** + * @returns frame's parent's Interactable + */ + getParentInteractable = (): Interactable => { + return this.parentInteractable + } + + /** + * @returns frame's InteractableManipulation + */ + getInteractableManipulation = (): InteractableManipulation => { + if (this.manipulateCached === null) { + this.manipulateCached = this.manipulate + } + return this.manipulateCached + } + + /** + * @param isInteractable set if content is interactable + */ + setIsContentInteractable = (isInteractable: boolean) => { + this.isContentInteractable = isInteractable + this.inputHandlerOptions.isInteractable = isInteractable + } + + /** + * @param isSnappable turns on or off snappableBehavior + */ + setIsSnappable = (isSnappable: boolean) => { + this.useSnapping = isSnappable + if (isSnappable) { + if (!this.snapBehavior) { + this.createSnappableBehavior() + } + } + if (this.snapBehavior) { + this.snapBehavior.isEnabled = isSnappable + } + } + + setUseWorldSnapping = (enable: boolean) => { + validate(this.snapBehavior) + + this.worldSnapping = enable + + if (!this.snapBehavior && enable) { + this.createSnappableBehavior() + } + + this.snapBehavior.enableWorldSnapping(enable) + } + + setUseItemSnapping = (enable: boolean) => { + validate(this.snapBehavior) + + this.itemSnapping = enable + + if (!this.snapBehavior && enable) { + this.createSnappableBehavior() + } + + this.snapBehavior.enableItemSnapping(enable) + } + + private createSnappableBehavior = () => { + this.snapBehavior = new SnappableBehavior({ + frame: this, + worldSnapping: this.worldSnapping, + itemSnapping: this.itemSnapping, + }) + this.onSnappingComplete = this.snapBehavior.snappingComplete() + } + + /** + * abort snapping behavior + */ + abortSnapping = (): void => { + this.snapBehavior?.abortSnapping() + } + + /** + * @param allowScaling enable or disable user scaling + */ + setAllowScaling = (allowScaling: boolean) => { + this.allowScaling = allowScaling + this.inputHandler.allowScaling = this.allowScaling + + const scaleHandles = vec4.zero() + if (allowScaling) { + if (!this.showFollowButton) scaleHandles.x = 1 + scaleHandles.y = 1 + scaleHandles.z = 1 + if (!this.showCloseButton) scaleHandles.w = 1 + } + this.material.mainPass.scaleHandles = scaleHandles + } + + setInnerSizePreserveScale = (newSize: vec2) => { + this.forcePreserveScale = true + this.innerSize = newSize + + this.interactionPlane.planeSize = this.totalInnerSize.add( + vec2.one().uniformScale(this.border * 2) + ) + } + + /** + * @param useFollow enable or disable the option to turn on the default follow behavior with the follow button + */ + setUseFollow = (useFollow: boolean) => { + this.useFOVFollow = useFollow + if (useFollow && !this.smoothFollow) { + this.smoothFollow = new SmoothFollow({ + frame: this, + }) + } + } + + /** + * @param isFollowing enable or disable the following button and defualt behavior ( if it is enabled ) + */ + setIsFollowing = (isFollowing: boolean): void => { + this.isFollowing = isFollowing + + if (this.isFollowing) { + if (this.billboardComponent !== null) { + this.billboardComponent.xAxisEnabled = + (this.xOnTranslate && this.allowTranslation) || this.xAlways + this.billboardComponent.yAxisEnabled = + (this.yOnTranslate && this.allowTranslation) || this.yAlways + } + this.followButton.toggled = true + this.followButton.setColor("trigger") + this.followButton.setTexture(1) + } else { + this.followButton.setColor("default") + this.followButton.toggled = false + this.followButton.setTexture(0) + } + } + + /** + * @returns whether the snapping behavior is currently tweening + */ + isSnappingTweening = (): boolean => { + if (this.snapBehavior) { + return this.snapBehavior.isTweening + } + return false + } + + /** + * @returns whether the snapping behavior is checking for snappable elements + */ + isSnappingActive = (): boolean => { + if (this.snapBehavior) { + return this.snapBehavior.isActive + } + return false + } + + /** + * @param isActive whether or not to activate snapping + */ + setSnappingActive = (isActive: boolean): void => { + if (this.snapBehavior) { + this.snapBehavior.isActive = isActive + } + } + + /** + * @returns inner object which contains original children + */ + getTargetObject = () => this.target + + /** + * @returns returns the frame sceneobject + */ + getFrameObject = () => this.frame + + /** + * @param opacity + * sets opacity of frame when hovering interactable content in the frame + */ + setHoverInteractableOpacity = (opacity: number) => { + this.interactableHoverOpacity = opacity + } + + /** + * @param minimumSize set minimum scale of frame + */ + setminimumSize = (minimumSize: vec2) => { + this.inputHandler.minimumSize = minimumSize + } + + /** + * @param maximumSize set maximum scale of frame + */ + setmaximumSize = (maximumSize: vec2) => { + this.inputHandler.maximumSize = maximumSize + } + + /** + * @param isInteractable enable or disable interactable elements of the frame + */ + enableInteractables = (isInteractable: boolean) => { + for (let i = 0; i < this.allInteractables.length; i++) { + this.allInteractables[i].enabled = isInteractable + } + } + + /** + * @returns vec2 of the total size of the container, including constant padding + */ + get totalInnerSize(): vec2 { + return new vec2( + this.innerSize.x + this.constantPadding.x, + this.innerSize.y + this.constantPadding.y + ) + } + + /* + * + * worldTransform api + * + */ + + /** + * @returns current world position of frame + */ + get worldPosition(): vec3 { + return this.parentTransform.getWorldPosition() + } + + /** + * @param position sets current world position of frame + */ + set worldPosition(position: vec3) { + this.parentTransform.setWorldPosition(position) + } + + /** + * Gets current world position of frame + * @returns {vec3} + */ + public getWorldPosition(): vec3 { + return this.parentTransform.getWorldPosition() + } + + /** + * @param position sets current world position of frame + */ + public setWorldPosition(position: vec3) { + this.parentTransform.setWorldPosition(position) + } + + /** + * @returns current local position of frame + */ + get localPosition(): vec3 { + return this.parentTransform.getLocalPosition() + } + + /** + * @param position sets current local position of frame + */ + set localPosition(position: vec3) { + this.parentTransform.setLocalPosition(position) + } + + /** + * @returns current local position of frame + */ + getLocalPosition(): vec3 { + return this.parentTransform.getLocalPosition() + } + + /** + * @param position sets current local position of frame + */ + setLocalPosition(position: vec3) { + this.parentTransform.setLocalPosition(position) + } + + /** + * @returns current world rotation of frame + */ + get worldRotation(): quat { + return this.parentTransform.getWorldRotation() + } + + /** + * @param rotation sets current local position of frame + */ + set worldRotation(rotation: quat) { + this.parentTransform.setWorldRotation(rotation) + } + + /** + * @returns current world rotation of frame + */ + getWorldRotation(): quat { + return this.parentTransform.getWorldRotation() + } + + /** + * @param rotation sets current local position of frame + */ + setWorldRotation(rotation: quat) { + this.parentTransform.setWorldRotation(rotation) + } + + /** + * @returns current local rotation of frame + */ + get localRotation(): quat { + return this.parentTransform.getLocalRotation() + } + + /** + * @param rotation set current local rotation of frame + */ + set localRotation(rotation: quat) { + this.parentTransform.setLocalRotation(rotation) + } + /** + * @returns current local rotation of frame + */ + getLocalRotation(): quat { + return this.parentTransform.getLocalRotation() + } + + /** + * @param rotation set current local rotation of frame + */ + setLocalRotation(rotation: quat) { + this.parentTransform.setLocalRotation(rotation) + } + + /** + * @returns current world scale of frame + */ + get worldScale(): vec3 { + return this.parentTransform.getWorldScale() + } + + /** + * @param scale set current world scale of frame + */ + set worldScale(scale: vec3) { + this.parentTransform.setWorldScale(scale) + } + + /** + * @returns current world scale of frame + */ + get localScale(): vec3 { + return this.parentTransform.getLocalScale() + } + + /** + * @param scale set current local scale of frame + */ + set localScale(scale: vec3) { + this.parentTransform.setLocalScale(scale) + } + + /** + * @returns current renderOrder for the renderMeshVisual of the frame itself + */ + get renderOrder(): number { + validate(this.renderMeshVisual) + return this.renderMeshVisual.getRenderOrder() + } + + /** + * @param renderOrder sets renderOrder for the renderMeshVisual of the frame itself + */ + set renderOrder(renderOrder: number) { + validate(this.renderMeshVisual) + this.renderMeshVisual.setRenderOrder(renderOrder) + this.closeButton.setRenderOrder(renderOrder) + this.followButton.setRenderOrder(renderOrder) + } + + /** + * function for fully destroying the frame + */ + onDestroy = (): void => { + log.d("destroy isDestroyed:" + this.destroyed) + if (!this.destroyed) { + this.destroyed = true + this.unSubscribeList.forEach((sub) => { + sub() + }) + this.parentHoverBehavior.destroy() + this.snapBehavior?.destroy() + + if (!isNull(this.frame)) { + this.frame.destroy() + } + + this.enabled = false + } + } + + /** + * @returns ContainerFrame frame sceneObject + */ + get object() { + return this.frame + } + + /** + * + * @returns parent transform of top container object + */ + getParentTransform = () => this.parentTransform + + /** + * tween to show visuals of frame and elements + */ + showVisual = () => { + validate(this.renderMeshVisual) + const currentOpacity = this._opacity + // enable on show + this.renderMeshVisual.enabled = true + if (this.closeButton && this.showCloseButton) + this.closeButton.object.enabled = true + if (this.followButton && this.showFollowButton) + this.followButton.object.enabled = true + + this.tweenOpacity(currentOpacity, 1) + } + + /** + * tween to hide visuals of frame and elementss + */ + hideVisual = () => { + const currentOpacity = this._opacity + this.tweenOpacity(currentOpacity, 0, () => { + // disable on hide + validate(this.renderMeshVisual) + this.renderMeshVisual.enabled = false + if (this.closeButton) this.closeButton.object.enabled = false + if (this.followButton) this.followButton.object.enabled = false + }) + } + + /** + * tween from current opacity to target opacity, will cancel existing opacity tweens + * @param currentOpacity + * @param targetOpacity + */ + tweenOpacity = ( + currentOpacity: number, + targetOpacity: number, + endCallback = () => {} + ) => { + if (this.opacityCancel) this.opacityCancel.cancel() + animate({ + duration: + OPACITY_TWEEN_DURATION * Math.abs(targetOpacity - currentOpacity), + update: (t: number) => { + this.opacity = lerp(currentOpacity, targetOpacity, t) + }, + ended: endCallback, + cancelSet: this.opacityCancel, + }) + } + + /** + * @param opacity sets opacity for all frame elements + * note this parameter is effected by calls to `showVisual` and `hideVisual` + */ + set opacity(opacity: number) { + if (opacity > 0) { + this.isVisible = true + } else { + this.isVisible = false + } + if (!this.destroyed) { + this._opacity = opacity + this.material.mainPass.opacity = opacity + this.closeButton.setAlpha(opacity) + this.followButton.setAlpha(opacity) + } + } + + /** + * @returns current opacity of frame elements + */ + get opacity(): number { + return this._opacity + } + + /** + * @param alpha sets alpha of the glass border of the frame + */ + set borderAlpha(alpha: number) { + if (!this.destroyed) { + this.material.mainPass.borderAlpha = alpha + } + } + + /** + * @returns alpha of the glass border of the frame + */ + get borderAlpha(): number { + return this.material.mainPass.borderAlpha + } + + /** + * @param alpha sets alpha of the dark backing effect of the frame + */ + set backingAlpha(alpha: number) { + if (!this.destroyed) { + this.backingAlphaCache = alpha + this.material.mainPass.backingAlpha = alpha + } + } + + /** + * @returns alpha of the dark backing effect of the frame + */ + get backingAlpha(): number { + return this.material.mainPass.backingAlpha + } + + /** + * @param enabled set close button enabled or disabled + */ + enableCloseButton = (enabled: boolean) => { + this.closeButton.object.enabled = enabled + const scaleHandles = this.material.mainPass.scaleHandles + scaleHandles.w = enabled && this.allowScaling ? 1 : 0 + this.material.mainPass.scaleHandles = scaleHandles + } + + /** + * @param enabled set follow button enabled or disabled + */ + enableFollowButton = (enabled: boolean) => { + this.followButton.object.enabled = enabled + const scaleHandles = this.material.mainPass.scaleHandles + scaleHandles.y = enabled && this.allowScaling ? 1 : 0 + this.material.mainPass.scaleHandles = scaleHandles + } + + private tweenMarginSqueeze = ( + currentSqueeze: number, + targetSqueeze: number + ) => { + animate({ + duration: SQUEEZE_TWEEN_DURATION, + easing: "ease-out-back-cubic", + update: (t: number) => { + this.onMovingShrinkFactor = lerp(currentSqueeze, targetSqueeze, t) + }, + cancelSet: this.squeezeCancel, + }) + } + + private tweenTranslateMode = (current: number, target: number) => { + animate({ + duration: SQUEEZE_TWEEN_DURATION, + update: (t: number) => { + this.translateMode = lerp(current, target, t) + }, + cancelSet: this.translateModeCancel, + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts.meta new file mode 100644 index 00000000..b7052af9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/ContainerFrame.ts.meta @@ -0,0 +1,124 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 1f1999da-36f1-4f0d-9e61-26400b8aeb8d + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - '// @ui {"widget":"group_start", "label":"Frame Settings"}' + - // @input bool autoShowHide = true + - '// @input vec2 innerSize = "{32,32}"' + - // @input float border = 7 + - '// @input vec2 constantPadding = "{0,0}" {"hint":"In world units (cm), stays constant through scaling"}' + - // @input bool allowScaling = true + - // @input bool autoScaleContent = true + - // @input bool isContentInteractable + - // @input bool allowTranslation = true + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"label", "label":""}' + - '// @ui {"widget":"group_start", "label":"Min/Max Size"}' + - '// @input vec2 minimumSize = "{10,10}" {"hint":"In world units (cm)"}' + - '// @input vec2 maximumSize = "{150,150}" {"hint":"In world units (cm)"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"label", "label":""}' + - '// @ui {"widget":"group_start", "label":"Billboarding"}' + - // @input bool useBillboarding + - '// @input bool xOnTranslate {"showIf":"useBillboarding"}' + - '// @input bool xAlways {"showIf":"xOnTranslate"}' + - '// @input bool yOnTranslate {"showIf":"useBillboarding"}' + - '// @input bool yAlways {"showIf":"yOnTranslate"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"label", "label":""}' + - '// @ui {"widget":"group_start", "label":"Snapping"}' + - '// @input bool useSnapping {"hint":"Use Snapping Behaviors"}' + - '// @input bool itemSnapping {"hint":"Container to Container Snapping", "showIf":"useSnapping"}' + - '// @input bool worldSnapping {"hint":"Container to World Snapping", "showIf":"useSnapping"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"label", "label":""}' + - '// @ui {"widget":"group_start", "label":"Follow Behavior"}' + - // @input bool showFollowButton + - '// @input bool useFOVFollow {"label":"Front Follow Behavior", "showIf":"showFollowButton"}' + - '// @input bool isFollowing {"showIf":"useFOVFollow"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"label", "label":""}' + - '// @ui {"widget":"group_start", "label":"Close Button"}' + - // @input bool showCloseButton = true + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Interaction Plane"}' + - // @input bool _enableInteractionPlane + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"separator"}' + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _enableInteractionPlane: false + allowScaling: false + allowTranslation: false + autoScaleContent: false + autoShowHide: false + border: false + constantPadding: false + innerSize: false + isContentInteractable: false + isFollowing: false + itemSnapping: false + maximumSize: false + minimumSize: false + showCloseButton: false + showFollowButton: false + useBillboarding: false + useFOVFollow: false + useSnapping: false + worldSnapping: false + xAlways: false + xOnTranslate: false + yAlways: false + yOnTranslate: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - allowScaling: true + useBillboarding: false + useSnapping: false + showFollowButton: false + useFOVFollow: false + isFollowing: false + showCloseButton: true + border: ! 4.000000 + autoScaleContent: true + isContentInteractable: false + autoShowHide: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + yOnTranslate: false + xOnTranslate: false + xAlways: false + yAlways: false + innerSize: ! {x: 32.000000, y: 32.000000} + constantPadding: ! {x: 0.000000, y: 0.000000} + allowTranslation: true + worldSnapping: false + itemSnapping: false + _enableInteractionPlane: false + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat new file mode 100644 index 00000000..8aa2a36f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat @@ -0,0 +1,288 @@ +- ! + PackagePath: "" + PassesInfo: + - ! ead50f94-a77b-4983-bf19-9a0e5aa3b6cb +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 2.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Input0_N024: + typeIdx: 5 + value: {x: 0.612177, y: 0.612177, z: 0.612177, w: 1.000000} + Port_Input0_N055: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input0_N091: + typeIdx: 1 + value: 1.000000 + Port_Input0_N096: + typeIdx: 3 + value: {x: -0.250000, y: -0.250000} + Port_Input0_N106: + typeIdx: 1 + value: 0.000000 + Port_Input0_N107: + typeIdx: 1 + value: 1.000000 + Port_Input0_N109: + typeIdx: 1 + value: 1.000000 + Port_Input0_N125: + typeIdx: 1 + value: 1.000000 + Port_Input0_N157: + typeIdx: 1 + value: 0.000000 + Port_Input0_N166: + typeIdx: 1 + value: 5.500000 + Port_Input1_N002: + typeIdx: 1 + value: -1.000000 + Port_Input1_N008: + typeIdx: 1 + value: 0.500000 + Port_Input1_N018: + typeIdx: 1 + value: 0.500000 + Port_Input1_N021: + typeIdx: 1 + value: 0.500000 + Port_Input1_N024: + typeIdx: 5 + value: {x: 0.738949, y: 0.738949, z: 0.738949, w: 1.000000} + Port_Input1_N033: + typeIdx: 1 + value: 0.000000 + Port_Input1_N052: + typeIdx: 1 + value: 0.700000 + Port_Input1_N059: + typeIdx: 1 + value: 2.000000 + Port_Input1_N062: + typeIdx: 1 + value: 1.000000 + Port_Input1_N072: + typeIdx: 1 + value: 6.000000 + Port_Input1_N084: + typeIdx: 1 + value: 6.000000 + Port_Input1_N085: + typeIdx: 1 + value: 0.500000 + Port_Input1_N087: + typeIdx: 1 + value: 2.750000 + Port_Input1_N093: + typeIdx: 1 + value: 0.000100 + Port_Input1_N102: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Input1_N149: + typeIdx: 1 + value: 1.750000 + Port_Input1_N157: + typeIdx: 1 + value: 0.500000 + Port_Input1_N160: + typeIdx: 1 + value: 1.500000 + Port_Input1_N165: + typeIdx: 1 + value: 0.000000 + Port_Input2_N014: + typeIdx: 1 + value: 1.000000 + Port_Input2_N019: + typeIdx: 1 + value: 1.000000 + Port_Input2_N023: + typeIdx: 1 + value: -1.000000 + Port_RangeMaxA_N053: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N110: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N112: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N129: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N053: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N110: + typeIdx: 1 + value: 2.750000 + Port_RangeMaxB_N112: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N129: + typeIdx: 1 + value: 0.330000 + Port_RangeMinA_N053: + typeIdx: 1 + value: 0.200000 + Port_RangeMinA_N110: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N112: + typeIdx: 1 + value: 0.500000 + Port_RangeMinA_N129: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N053: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N110: + typeIdx: 1 + value: 5.000000 + Port_RangeMinB_N112: + typeIdx: 1 + value: 0.330000 + Port_RangeMinB_N129: + typeIdx: 1 + value: 1.000000 + Port_Value1_N050: + typeIdx: 1 + value: 1.000000 + Port_Value1_N065: + typeIdx: 1 + value: 1.000000 + Port_Value1_N156: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Port_Value2_N049: + typeIdx: 1 + value: 1.000000 + Port_Value2_N064: + typeIdx: 1 + value: 1.000000 + Port_Value_N054: + typeIdx: 4 + value: {x: 0.752499, y: 0.717098, z: 0.044266} + Port_Value_N073: + typeIdx: 4 + value: {x: 0.599130, y: 0.319539, z: 0.000000} + Port_Value_N151: + typeIdx: 4 + value: {x: 0.019608, y: 0.019608, z: 0.019608} + Port_backingSoftness_N104: + typeIdx: 1 + value: 5.000000 + Port_borderOffset_N104: + typeIdx: 3 + value: {x: 2.000000, y: 2.000000} + Port_borderSoftness_N104: + typeIdx: 1 + value: 3.500000 + Port_handleOffset_N104: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_handleRadius_N104: + typeIdx: 1 + value: 1.660000 + Port_handleWidth_N104: + typeIdx: 1 + value: 0.500000 + Port_radius_N104: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + aspectRatio: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + backingAlpha: + typeIdx: 1 + value: 1.000000 + borderAlpha: + typeIdx: 1 + value: 1.000000 + cutOutCenter: + typeIdx: 1 + value: 0.000000 + frameMargin: + typeIdx: 1 + value: 1.000000 + fullScale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + isHovered: + typeIdx: 1 + value: 1.000000 + matcapTexture: + typeIdx: 9 + value: + id: b602e9a0-f2ff-435d-aec2-fce5eb07c4ba + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + matcapTextureBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + matcapTextureDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + matcapTextureTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + matcapTextureUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + opacity: + typeIdx: 1 + value: 1.000000 + rawScale: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + scaleFactor: + typeIdx: 1 + value: 1.000000 + scaleHandles: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + scaleX: + typeIdx: 1 + value: 1.000000 + scaleY: + typeIdx: 1 + value: 1.000000 + scaleZ: + typeIdx: 1 + value: 1.000000 + touchPosition: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + Pass: ! 2f6b7f77-9b41-47c1-a2ab-4ee6a1b56c8b + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat.meta new file mode 100644 index 00000000..04f7cf30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 7b3d45fc-ecf3-49d9-996b-a3508971e038 + ImporterName: MaterialImporter + PrimaryAsset: ! 7b3d45fc-ecf3-49d9-996b-a3508971e038 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph new file mode 100644 index 00000000..a391c70a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850fe2a7cdde1aa7e2d2ccae4f9e539f85d887d8b6ad471a9de9bc82497b70f0 +size 829743 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph.meta new file mode 100644 index 00000000..ebb9b568 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/FrameMaterial.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 2f6b7f77-9b41-47c1-a2ab-4ee6a1b56c8b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 2f6b7f77-9b41-47c1-a2ab-4ee6a1b56c8b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat new file mode 100644 index 00000000..980550f6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat @@ -0,0 +1,114 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6580fa8f-1083-452c-b24b-65d7c6426868 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Input0_N042: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Input0_N073: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Input1_N046: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input1_N047: + typeIdx: 1 + value: 1.360000 + Port_Input1_N057: + typeIdx: 1 + value: 0.500000 + Port_Input1_N070: + typeIdx: 1 + value: 0.500000 + Port_Input1_N073: + typeIdx: 4 + value: {x: 0.870558, y: 0.870558, z: 0.870558} + Port_Input1_N078: + typeIdx: 1 + value: 2.000000 + Port_Input1_N079: + typeIdx: 1 + value: 0.000000 + Port_Input1_N080: + typeIdx: 1 + value: 2.000000 + Port_Input1_N085: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input1_N089: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Input1_N094: + typeIdx: 1 + value: 0.000000 + Port_Input1_N098: + typeIdx: 1 + value: -1.000000 + Port_Input1_N099: + typeIdx: 1 + value: 0.000100 + Port_Input2_N045: + typeIdx: 1 + value: 0.560000 + Port_Input2_N082: + typeIdx: 1 + value: 0.150000 + Port_Multiplier_N054: + typeIdx: 1 + value: 2.800000 + Port_Scale_N081: + typeIdx: 3 + value: {x: 1024.000000, y: 1024.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 0.999969, z: 0.999985, w: 0.330007} + blur: + typeIdx: 1 + value: 0.001000 + boxSize: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + cornerRadius: + typeIdx: 1 + value: 0.050000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! a1b542fe-e397-4f4a-955a-136d667d6e20 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat.meta new file mode 100644 index 00000000..4cb5c11f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! edf564d4-1379-427c-b4e3-dd439e6fa663 + ImporterName: MaterialImporter + PrimaryAsset: ! edf564d4-1379-427c-b4e3-dd439e6fa663 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph new file mode 100644 index 00000000..fcee3e0b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27d6ef136edf52be1ab3abab627e3e4e7a2b06f87e53779a95fd75cadc6753f2 +size 726265 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph.meta new file mode 100644 index 00000000..8ca12f60 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Ghost Material.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! a1b542fe-e397-4f4a-955a-136d667d6e20 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! a1b542fe-e397-4f4a-955a-136d667d6e20 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat new file mode 100644 index 00000000..6d3871cc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 686d4ed8-5ad4-4a78-8db2-c6e1ea8261bf +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + - ENABLE_BASE_TEX + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 02736e7d-b89c-4105-9cec-c32963b1f434 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat.meta new file mode 100644 index 00000000..49a77f0f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Image.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 1759fdb8-549f-44f7-a05c-bff29f04c3f7 + ImporterName: MaterialImporter + PrimaryAsset: ! 1759fdb8-549f-44f7-a05c-bff29f04c3f7 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat new file mode 100644 index 00000000..890e0dd9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 783dda67-13f7-4f2b-880e-f2134774a365 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: f4d898cf-6a34-4025-9fec-7e9eef7c3d99 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat.meta new file mode 100644 index 00000000..9d92495d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/Label.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ecfdbbfe-8ed8-459e-8bfd-4518842ca72e + ImporterName: MaterialImporter + PrimaryAsset: ! ecfdbbfe-8ed8-459e-8bfd-4518842ca72e + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat new file mode 100644 index 00000000..2d4162ca --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat @@ -0,0 +1,171 @@ +- ! + PackagePath: "" + PassesInfo: + - ! f40b938a-74b9-40cf-8696-9944efe7428f +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input0_N018: + typeIdx: 1 + value: 0.330000 + Port_Input0_N038: + typeIdx: 1 + value: 1.300000 + Port_Input1_N009: + typeIdx: 3 + value: {x: 0.850000, y: 0.850000} + Port_Input1_N014: + typeIdx: 1 + value: 1.200000 + Port_Input1_N018: + typeIdx: 1 + value: 1.000000 + Port_Input1_N019: + typeIdx: 5 + value: {x: 0.400000, y: 0.400000, z: 0.400000, w: 1.000000} + Port_Input1_N022: + typeIdx: 1 + value: 2.000000 + Port_Input1_N028: + typeIdx: 1 + value: 0.000000 + Port_Input1_N031: + typeIdx: 1 + value: 1.000000 + Port_Input1_N034: + typeIdx: 1 + value: 2.000000 + Port_Input1_N041: + typeIdx: 1 + value: 2.500000 + Port_Input1_N043: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Input2_N009: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Input2_N028: + typeIdx: 1 + value: 1.000000 + Port_Input2_N043: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Position1_N007: + typeIdx: 1 + value: 0.470000 + Port_Position2_N007: + typeIdx: 1 + value: 0.700000 + Port_Value2_N007: + typeIdx: 5 + value: {x: 0.800000, y: 0.800000, z: 0.800000, w: 1.000000} + Port_Value3_N007: + typeIdx: 5 + value: {x: 0.800977, y: 0.800977, z: 0.800977, w: 1.000000} + Port_Value_N026: + typeIdx: 5 + value: {x: 0.200000, y: 0.200000, z: 0.200000, w: 1.000000} + Port_Value_N027: + typeIdx: 5 + value: {x: 0.594049, y: 0.594049, z: 0.594049, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: -1 + additional_settings_btn_refl_tex: + typeIdx: 9 + value: + id: 659a0716-80c9-467b-8d31-f63a01cfec82 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + additional_settings_btn_refl_texBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + additional_settings_btn_refl_texTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + additional_settings_btn_refl_texUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + alpha: + typeIdx: 1 + value: 1.000000 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + hoverColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + hovered: + typeIdx: 1 + value: 0.000000 + icon: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + iconBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + iconScale: + typeIdx: 3 + value: {x: 2.600000, y: 2.600000} + iconTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + iconUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + isToggle: + typeIdx: 1 + value: 0.000000 + triggered: + typeIdx: 1 + value: 1.000000 + Pass: ! c46734a1-2314-4e4a-89ca-d61a55ed2c41 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat.meta new file mode 100644 index 00000000..176346ff --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 097b95d9-9213-47f0-8fdb-bc23cab972a8 + ImporterName: MaterialImporter + PrimaryAsset: ! 097b95d9-9213-47f0-8fdb-bc23cab972a8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph new file mode 100644 index 00000000..88e64b10 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65496bcf672114313a73aa2e6072bc34d41687b9eaf439fc694979ec24b6cd79 +size 318735 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph.meta new file mode 100644 index 00000000..34ba1968 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/container-button.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! c46734a1-2314-4e4a-89ca-d61a55ed2c41 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! c46734a1-2314-4e4a-89ca-d61a55ed2c41 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph new file mode 100644 index 00000000..90b1283f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2822a574174679230e64213eadcc87794821bc75a83c817321b072d4e9e5d3e7 +size 513589 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph.meta new file mode 100644 index 00000000..916659ed --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Materials/flat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh new file mode 100644 index 00000000..5e10e780 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63a5408eb471be1c2c0f0be5065b47715bc405388e908e1378883867bc6d1ed8 +size 16318 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh.meta new file mode 100644 index 00000000..655bb35e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImportedAssetIds: + FileMesh: ! e11c4e94-d7df-4d11-81bc-fa0695eae712 + ImporterName: FileMeshImporter + PrimaryAsset: ! e11c4e94-d7df-4d11-81bc-fa0695eae712 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + ModifiedVertexFormats: + color: Float + normal: Float + position: Float + texture0: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh new file mode 100644 index 00000000..074526e1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84ff24a4649aa152ecaf016cea1771995b18e25f2a6e4b0f0b29dab2952000f6 +size 215830 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh.meta new file mode 100644 index 00000000..be2db91a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_High.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImportedAssetIds: + FileMesh: ! df3feb8c-76d3-409a-b35f-f4e154fb1610 + ImporterName: FileMeshImporter + PrimaryAsset: ! df3feb8c-76d3-409a-b35f-f4e154fb1610 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + ModifiedVertexFormats: + color: Float + normal: Float + position: Float + texture0: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh new file mode 100644 index 00000000..1c2f6bbc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56de076eacaa4ceb069e1a1b5751639aa390d36b913ec5262b89e3e705f697d0 +size 57142 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh.meta new file mode 100644 index 00000000..c8b8ede6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/Frame_Mid.mesh.meta @@ -0,0 +1,28 @@ +- ! + ImportedAssetIds: + FileMesh: ! f84a6abe-6576-4da5-abd6-723374d539e1 + ImporterName: FileMeshImporter + PrimaryAsset: ! f84a6abe-6576-4da5-abd6-723374d539e1 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + ModifiedVertexFormats: + color: Float + normal: Float + position: Float + texture0: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh new file mode 100644 index 00000000..87518e36 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcaf2b2475303f513453c358ad3619acffb3d8a8ce9e0791ba64cb547126c38c +size 52766 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh.meta new file mode 100644 index 00000000..e5207ff1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SphereButton.mesh.meta @@ -0,0 +1,29 @@ +- ! + ImportedAssetIds: + FileMesh: ! 3647f7d4-b357-4261-9a5d-430f8a249f77 + ImporterName: FileMeshImporter + PrimaryAsset: ! 3647f7d4-b357-4261-9a5d-430f8a249f77 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + texture1: Float + CompressionSettings: ! + CompressionSettings: ! + EnableDracoCompression: false + CompressionLevel: 0 + PositionBits: 11 + TexcoordBits: 10 + NormalBits: 8 + ColorBits: 8 + CompressorName: Draco + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh new file mode 100644 index 00000000..48125813 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63d12f76e80d601fc347dca9745ee304218faadb8ffc1c897726e5a349f2c306 +size 41430 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh.meta new file mode 100644 index 00000000..c96a6535 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/SysSettings_settings_button.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! bf1f1c8a-e09f-4466-b725-db70b9f52b0f + ImporterName: FileMeshImporter + PrimaryAsset: ! bf1f1c8a-e09f-4466-b725-db70b9f52b0f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + texture0: Float + texture1: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh new file mode 100644 index 00000000..38514e49 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e68268ad85ba07bbec2fb0d2ce38fda4d14e6f99f02406cbca822e342b96966 +size 52766 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh.meta new file mode 100644 index 00000000..5f8b373b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Meshes/pinch-depth-button.mesh.meta @@ -0,0 +1,23 @@ +- ! + ImportedAssetIds: + FileMesh: ! 0479aeb4-3ef2-48f7-8cd9-338b07c4e893 + ImporterName: FileMeshImporter + PrimaryAsset: ! 0479aeb4-3ef2-48f7-8cd9-338b07c4e893 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + texture1: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab new file mode 100644 index 00000000..56f01c1d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab @@ -0,0 +1,60 @@ +- ! + PackagePath: "" + objects: + - ! 2de514b9-1878-47c7-83ca-0661d1b4d70b + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: FramePrefab + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 63679e27-dd2a-43d2-92a3-7a3b18faeabd + - ! a829bb2f-bf3c-4fe7-b747-09f382bf0a6c +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 1.000000, y: 1.000000, z: 0.050000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7b3d45fc-ecf3-49d9-996b-a3508971e038 + Mesh: ! f84a6abe-6576-4da5-abd6-723374d539e1 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab.meta new file mode 100644 index 00000000..00c6d165 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/FramePrefab.prefab.meta @@ -0,0 +1,82 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 124d8042-863d-4c36-86dc-ef584ae3db5d + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 124d8042-863d-4c36-86dc-ef584ae3db5d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! a56a49ce-202c-4251-8468-f0aa953e37f1 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: FramePrefab + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b37c1b5e-556c-4ab7-b42c-88bff5b0552b + - ! 859802e3-44af-40cb-96b8-a2463da44d2f +- ! + PackagePath: "" + objects: + - ! 47c9e01e-d3b9-4b4a-8cde-9456d0d0406c + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7b3d45fc-ecf3-49d9-996b-a3508971e038 + Mesh: ! f84a6abe-6576-4da5-abd6-723374d539e1 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 2de514b9-1878-47c7-83ca-0661d1b4d70b: 47c9e01e-d3b9-4b4a-8cde-9456d0d0406c + - 63679e27-dd2a-43d2-92a3-7a3b18faeabd: b37c1b5e-556c-4ab7-b42c-88bff5b0552b + - a829bb2f-bf3c-4fe7-b747-09f382bf0a6c: 859802e3-44af-40cb-96b8-a2463da44d2f + SourceState: ! 51fcf0a2-a995-41b0-bd78-31368c7200ab +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + Size: {x: 1.000000, y: 1.000000, z: 0.050000} + FitVisual: false + ForceCompound: false + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + ShowCollider: false + Intangible: false + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab new file mode 100644 index 00000000..50c50fc7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab @@ -0,0 +1,85 @@ +- ! + PackagePath: "" + objects: + - ! 08d63cc3-1e18-4065-9034-c456dfdf8cfd + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: container-button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.935684, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e1d8a241-a4de-4e2c-8389-4c6aa5f625d2 + - ! 439858c2-8703-4372-975b-55fdc80d571d + - ! 1dfab4fc-760d-4222-900d-82dfd0850d2e +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_6 + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 097b95d9-9213-47f0-8fdb-bc23cab972a8 + Mesh: ! bf1f1c8a-e09f-4466-b725-db70b9f52b0f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 + Z depth: 1.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab.meta new file mode 100644 index 00000000..b70ef972 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Prefabs/container-button.prefab.meta @@ -0,0 +1,108 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 7a73ddb7-46a8-4f5e-9db3-f117cda5a64b + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 7a73ddb7-46a8-4f5e-9db3-f117cda5a64b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 6181b45e-d7c3-445c-bd43-a884f45c6938 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_6 + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 097b95d9-9213-47f0-8fdb-bc23cab972a8 + Mesh: ! bf1f1c8a-e09f-4466-b725-db70b9f52b0f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 + Z depth: 1.000000 +- ! + PrefabRemaps: + [] + Name: container-button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.935684, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1d4cd7ee-36e5-4a68-a92f-3a7d3dfebcd2 + - ! 0811cea8-bd72-4778-8689-b33698739f3f + - ! 5fd932eb-4fda-4426-b438-145e2a16a143 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + SourceRemaps: + - 08d63cc3-1e18-4065-9034-c456dfdf8cfd: 28f6d674-53cb-41c2-a53c-fe21acb81df4 + - 1dfab4fc-760d-4222-900d-82dfd0850d2e: 5fd932eb-4fda-4426-b438-145e2a16a143 + - 439858c2-8703-4372-975b-55fdc80d571d: 0811cea8-bd72-4778-8689-b33698739f3f + - e1d8a241-a4de-4e2c-8389-4c6aa5f625d2: 1d4cd7ee-36e5-4a68-a92f-3a7d3dfebcd2 + SourceState: ! cff380da-1fc0-47b8-aaec-f3167ccf669a +- ! + PackagePath: "" + objects: + - ! 28f6d674-53cb-41c2-a53c-fe21acb81df4 + LazyLoading: false + RetainAssets: true diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md new file mode 100644 index 00000000..54b79235 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md @@ -0,0 +1,93 @@ +# :framed_picture: Container Frame :framed_picture: + +## A window for your AR Content + + +### Setup + +- Create a Scene Object +- Add the ContainerFrame typsescript component to the new object +- Set the target content as the child of the new object created above +- Adjust the frameSize attribute for the desired appearance +- Adjust the border attribute for desired experience +- Check the UI and API below for additional functionality + +--- + +### Usage + +The frame requires a specific hierarchy setup in your scene. + +Create a SceneObject that is a parent to the content you want to contain in the frame: + +``` +\__> Parent (add the ContainerFrame component here) + \__> Content (can be multiple items) +``` + +This will result in the ContainerFrame generating the following hierarchy at runtine: + +``` +\__> Parent (with ContainerFrame component) + \__> ContainerInner (automatically created by ContainerFrame) + \__> Content (can be multiple items) + \__> Frame SceneObject (automatically created by ContainerFrame) + \__> Frame UI SceneObjects... + \__> ... +``` + +--- + +### UI + +![Current Container UI](./container-ui.png) + +--- + +### API + +ContainerFrame.autoShowHide
    `boolean` if true, ContainerFrame will auto show and hide on hover +

ContainerFrame.frameSize
    `vec2` size of the frame +

ContainerFrame.border
    `number` thickness of border +

ContainerFrame.autoScaleContent
    `boolean` if true, ContainerFrame content will scale along with frame when scaled +

ContainerFrame.addCloseButtonOnTrigger( `function` )
    called when close button is triggered +

ContainerFrame.addFollowButtonOnTrigger( `function` )
    called when follow button is triggered +

ContainerFrame.onScalingUpdateEvent
    `publicApi` event api for user scaling update +

ContainerFrame.onScalingStartEvent
    `publicApi` event api for user scaling start +

ContainerFrame.onScalingEndEvent
    `publicApi` event api for user scaling end +

ContainerFrame.isVisible
    `boolean` readOnly boolean for if the ContainerFrame isVisible +

ContainerFrame.onSnappingComplete
    `publicApi` event api for snapping tween completed +

ContainerFrame.frontFollowBehavior
    `FrontFollowBehavior` reference to default FrontFollowBehavior packaged with ContainerFrame +

ContainerFrame.getInteractable()
    `returns Interactable` gets Interactable for the frame itself +

ContainerFrame.getInteractableManipulation()
    `returns InteractableManipulation` gets InteractableManipulation for the frame itself +

ContainerFrame.setIsContentInteractable( `boolean` )
    `void` updates input handler to handle interactions as if content is interactable +

ContainerFrame.setIsSnappable( `boolean` )
    enable or disable SnappableBehavior +

ContainerFrame.setAllowScaling( `boolean` )
    enable or disable user scaling +

ContainerFrame.setUseFollow( `boolean` )
    attach default FrontFollowBehavior to FollowButton +

ContainerFrame.setIsFollowing( `boolean` )
    enable or disable frontFollowBehavior ( the following itself! ) +

ContainerFrame.isSnappingTweening()
    `boolean` returns whether the ContainerFrame is currently tweening +

ContainerFrame.isSnappingActive()
    `boolean` returns whether the ContainerFrame is actively looking for anotehr snappable frame +

ContainerFrame.getTargetObject()
    `SceneObject` returns innerContainer which contains all the provided content +

ContainerFrame.getFrameObject()
    `SceneObject` returns the FramePrefab object itself +

ContainerFrame.setHoverInteractableOpacity( `number` )
    `0-1` set the opacity of the frame when hovering interactive children +

ContainerFrame.setMinimumScale( `vec2` )
    set the minimum scale of the frame +

ContainerFrame.setMaximumScale( `vec2` )
    set the maximum scale of the frame +

ContainerFrame.enableInteractables( `boolean` )
    enable or disable the interactable elements of the frame itself ( frame, buttons ) +

ContainerFrame.worldPosition
    get or set the current worldPosition of the parentTransform +

ContainerFrame.localPosition
    get or set the current localPosition of the parentTransform +

ContainerFrame.worldRotation
    get or set the current worldRotation of the parentTransform +

ContainerFrame.localRotation
    get or set the current localRotation of the parentTransform +

ContainerFrame.worldScale
    get or set the current worldScale of the parentTransform +

ContainerFrame.localScale
    get or set the current localScale of the parentTransform +

ContainerFrame.renderOrder
    get or set the renderOrder for the frame itself +

ContainerFrame.destroy()
    function for destroying and disposing of the frame and its components +

ContainerFrame.getFollowButton()
    returns follow button SceneObject +

ContainerFrame.getCloseButton()
    returns close button SceneObject +

ContainerFrame.enableFollowButton( `boolean` )
    enable or disable the follow button SceneObject +

ContainerFrame.enableCloseButton( `boolean` )
    enable or disable the close button SceneObject +

ContainerFrame.setButtonsOnLeft( `boolean` )
    enable or disable positioning both buttons to left of frame +

ContainerFrame.setButtonsAbove( `boolean` )
    enable or disable positioning both buttons to above the frame +

ContainerFrame.getParentTransform()
    returns container parent Transform +

ContainerFrame.showVisual()
    tween up the opacity of the frame and its elements to 1 +

ContainerFrame.hideVisual()
    tween down the opacity of the frame and its elements to 0 +

ContainerFrame.opacity
    get or set the current opacity of the frame and its elements diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md.meta new file mode 100644 index 00000000..22ef056d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/README.md.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + BinAsset: ! 43515302-9836-4261-8f1e-4b55b50f846d + ImporterName: BinAssetImporter + PrimaryAsset: ! 43515302-9836-4261-8f1e-4b55b50f846d + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png new file mode 100644 index 00000000..ffcd7cd7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6e0b1f8ac90517e4a11f9d33f121c45c95155e2db28c1384527a604f20e91e2 +size 707 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png.meta new file mode 100644 index 00000000..255d7052 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon-1.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 93ccce6d-acaf-463c-a766-245dfa12e12c + ImporterName: FileTextureImporter + PrimaryAsset: ! 93ccce6d-acaf-463c-a766-245dfa12e12c + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png new file mode 100644 index 00000000..a95e881f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82c6d50af66975cbb4452c53721fb3373cd027fa6c86f8b14716e156728d254f +size 7435 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png.meta new file mode 100644 index 00000000..706665ff --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/close-icon.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 4f595fd6-dfe7-420c-a4c4-7271b7f1954b + ImporterName: FileTextureImporter + PrimaryAsset: ! 4f595fd6-dfe7-420c-a4c4-7271b7f1954b + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg new file mode 100644 index 00000000..bb5c1a52 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98589b58ff5d117e6e898f49d0b5505203bff6951668bc4bf110986d6287f27c +size 60024 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg.meta new file mode 100644 index 00000000..05acf183 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/container-button-matcap.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 659a0716-80c9-467b-8d31-f63a01cfec82 + ImporterName: FileTextureImporter + PrimaryAsset: ! 659a0716-80c9-467b-8d31-f63a01cfec82 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Size + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png new file mode 100644 index 00000000..702f805b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91cbdad7cfc6b685dfa3dd98752c6de2b01bce379a699f3c79d93b2dded2f8d2 +size 5841 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png.meta new file mode 100644 index 00000000..23c20f20 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-black.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 9dac95d8-45f0-4521-bd7c-5f0a0449fb10 + ImporterName: FileTextureImporter + PrimaryAsset: ! 9dac95d8-45f0-4521-bd7c-5f0a0449fb10 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png new file mode 100644 index 00000000..b91fc581 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9eb29966736b2f246252ab043b5943e93cf1fc049c94ce5f11f9c12ea5136633 +size 9934 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png.meta new file mode 100644 index 00000000..7b39c668 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white-shadow.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 4323d3e4-ba63-4f75-845f-85d1e68c9e59 + ImporterName: FileTextureImporter + PrimaryAsset: ! 4323d3e4-ba63-4f75-845f-85d1e68c9e59 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png new file mode 100644 index 00000000..d1b25100 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfd8e3bd90d28b7f908c256b2296cd92bbb0027423fe49cd6622b2625df13e4a +size 6095 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png.meta new file mode 100644 index 00000000..0e9eeb9d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/follow-white.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 38a80afd-b944-4c91-bc1b-8b3e3b07b2ba + ImporterName: FileTextureImporter + PrimaryAsset: ! 38a80afd-b944-4c91-bc1b-8b3e3b07b2ba + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png new file mode 100644 index 00000000..e8aaf190 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b249565f48bf47b392849152c008bb4707eed91009d4e81509960440a7529d65 +size 423156 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png.meta new file mode 100644 index 00000000..33d7b3fe --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1-cube.png.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! b9152339-32ec-4c08-b30a-839b0c131b06 + ImporterName: FileTextureImporter + PrimaryAsset: ! b9152339-32ec-4c08-b30a-839b0c131b06 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg new file mode 100644 index 00000000..9b562422 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb79debd1ea7a841eed24517f6a7e2a9a375267893da451aaf5a05f664c1dfab +size 21057 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg.meta new file mode 100644 index 00000000..0a6f0207 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/reflection-map-1.jpg.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! b602e9a0-f2ff-435d-aec2-fce5eb07c4ba + ImporterName: FileTextureImporter + PrimaryAsset: ! b602e9a0-f2ff-435d-aec2-fce5eb07c4ba + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + CompressorName: None + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg new file mode 100644 index 00000000..7cf2eb71 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7debbb5331cbba64080e43eac0102debe4edc2fc0922d18785b516c6a4a3939a +size 9513 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg.meta new file mode 100644 index 00000000..6ce157d2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/Textures/soft-reflection.jpg.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 165a47ec-9edf-426b-b3fa-4c00cb192365 + ImporterName: FileTextureImporter + PrimaryAsset: ! 165a47ec-9edf-426b-b3fa-4c00cb192365 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png new file mode 100644 index 00000000..662c36d9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee3080c80fd8dcb0c97b01b1affaa7e1033ab491b790434d12793c682829dfde +size 113813 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png.meta new file mode 100644 index 00000000..5340ac02 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/container-ui.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 0434ca42-6607-4b63-b843-af63f9648134 + ImporterName: FileTextureImporter + PrimaryAsset: ! 0434ca42-6607-4b63-b843-af63f9648134 + PackageType: NotAPackage + AssetDataMap: + {} + ImporterSettings: ! + {} + CompressionSettings: ! + CompressionSettings: ! + Level: Medium + CompressorName: Size + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts new file mode 100644 index 00000000..ffa6a808 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts @@ -0,0 +1,149 @@ +import { + CursorMode, + InteractorCursor, +} from "../../../../Components/Interaction/InteractorCursor/InteractorCursor" +import NativeLogger from "../../../../Utils/NativeLogger" +import {validate} from "../../../../Utils/validate" +import {ContainerFrame, InputState} from "../ContainerFrame" +import {FrameState} from "./FrameInputHandler" + +const log = new NativeLogger("CursorManager") + +export type CursorManagerOptions = { + interactorCursor?: InteractorCursor + target: SceneObject + frame: ContainerFrame + margin: number +} + +export enum CursorModes { + auto = 0, + scaleTlBr = 1, + scaleTrBl = 2, + translate = 3, +} + +export class CursorHandler { + /** + * + * Manages custom cursor states + * used for indicating contextual functionality + * swaps textures + * animates effects + * + */ + + /** + * mode is used to select the current active texture + * updated in ContainerFrame update loop to match the FrameInputController state + */ + mode: CursorMode = CursorMode.Auto + private lastMode: CursorMode = this.mode + private target: SceneObject = this.options.target + private targetTransform: Transform = this.target.getTransform() + private frame: ContainerFrame = this.options.frame + private parentTransform: Transform | undefined = + this.frame.object?.getTransform() + private lockMode: boolean = false + private lockPosition: vec3 = vec3.zero() + private margin: number = this.options.margin + private interactorCursor: InteractorCursor | null = null + + private _enabled: boolean = false + + constructor(private options: CursorManagerOptions) { + this.interactorCursor = options.interactorCursor ?? null + } + + /** + * sets current position of cursor + * ignored if cursor is in lockMode + */ + set position(pos: vec3 | null) { + if (!this.lockMode && this.interactorCursor) { + this.interactorCursor.cursorPosition = pos + } + } + + /** + * update + * @param inputState + * @param frameState + * + * method called in main loop + * watches for changed CursorModes to swap textures + * updates position and triggers animations + */ + + update = (inputState: InputState, frameState: FrameState) => { + if (!this.interactorCursor) { + return + } + + validate(this.parentTransform) + + if (this.lockMode) { + const ogScale = this.parentTransform.getWorldScale() + const tempScale = new vec3( + this.frame.innerSize.x + + this.frame.constantPadding.x + + this.frame.border * 2, + this.frame.innerSize.y + + this.frame.constantPadding.y + + this.frame.border * 2, + 1 + ) + this.parentTransform.setWorldScale(tempScale) + const tempWorld = this.parentTransform.getWorldTransform() + const lockedPosition = tempWorld.multiplyPoint(this.lockPosition) + this.parentTransform.setWorldScale(ogScale) + this.interactorCursor.cursorPosition = lockedPosition + } else { + // use default position, without override + this.interactorCursor.cursorPosition = null + } + + // prevent switching to translate while over inner interactables + if (!inputState.isHovered) { + this.mode = CursorMode.Auto + } + // handle switching cursors + if (this.mode !== this.lastMode && !this.lockMode) { + this.interactorCursor.cursorMode = this.mode + this.lastMode = this.mode + } + + if (frameState.scaling && !this.lockMode) { + this.lockMode = true + this.lockPosition = inputState.position + } + + if (!frameState.scaling && this.lockMode) { + this.lockMode = false + this.resetCursor() + } + } + + /** + * Sets the InteractorCursor for the handler to control. + * @param cursor + */ + setCursor(cursor: InteractorCursor | null): void { + if (this.interactorCursor !== cursor && this.interactorCursor) { + this.resetCursor() + } + this.interactorCursor = cursor + } + + /** + * Reset the position override & mode of the interactor cursor. + */ + resetCursor() { + if (this.interactorCursor) { + this.interactorCursor.cursorMode = CursorMode.Auto + this.interactorCursor.cursorPosition = null + } + this.lastMode = CursorMode.Auto + this.mode = CursorMode.Auto + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts.meta new file mode 100644 index 00000000..b9e478f1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/CursorHandler.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! b8f7da42-f5ed-4473-9d34-8ffa198f4e1b + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b8f7da42-f5ed-4473-9d34-8ffa198f4e1b + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 65187ddb-6a99-4f74-9d8f-0a30055e6a6d + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts new file mode 100644 index 00000000..435724e1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts @@ -0,0 +1,28 @@ +export type ContainerParentConfig = { + target: SceneObject +} + +// auto parenting +// to prevent collisions with existing ancestry +// hardcoded hash appended to name used across container components +// generated beforehand and will remain static, actual values not important, except that they match across components +const SECRET_HASH = "a43675b3f" +export const FRAME_PARENT_NAME = "ContainerParent" + SECRET_HASH +export const forceContainerParent = ( + options: ContainerParentConfig +): SceneObject => { + const thisObject = options.target + const currentParent = thisObject.getParent() + let containerParent: SceneObject + if (currentParent === null || currentParent?.name !== FRAME_PARENT_NAME) { + containerParent = global.scene.createSceneObject(FRAME_PARENT_NAME) + if (currentParent !== null) { + containerParent.setParent(currentParent) + } + thisObject.setParentPreserveWorldTransform(containerParent) + } else { + containerParent = currentParent + } + + return containerParent +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts.meta new file mode 100644 index 00000000..eb982db6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/ForceContainerParent.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 05f7137c-4023-46ff-8668-3e766d4a236f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 05f7137c-4023-46ff-8668-3e766d4a236f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6ab67a7c-a51f-42c6-846a-839001a0594e + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts new file mode 100644 index 00000000..1c37c37a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts @@ -0,0 +1,347 @@ +import {InteractableManipulation} from "../../../../Components/Interaction/InteractableManipulation/InteractableManipulation" +import {CursorMode} from "../../../../Components/Interaction/InteractorCursor/InteractorCursor" +import Event from "../../../../Utils/Event" +import NativeLogger from "../../../../Utils/NativeLogger" +import {ContainerFrame, InputState} from "../ContainerFrame" +import {CursorHandler} from "./CursorHandler" + +const TAG = "FrameInputController" +const log = new NativeLogger(TAG) + +export type FrameInputOptions = { + frame: ContainerFrame + manipulate: InteractableManipulation + target: SceneObject + parentTransform: Transform + cursorHandler: CursorHandler + isInteractable: boolean + scaleSpeed: number | undefined + allowScaling: boolean + allowScalingTopLeft?: boolean + allowScalingTopRight?: boolean + minimumSize?: vec2 + maximumSize?: vec2 +} + +/** + * + * Which state is the input handler in currently + * + */ +export type FrameState = { + scaling: boolean + translating: boolean + rotating: boolean + ignoring: boolean + interacting: boolean + hoveringInteractable: boolean +} + +/** + * + * Container Frame Input Modes + * Auto ( no explicit mode ) + * Scaling ( with corners defined ) + * Rotating + * Translating + * + */ +export enum Modes { + Auto = "auto", + ScaleTopLeft = "scaleTopLeft", + ScaleBottomRight = "scaleBottomRight", + ScaleTopRight = "scaleTopRight", + ScaleBottomLeft = "scaleBottomLeft", + Translating = "translating", +} + +// affects speed of scaling +const SCALE_AMPLIFIER = 0.2 + +export class FrameInputHandler { + /** + * + * This class takes the inputs from the raycaster + * and uses it to control the frame manipulations + * as well as provide that information to visual affordances + * + */ + private edge: number = 0.5 + gutterSize: vec2 = new vec2(0.08, 0.08) + allowScaling: boolean = this.options.allowScaling + allowScalingTopLeft: boolean = this.options.allowScalingTopLeft ?? true + allowScalingTopRight: boolean = this.options.allowScalingTopRight ?? true + private corner: vec2 = new vec2(1, 1) + private aspect: vec2 = new vec2(1, 1) + private frame: ContainerFrame = this.options.frame + private parentTransform: Transform = this.options.parentTransform + private manipulate: InteractableManipulation = this.options.manipulate + private target: SceneObject = this.options.target + private targetTransform: Transform = this.target.getTransform() + private targetWorldScaleCache: vec3 = this.targetTransform.getWorldScale() + private lastTouch = vec3.zero() + lastHovered: boolean = false + private scalingStarted: boolean = false + private cursorHandler = this.options.cursorHandler + private mode: Modes = Modes.Auto + readonly state: FrameState = { + rotating: false, + scaling: false, + translating: false, + ignoring: false, + hoveringInteractable: false, + interacting: false, + } + + private onTranslationStartEvent = new Event() + /** + * Callback for when translation begins + * + * NOTE: The reason we need to add this event in FrameInputHandler, instead of relying on the container frame's + * internal InteractableManipulation component is because the way this class keeps track of state means that + * we don't set the InteractableManipulation's canTranslate property until after the user has started translating, + * which has the effect of causing InteractableManipulation to NOT invoke the onTranslationStart event. + */ + onTranslationStart = this.onTranslationStartEvent.publicApi() + + private onTranslationEndEvent = new Event() + /** + * Callback for when translation ends + */ + onTranslationEnd = this.onTranslationEndEvent.publicApi() + + minimumSize: vec2 = + this.targetWorldScaleCache.x > this.targetWorldScaleCache.y + ? new vec2( + 3, + (3 * this.targetWorldScaleCache.y) / this.targetWorldScaleCache.x + ) + : new vec2( + (3 * this.targetWorldScaleCache.x) / this.targetWorldScaleCache.y, + 3 + ) + + maximumSize: vec2 = + this.targetWorldScaleCache.x > this.targetWorldScaleCache.y + ? new vec2( + 400, + (400 * this.targetWorldScaleCache.y) / this.targetWorldScaleCache.x + ) + : new vec2( + (400 * this.targetWorldScaleCache.x) / this.targetWorldScaleCache.y, + 400 + ) + + constructor(private options: FrameInputOptions) { + if (this.options.minimumSize) { + this.minimumSize = this.options.minimumSize + } + if (this.options.maximumSize) { + this.maximumSize = this.options.maximumSize + } + } + + /* + * Helper for programatic components + */ + private get isInteractable(): boolean { + return this.options.isInteractable + } + + private get scaleAmplifier(): number { + return this.options.scaleSpeed ?? SCALE_AMPLIFIER + } + + update = (inputState: InputState) => { + const touch = inputState.position + this.state.hoveringInteractable = false + if ( + touch.x < -this.edge + this.gutterSize.x && + touch.y < -this.edge + this.gutterSize.y && + this.allowScaling + ) { + this.mode = Modes.ScaleBottomLeft + } else if ( + touch.x < -this.edge + this.gutterSize.x && + touch.y > this.edge - this.gutterSize.y && + this.allowScaling + ) { + if (this.allowScalingTopLeft) { + this.mode = Modes.ScaleTopLeft + } else { + this.state.ignoring = true + } + } else if ( + touch.x > this.edge - this.gutterSize.x && + touch.y < -this.edge + this.gutterSize.y && + this.allowScaling + ) { + this.mode = Modes.ScaleBottomRight + } else if ( + touch.x > this.edge - this.gutterSize.x && + touch.y > this.edge - this.gutterSize.y && + this.allowScaling + ) { + if (this.allowScalingTopRight) { + this.mode = Modes.ScaleTopRight + } else { + this.state.ignoring = true + } + } else if (touch.x > this.edge - this.gutterSize.x) { + // right edge + this.mode = Modes.Translating + } else if (touch.x < -this.edge + this.gutterSize.x) { + // left edge + this.mode = Modes.Translating + } else if (touch.y < -this.edge + this.gutterSize.y) { + // bottom edge + this.mode = Modes.Translating + } else if (touch.y > this.edge - this.gutterSize.y) { + // top edge + this.mode = Modes.Translating + } else { + // not in corner or on edge + + if (this.isInteractable === false) { + this.mode = Modes.Translating + } else if ( + !this.state.ignoring && + !this.state.scaling && + !this.state.translating + ) { + // hovering interactable + this.mode = Modes.Auto + + if (inputState.rawHovered) { + this.state.hoveringInteractable = true + } else { + this.state.hoveringInteractable = false + } + } + } + + if (inputState.isPinching) { + if ( + !this.state.ignoring && + !this.state.scaling && + !this.state.translating && + !this.state.rotating && + !this.state.interacting + ) { + // if pinching and not already in am ode + if (this.mode === Modes.ScaleBottomLeft) { + this.corner.x = -1 + this.corner.y = -1 + this.startScaling(touch) + } else if (this.mode === Modes.ScaleTopLeft) { + this.corner.x = -1 + this.corner.y = 1 + this.startScaling(touch) + } else if (this.mode === Modes.ScaleBottomRight) { + this.corner.x = 1 + this.corner.y = -1 + this.startScaling(touch) + } else if (this.mode === Modes.ScaleTopRight) { + this.corner.x = 1 + this.corner.y = 1 + this.startScaling(touch) + } else if (this.mode === Modes.Translating) { + this.setStateTranslating(true) + } else { + // touching but not in corner or on edge + if (this.isInteractable === false) { + // content is not interactable, activating translation + this.setStateTranslating(true) + } else { + // content is interactable + this.state.interacting = true + } + } + } + } else { + if (this.state.scaling) { + // end scaling + this.frame.onScalingEnd.invoke() + } + + this.setStateTranslating(false) + this.state.scaling = false + this.state.rotating = false + this.state.ignoring = false + this.state.interacting = false + this.lastTouch = vec3.zero() + } + + if (this.frame.forceTranslate) { + this.mode = Modes.Translating + this.setStateTranslating(true) + } + + if ( + (this.frame.allowTranslation && this.state.translating) || + this.frame.forceTranslate + ) { + this.manipulate.setCanTranslate(true) + } else if (this.manipulate.canTranslate()) { + this.manipulate.setCanTranslate(false) + } + + // + // handle cursor swaps + if (!this.state.scaling || !this.state.translating) { + if (!this.state.interacting) { + if ( + this.mode === Modes.ScaleBottomLeft || + this.mode === Modes.ScaleTopRight + ) { + this.cursorHandler.mode = CursorMode.ScaleTopRight + } else if ( + this.mode === Modes.ScaleBottomRight || + this.mode === Modes.ScaleTopLeft + ) { + this.cursorHandler.mode = CursorMode.ScaleTopLeft + } else if ( + this.mode === Modes.Translating && + (this.frame.allowTranslation || this.frame.forceTranslate) + ) { + this.cursorHandler.mode = CursorMode.Translate + } else { + this.cursorHandler.mode = CursorMode.Auto + } + } + + if (!this.state.scaling) { + this.lastTouch = vec3.zero() + } + + if (this.lastHovered === false && inputState.isHovered) { + inputState.isHovered = false + } + + if (this.lastHovered === true && !inputState.isHovered) { + inputState.isHovered = true + } + + this.lastHovered = false + } + } + + private startScaling = (touchPosition: vec3) => { + this.lastTouch = touchPosition + this.state.scaling = true + this.frame.scalingSizeStart = this.frame.innerSize.uniformScale(1) + this.frame.onScalingStart.invoke() + } + + private setStateTranslating(isTranslating: boolean) { + if (isTranslating === this.state.translating) { + return + } + + this.state.translating = isTranslating + + this.state.translating + ? this.onTranslationStartEvent.invoke() + : this.onTranslationEndEvent.invoke() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts.meta new file mode 100644 index 00000000..e9a87ee6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/FrameInputHandler.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! fc8a63e6-ab4a-42a6-bbfa-3acd99a54fc7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! fc8a63e6-ab4a-42a6-bbfa-3acd99a54fc7 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 47831816-f086-44ad-bfcd-2571ee35e150 + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts new file mode 100644 index 00000000..6cb82950 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts @@ -0,0 +1,194 @@ +import {Interactable} from "../../../../Components/Interaction/Interactable/Interactable" +import {InteractorEvent} from "../../../../Core/Interactor/InteractorEvent" +import Event, {unsubscribe} from "../../../../Utils/Event" +import NativeLogger from "../../../../Utils/NativeLogger" +import StateMachine from "../../../../Utils/StateMachine" + +const TAG = "HoverBehavior" + +enum State { + Inactive = "Inactive", + InactiveToActive = "InactiveToActive", + Active = "Active", + ActiveToInactive = "ActiveToInactive", +} + +enum Signal { + RequestActive = "RequestActive", + RequestInActive = "RequestInActive", +} + +const STATE_CHANGE_DEBOUNCE_TIME_S = 0.05 // 50ms + +const DEBUG_MESSAGES = false + +/** + * Behavior for handling nested interactable hover events + */ +export class HoverBehavior { + private hoverStart = new Event() + public onHoverStart = this.hoverStart.publicApi() + + private hoverEnd = new Event() + public onHoverEnd = this.hoverEnd.publicApi() + + private hoverUpdate = new Event() + public onHoverUpdate = this.hoverUpdate.publicApi() + + private stateMachine = new StateMachine(this.name) + private isActive = false + private requestActive = false + + private eventData!: InteractorEvent + + private unsubscribeList: unsubscribe[] = [] + private isDestroyed: boolean = false + + private log = new NativeLogger(TAG) + + constructor( + private interactable: Interactable, + private name: string = "HoverBehavior" + ) { + this.setupStateMachine() + + this.bindHoverEvents() + + this.stateMachine.enterState(State.Inactive) + } + + destroy(): void { + this.log.d(`has been destroyed!`) + this.isDestroyed = true + this.unBindHoverEvents() + } + + private bindHoverEvents(): void { + this.unsubscribeList.push(this.interactable.onHoverEnter(this.onHoverEnter)) + this.unsubscribeList.push(this.interactable.onHoverExit(this.onHoverExit)) + this.unsubscribeList.push( + this.interactable.onHoverUpdate(this.onHoverUpdated) + ) + } + + private unBindHoverEvents(): void { + this.unsubscribeList.forEach((sub) => { + sub() + }) + this.unsubscribeList = [] + } + + private onHoverEnter = (eventData: InteractorEvent): void => { + this.requestActive = true + this.eventData = eventData + } + + private onHoverExit = (eventData: InteractorEvent): void => { + this.requestActive = false + this.eventData = eventData + } + + private onHoverUpdated = (eventData: InteractorEvent): void => { + this.eventData = eventData + } + + lateUpdate = (): void => { + if (this.isActive !== this.requestActive) { + if (DEBUG_MESSAGES) { + this.log.d(`container requested active state:${this.requestActive}`) + } + this.stateMachine.sendSignal( + this.requestActive ? Signal.RequestActive : Signal.RequestInActive + ) + } + + // Update actual state immediately + this.isActive = this.requestActive + } + + private setupStateMachine(): void { + // Inactive State + this.stateMachine.addState({ + name: State.Inactive, + onEnter: (state) => { + this.hoverEnd.invoke(this.eventData) + }, + transitions: [ + { + nextStateName: State.InactiveToActive, + checkOnSignal: (signal, data) => { + return signal === Signal.RequestActive + }, + }, + ], + }) + + // Inactive Transition State + this.stateMachine.addState({ + name: State.InactiveToActive, + transitions: [ + { + nextStateName: State.Inactive, + checkOnSignal: (signal, data) => { + return signal === Signal.RequestInActive + }, + }, + { + nextStateName: State.Active, + checkOnUpdate: (state) => { + return state.stateElapsedTime > STATE_CHANGE_DEBOUNCE_TIME_S + }, + }, + ], + }) + + // Active State + this.stateMachine.addState({ + name: State.Active, + onEnter: (state) => { + this.hoverStart.invoke(this.eventData) + }, + onUpdate: (state) => { + if (this.isDestroyed) { + this.log.d("Already destroyed!") + return + } + + try { + this.hoverUpdate.invoke(this.eventData) + } catch (e) { + // If we arrive here, the script is dead and will be cleaned up eventually + // Any calls that cross the native boundry could throw an exception + this.log.e("Error invoking hoverUpdate!") + } + }, + transitions: [ + { + nextStateName: State.ActiveToInactive, + checkOnSignal: (signal, data) => { + return signal === Signal.RequestInActive + }, + }, + ], + }) + + // Active Transition State + this.stateMachine.addState({ + name: State.ActiveToInactive, + transitions: [ + { + nextStateName: State.Inactive, + checkOnUpdate: (state) => { + return state.stateElapsedTime > STATE_CHANGE_DEBOUNCE_TIME_S + }, + }, + { + nextStateName: State.Active, + checkOnSignal: (signal, data) => { + return signal === Signal.RequestActive + }, + }, + ], + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts.meta new file mode 100644 index 00000000..8d291655 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/HoverBehavior.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 39c8b7df-5161-415a-9548-e9dd3cf41eb0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 39c8b7df-5161-415a-9548-e9dd3cf41eb0 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 96c78815-237f-43a6-9a83-279da2b5aeac + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts new file mode 100644 index 00000000..1ccd46a9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts @@ -0,0 +1,155 @@ +import {Interactable} from "../../../../Components/Interaction/Interactable/Interactable" +import {PinchButton} from "../../../../Components/UI/PinchButton/PinchButton" +import {InteractorEvent} from "../../../../Core/Interactor/InteractorEvent" +import Event, {PublicApi} from "../../../../Utils/Event" +import NativeLogger from "../../../../Utils/NativeLogger" +import {validate} from "../../../../Utils/validate" + +const log = new NativeLogger("LabeledPinchButton") + +export type LabeledPinchButtonOptions = { + parent: SceneObject + prefab: ObjectPrefab + labels: Texture[] + toggle?: boolean + defaultColor?: vec4 + hoverColor?: vec4 + triggerColor?: vec4 +} + +export class LabeledPinchButton { + defaultColor: vec4 = this.options.defaultColor || new vec4(0.5, 0.5, 0.5, 1) + hoverColor: vec4 = this.options.hoverColor || new vec4(0.9, 0.8, 0.2, 1) + triggerColor: vec4 = this.options.triggerColor || new vec4(0.8, 0.7, 0.2, 1) + private labeledPinchButtonPrefab: ObjectPrefab + object: SceneObject + private isToggle = this.options.toggle ?? false + toggled = false + private interactable: Interactable | null + private pinchButton: PinchButton | null + private triggerEvent: Event = new Event() + onTrigger: PublicApi = this.triggerEvent.publicApi() + + private colors: {[index: string]: vec4[]} = { + default: [this.defaultColor], + hover: [this.hoverColor], + trigger: [this.triggerColor], + } + + transform: Transform + alpha: number = 1 + private rmv: RenderMeshVisual + private material: Material + private baseAlpha: number + private labels = this.options.labels + private _labelIndex: number = 0 + + constructor(private options: LabeledPinchButtonOptions) { + this.labeledPinchButtonPrefab = options.prefab + this.object = this.labeledPinchButtonPrefab.instantiate(null) + this.interactable = this.object.getComponent(Interactable.getTypeName()) + this.pinchButton = this.object.getComponent(PinchButton.getTypeName()) + + validate(this.interactable) + validate(this.pinchButton) + + this.transform = this.object.getTransform() + + this.rmv = this.object.getComponent("Component.RenderMeshVisual") + this.material = this.rmv.mainMaterial.clone() + this.baseAlpha = this.material.mainPass.alpha as number + this.material.mainPass.icon = this.labels[this.labelIndex] + this.material.mainPass.hoverColor = this.hoverColor + this.material.mainPass.isToggle = this.isToggle ? 1 : 0 + + this.rmv.mainMaterial = this.material + this.object.setParent(this.options.parent) + + this.setupButtonTrigger() + + this.setColor("default") + + this.interactable.onHoverEnter.add(() => { + if (!this.toggled) { + this.setColor("hover") + } else { + this.material.mainPass.hovered = 1 + } + }) + this.interactable.onHoverExit.add(() => { + if (!this.isToggle) { + this.setColor("default") + } else { + if (this.toggled) { + this.setColor("trigger") + } else { + this.setColor("default") + } + } + this.material.mainPass.hovered = 0 + }) + } + + setRenderOrder = (newOrder: number) => { + this.rmv.setRenderOrder(newOrder) + } + + setAlpha = (alpha: number) => { + this.alpha = alpha + this.material.mainPass.alpha = this.baseAlpha * this.alpha + } + + setColor = (state: string) => { + const [color] = this.colors[state] + this.material.mainPass.baseColor = color + if (state === "trigger") { + this.material.mainPass.triggered = 1 + } else { + this.material.mainPass.triggered = 0 + } + } + + setTexture = (labelIndex: number) => { + this._labelIndex = labelIndex + this.material.mainPass.icon = this.labels[this._labelIndex] + } + + get labelIndex() { + return this._labelIndex + } + + private setupButtonTrigger = () => { + validate(this.interactable) + + let isTriggered = false + this.interactable.onTriggerStart.add((e: InteractorEvent) => { + e.stopPropagation() + this.setColor("trigger") + this.rmv.setBlendShapeWeight("Pinch", 1) + isTriggered = true + }) + this.interactable.onTriggerEnd.add((e: InteractorEvent) => { + e.stopPropagation() + this.rmv.setBlendShapeWeight("Pinch", 0) + if (isTriggered) { + this.triggerEvent.invoke() + if (!this.isToggle) { + this.setColor("hover") + } else { + if (!this.toggled) this.setColor("hover") + } + } + isTriggered = false + }) + this.interactable.onTriggerCanceled.add(() => { + this.rmv.setBlendShapeWeight("Pinch", 0) + isTriggered = false + }) + } + + setIconScale = (scale: vec2) => { + this.material.mainPass.iconScale = scale + } + + getInteractable = () => this.interactable +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts.meta new file mode 100644 index 00000000..ad5a8057 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/LabeledPinchButton.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 2caed9d2-942f-44c3-b753-c8ad5e32e022 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2caed9d2-942f-44c3-b753-c8ad5e32e022 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d36e98f5-ab77-49dc-a91d-652fc00ec938 + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts new file mode 100644 index 00000000..810d54b9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts @@ -0,0 +1,103 @@ +import NativeLogger from "../../../../../Utils/NativeLogger" +import WorldCameraFinderProvider from "../../../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {validate} from "../../../../../Utils/validate" + +const log = new NativeLogger("SimpleLODRMV") +const DEFAULT_SPACER = 50 + +/** + * This class provides a naive and simple Level Of Detail (LOD) implementation for RenderMeshVisual. It switches between different meshes based on the distance from the camera to the center of the object. The class does not support fading between meshes, but simply switches to the defined mesh at the specified depth. + * + * USAGE: + * - Drop this component onto a scene object. + * - Add meshes to the meshes array. + * - Select thresholds at the given index (or else it falls back to default). + * - Add the material that is shared across the RenderMeshVisuals. + */ +@component +export class SimpleLODRenderMeshVisual extends BaseScriptComponent { + @input() + meshes: RenderMesh[] = [] + @input() + thresholds: number[] = [] + @input() + material!: Material + + private rmvs: RenderMeshVisual[] = [] + private distances: number[] = [] + private object: SceneObject | undefined + private transform: Transform | undefined + private worldCamera: WorldCameraFinderProvider = + WorldCameraFinderProvider.getInstance() + private cameraTransform: Transform = this.worldCamera.getTransform() + private currentIndex: number = 0 + + onAwake() { + this.object = this.getSceneObject() + this.transform = this.object.getTransform() + const clonedMaterial = this.material.clone() + + for (let i = 0; i < this.meshes.length; i++) { + const distanceMesh = this.meshes[i] + const thisRMV = this.object.createComponent("RenderMeshVisual") + thisRMV.mesh = distanceMesh + thisRMV.mainMaterial = clonedMaterial + thisRMV.enabled = false + this.rmvs.push(thisRMV) + this.addDistance(this.thresholds[i] ? this.thresholds[i] : DEFAULT_SPACER) + } + + this.rmvs[this.currentIndex].enabled = true + + this.createEvent("UpdateEvent").bind(this.update) + } + + setRenderOrder = (order: number) => { + for (let i = 0; i < this.rmvs.length; i++) { + const thisRmv = this.rmvs[i] + thisRmv.setRenderOrder(order) + } + } + + addDistance = (distance: number) => { + let lastDistance = 0 + if (this.distances.length) { + lastDistance = this.distances[this.distances.length - 1] + } + + this.distances.push(distance + lastDistance) + } + + update = () => { + validate(this.transform) + // + // check and compare distances from camera + // + const currentDistanceSquared = this.cameraTransform + .getWorldPosition() + .distanceSquared(this.transform.getWorldPosition()) + let from = 0 + let thisIndex = 0 + let to + while (thisIndex < this.distances.length) { + to = this.distances[thisIndex] * this.distances[thisIndex] + if (currentDistanceSquared >= from && currentDistanceSquared < to) { + break + } else { + from = to + thisIndex += 1 + } + } + + // + // if at a new threshold, swap the active rmv + // + if (thisIndex < this.rmvs.length && this.currentIndex !== thisIndex) { + this.currentIndex = thisIndex + for (let rmv of this.rmvs) { + rmv.enabled = false + } + this.rmvs[this.currentIndex].enabled = true + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts.meta new file mode 100644 index 00000000..7ea6993b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SimpleLODRenderMeshVisual/SimpleLODRenderMeshVisual.ts.meta @@ -0,0 +1,46 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 641bbf2b-86e0-4512-81ce-2685a349a2c7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 641bbf2b-86e0-4512-81ce-2685a349a2c7 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! f9bebe37-b676-4133-8698-f5a9790a816a + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - "// @input Asset.RenderMesh[] meshes" + - "// @input float[] thresholds" + - // @input Asset.Material material + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + material: false + meshes: false + thresholds: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - meshes: ! + [] + material: ! 00000000-0000-0000-0000-000000000000 + thresholds: ! + [] + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SmoothFollow.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SmoothFollow.ts new file mode 100644 index 00000000..638a2b32 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SmoothFollow.ts @@ -0,0 +1,211 @@ +import {setTimeout} from "../../../../Utils/debounce" +import { + clamp, + DegToRad, + smoothDamp, + smoothDampAngle, +} from "../../../../Utils/mathUtils" +import {validate} from "../../../../Utils/validate" +import {ContainerFrame} from "../ContainerFrame" + +export class SmoothFollowOptions { + public frame: ContainerFrame + constructor(frame: ContainerFrame) { + this.frame = frame + } +} + +/** + * SmoothFollow is a body dynamic behavior which when applied to a scene object, + * makes it stay in the same relative horizontal position and distance to the + * user's field of view as they turn their head left and right and move around. + * It doesn't affect the positioning of the scene object when the user looks up + * and down or changes elevation. Interpolation is handled by a spring-damper + * in cylindrical coordinates. + */ +export class SmoothFollow { + private frame: ContainerFrame = this.options.frame + private mainCamera: Camera = this.frame.worldCamera + private cameraTransform: Transform = this.mainCamera.getTransform() + private transform: Transform | undefined = this.frame.parentTransform + private fieldOfView: number = 26 + private visibleWidth: number = 20 + private minDistance: number = 25 + private maxDistance: number = 110 + private minElevation: number = -40 + private maxElevation: number = 40 + private translationTime: number = 0.35 + private rotationTime: number = 0.55 + + private target: vec3 // cylindrical coords of where the follower wants to be + private velocity: vec3 // current velocity of follower in cylindrical space + private omega: number // current rotational velocity of the follower's heading + private heading: number // current direction the follower is facing in world space, with -z being 0 + private initialRot: quat // original orientation of the follower that the dynamic heading is applied to + private dragging: boolean // to reposition the follow position, the manipulator will turn this on then back off + + constructor(private options: SmoothFollowOptions) { + validate(this.transform) + + this.target = vec3.zero() + this.velocity = vec3.zero() + this.omega = 0 + this.heading = 0 + this.dragging = false + this.initialRot = this.transform.getLocalRotation() + this.heading = this.cameraHeading + + this.worldRot = quat + .angleAxis(this.heading, vec3.up()) + .multiply(this.initialRot) + this.resize( + this.frame.innerSize.x + + this.frame.border * 2 + + this.frame.constantPadding.x + ) + setTimeout(() => { + this.clampPosition() + }, 32) + } + + startDragging(): void { + this.dragging = true + } + + finishDragging(): void { + this.dragging = false + this.clampPosition() + } + + resize(visibleWidth: number): void { + this.visibleWidth = visibleWidth + this.clampPosition() + } + + private clampPosition(): void { + // the initial goal of the follower is whereever it is relative to the + // camera when the component gets enabled. the grab bar works by disabling + // this component when grabbed, and reenables it when let go. + + if (this.dragging) return // skip while actively scaling + + this.target = this.cartesianToCylindrical(this.worldToBody(this.worldPos)) + + this.target.z = clamp(this.target.z, this.minDistance, this.maxDistance) + this.target.z = Math.max( + this.target.z, + (1.1 * this.visibleWidth) / + 2 / + Math.tan((this.fieldOfView / 2) * DegToRad) + ) // handle very wide panels + this.target.y = clamp(this.target.y, this.minElevation, this.maxElevation) + const dist = new vec2(this.target.y, this.target.z).length + const halfFov = Math.atan( + (Math.tan((this.fieldOfView / 2) * DegToRad) * dist - + this.visibleWidth / 2) / + this.target.z + ) + this.target.x = clamp(this.target.x, -halfFov, halfFov) + this.velocity = vec3.zero() + this.omega = 0 + } + + onUpdate() { + if (!this.dragging) { + const pos = this.cartesianToCylindrical(this.worldToBody(this.worldPos)) + + // y is special because target elevation is leashed between a range of values, + // rather + ImportedAssetIds: + TypeScriptAsset: ! 43ab76e9-da0d-4d18-aaeb-c0abad190f9d + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 43ab76e9-da0d-4d18-aaeb-c0abad190f9d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 46e614b9-2a7b-43c5-b0dd-beeed28e1c06 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts new file mode 100644 index 00000000..70ee5115 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts @@ -0,0 +1,892 @@ +import {Interactable} from "../../../../Components/Interaction/Interactable/Interactable" +import {InteractableManipulation} from "../../../../Components/Interaction/InteractableManipulation/InteractableManipulation" +import {InteractorEvent} from "../../../../Core/Interactor/InteractorEvent" +import TrackedHand from "../../../../Providers/HandInputData/TrackedHand" +import animate, {CancelSet, mix} from "../../../../Utils/animate" +import {setTimeout} from "../../../../Utils/debounce" +import Event, {unsubscribe} from "../../../../Utils/Event" +import NativeLogger from "../../../../Utils/NativeLogger" + +import {InteractorInputType} from "../../../../Core/Interactor/Interactor" +import {HandInputData} from "../../../../Providers/HandInputData/HandInputData" +import {validate} from "../../../../Utils/validate" +import {ContainerFrame} from "../ContainerFrame" + +const TAG = "SnappableBehavior" +const log = new NativeLogger(TAG) + +export type SnappableOptions = { + frame: ContainerFrame + worldSnapping: boolean + itemSnapping: boolean +} + +// A variable for 'up' (but not exactly up) We can't have it be exactly up because when +// we do a cross to get our angles and our raycast result points straiught up we cross two +// vectors that are the same and it won't give us a sane result +const NOT_QUITE_UP = new vec3(0.0000001, 0.9999999, 0.0000001).normalize() + +/* + * Class for the snapping behavior of quickview items + * Specifically implemented for 2D content... so far! + * + */ + +export class SnappableBehavior { + stickyZoneSize: number = 1 + gutterSize: number = 4 + ghostMaterial: Material = requireAsset( + "../Materials/Ghost Material.mat" + ) as Material + snappableDebugDraw: boolean = false + private frame: ContainerFrame = this.options.frame + private frameTransform: Transform | undefined = this.frame + .getFrameObject() + ?.getTransform() + + private content: SceneObject | null = this.frame.getTargetObject() + private parent: SceneObject | null = this.content?.getParent() ?? null + private parentTransform: Transform | null = + this.parent?.getTransform() ?? null + private parentParent: SceneObject | null = this.parent + ? this.parent.getParent() + : null + private contentTransform: Transform | null = + this.content?.getTransform() ?? null + private contentPosition: vec3 | null = + this.contentTransform?.getWorldPosition() ?? null + private scale: vec3 | null = this.contentTransform?.getWorldScale() ?? null + + private frameSceneObject: SceneObject | null = + this.frame?.getFrameObject() ?? null + + private interactable: Interactable | null = + this.frame?.getInteractable() ?? null + private manipulate: InteractableManipulation | null = + this.frame?.getInteractableManipulation() ?? null + + private animationCancelSet = new CancelSet() + + private aspectRatio: number = 1 + private isAspectRatioSet: boolean = false + + get getAspectRatio(): number { + return this.aspectRatio + } + + private ghost: SceneObject = global.scene.createSceneObject("Ghost") + private ghostTransform: Transform = this.ghost.getTransform() + private ghostImageComponent: Image = this.ghost.createComponent("Image") + + private itemSnapping = this.options.itemSnapping + + private boundingBox: SceneObject = + global.scene.createSceneObject("boundingBox") + private boundingBoxTransform: Transform = this.boundingBox.getTransform() + private useConstantBoundingBoxPadding: boolean = true + + private snapTo: SceneObject | null = null + private snapPosition: vec3 = vec3.zero() + private colliderTransform: Transform | null = null + private colliderPosition: vec3 = vec3.zero() + private colliderRotation: quat = quat.quatIdentity() + private colliderScale: vec3 | null = vec3.zero() + private colliderAspectRatio: number = 1 + + private itemSnappingRange: boolean = false + private worldSnappingRange: boolean = false + isTweening: boolean = false + isActive: boolean = false + isEnabled: boolean = true + private isScaling: boolean = false + private wasScaling: boolean = false + + private scalingDebouncer: ReturnType | null = null + + private quatId: quat = quat.quatIdentity() + + private lastEvent: InteractorEvent | null = null + private tryingSnap: boolean = false + + private onSnappingComplete = new Event() + snappingComplete = () => this.onSnappingComplete.publicApi() + + private unSubscribeList: unsubscribe[] = [] + + private handInputData = HandInputData.getInstance() + private rightHand: TrackedHand = this.handInputData.getHand("right") + private leftHand: TrackedHand = this.handInputData.getHand("left") + + private worldQueryAsset: WorldQueryModule | null = null + private hitTestSession: HitTestSession | null = null + private useWorldQuery: boolean = false + + private queryBuffer: { + distance: number + hitPosition: vec3 + hitNormal: vec3 + }[] = [] + private queryBufferMaxLength: number = 20 + private lastIndexTipPosition: vec3 = vec3.zero() + private lastIndexForward: vec3 = vec3.forward() + private missedCount: number = 0 + private hitTestSessionStarted: boolean = false + private worldQueryTweenCancel: CancelSet = new CancelSet() + + constructor(private options: SnappableOptions) { + validate(this.parent) + validate(this.interactable) + validate(this.content) + validate(this.frame.renderOrder) + + if (options.worldSnapping) { + this.enableWorldSnapping(true) + } + + this.unSubscribeList.push( + this.interactable.onTriggerStart.add(this.onTriggerStart) + ) + this.unSubscribeList.push( + this.interactable.onTriggerEnd.add(this.onTriggerRelease) + ) + this.unSubscribeList.push( + this.interactable.onTriggerCanceled.add(this.onTriggerRelease) + ) + + const contentLocalScale = new vec3( + this.frame.innerSize.x + + this.frame.constantPadding.x + + this.frame.border * 2, + this.frame.innerSize.y + + this.frame.constantPadding.y + + this.frame.border * 2, + 1 + ) + + this.ghost.enabled = false + this.ghost.setParent(this.parent) + this.ghostTransform = this.ghost.getTransform() + this.ghostTransform.setLocalScale(contentLocalScale) + + this.ghostImageComponent.stretchMode = StretchMode.Stretch + this.ghostImageComponent.mainMaterial = this.ghostMaterial.clone() + const ghostAlpha = 0.33 + this.ghostImageComponent.mainMaterial.mainPass.baseColor.a = ghostAlpha + this.ghostImageComponent.mainPass.depthTest = true + this.ghostImageComponent.mainPass.depthWrite = true + this.ghostImageComponent.setRenderOrder(this.frame.renderOrder) + this.boundingBox.setParent(this.content) + this.boundingBox.layer = LayerSet.fromNumber(4) + + let boundingBoxFilter: Filter = Physics.Filter.create() as Filter + boundingBoxFilter.onlyLayers = this.boundingBox.layer + + let boundingBoxCollider: ColliderComponent = + this.boundingBox.createComponent("ColliderComponent") + const boxShape: BoxShape = Shape.createBoxShape() + if (!this.useConstantBoundingBoxPadding) { + // maximumDepthForBoundingBox + const maxBoxDepth = 40 + // amplifier for boxDepth + const boxDepthScalar = 0.4 + // amplifier for shapeSize + const shapeScalar = 1.34 + const frameWorldScale = new vec2( + this.frame.innerSize.x + + this.frame.constantPadding.x + + this.frame.border, + this.frame.innerSize.y + + this.frame.constantPadding.y + + this.frame.border + ) + const boxSize = Math.max(frameWorldScale.x, frameWorldScale.y) + const boxDepth = Math.max(Math.min(Math.max(boxSize, maxBoxDepth)), 1) + + this.boundingBoxTransform.setWorldScale( + new vec3( + frameWorldScale.x, + frameWorldScale.y, + boxDepth * boxDepthScalar + ) + ) + boxShape.size = vec3.one().uniformScale(shapeScalar) + } else { + boxShape.size = vec3.one() + } + boundingBoxCollider.shape = boxShape + boundingBoxCollider.filter = boundingBoxFilter as Filter + boundingBoxCollider.overlapFilter = boundingBoxFilter as Filter + boundingBoxCollider.debugDrawEnabled = this.snappableDebugDraw + + const onOverlapEnterEvent = boundingBoxCollider.onOverlapEnter.add( + this.checkItemOverlaps + ) + const onOverlapStayEvent = boundingBoxCollider.onOverlapStay.add( + this.checkItemOverlaps + ) + const onOverlapExitEvent = boundingBoxCollider.onOverlapExit.add( + this.onOverlapExit + ) + + this.unSubscribeList.push(() => { + boundingBoxCollider.onOverlapEnter.remove(onOverlapEnterEvent) + }) + this.unSubscribeList.push(() => { + boundingBoxCollider.onOverlapStay.remove(onOverlapStayEvent) + }) + this.unSubscribeList.push(() => { + boundingBoxCollider.onOverlapExit.remove(onOverlapExitEvent) + }) + + if (this.useConstantBoundingBoxPadding) { + this.unSubscribeList.push( + this.frame.onScalingUpdateEvent.add(this.scaleConstantBoundingBox) + ) + this.scaleConstantBoundingBox() + } + this.unSubscribeList.push( + this.frame.onScalingUpdateEvent.add(this.setAspectRatio) + ) + this.setAspectRatio() + } + + enableWorldSnapping = (enable: boolean) => { + if (enable) { + if (this.worldQueryAsset === null) { + this.worldQueryAsset = + require("LensStudio:WorldQueryModule") as WorldQueryModule + + const sessionOptions = HitTestSessionOptions.create() + sessionOptions.filter = true + this.hitTestSession = + this.worldQueryAsset.createHitTestSessionWithOptions(sessionOptions) + + // turn off until used + this.hitTestSession.stop() + } + } + this.useWorldQuery = enable + } + + enableItemSnapping = (enable: boolean) => { + this.itemSnapping = enable + } + + destroy(): void { + log.d("destroy") + this.abortTweening() + this.abortSnapping() + this.unSubscribeList.forEach((sub) => { + sub() + }) + } + + private scaleConstantBoundingBox = () => { + // the padding of the constant size added to the bounding box + const frameWorldScale = new vec2( + this.frame.innerSize.x + this.frame.constantPadding.x + this.frame.border, + this.frame.innerSize.y + this.frame.constantPadding.y + this.frame.border + ) + const boxPadding = 10 + const boxDepth = Math.max( + Math.min((Math.max(frameWorldScale.x, frameWorldScale.y), 40)), + 1 + ) + this.boundingBoxTransform.setWorldScale( + new vec3( + frameWorldScale.x + boxPadding, + frameWorldScale.y + boxPadding, + boxDepth + ) + ) + } + + private setActive = (val: boolean) => { + this.isActive = val + } + + private setTweening = (val: boolean) => { + this.isTweening = val + } + + setScaling = (val: boolean) => { + this.isScaling = val + } + + private deParent = () => { + if (this.parentParent && this.parent?.getParent() !== this.parentParent) { + this.parent?.setParentPreserveWorldTransform(this.parentParent) + } + if ( + this.parent && + !isNull(this.ghost) && + this.ghost.getParent() !== this.parent + ) { + this.ghost.setParentPreserveWorldTransform(this.parent) + } + } + + private abortTweening = () => { + this.animationCancelSet.cancel() + this.deParent() + this.setTweening(false) + } + + private setAspectRatio = () => { + // if not set + const scale = new vec2( + this.frame.innerSize.x + + this.frame.constantPadding.x + + this.frame.border * 2, + this.frame.innerSize.y + + this.frame.constantPadding.y + + this.frame.border * 2 + ) + this.aspectRatio = scale.x / scale.y + if (isNull(this.ghostImageComponent)) return // how is this null sometimes? + + if (this.aspectRatio > 1) { + scale.y *= this.aspectRatio + this.ghostImageComponent.mainMaterial.mainPass.boxSize = new vec2( + 0.5, + 0.5 / this.aspectRatio + ) + } else { + scale.x /= this.aspectRatio + this.ghostImageComponent.mainMaterial.mainPass.boxSize = new vec2( + 0.5 * this.aspectRatio, + 0.5 + ) + } + + this.ghostTransform.setWorldScale(new vec3(scale.x, scale.y, 1)) + } + + abortSnapping = () => { + this.setActive(false) + if (!isNull(this.ghost)) { + this.ghost.enabled = false + } + + this.isEnabled = false + this.itemSnappingRange = false + this.worldSnappingRange = false + } + + private onTriggerStart = (e: InteractorEvent) => { + if (e.propagationPhase !== "Target") return + if (this.isTweening) { + this.abortTweening() + } + + if (!this.isTweening && !this.isScaling && !this.isActive) { + this.setAspectRatio() + if (this.useWorldQuery) { + this.queryBuffer = [] + this.hitTestSession?.start() + this.hitTestSessionStarted = true + } + this.setActive(true) + } + + this.wasScaling = this.isScaling + } + + private onTriggerRelease = (e: InteractorEvent) => { + if (e.propagationPhase !== "Target") return + if (this.useWorldQuery && this.hitTestSessionStarted) { + this.hitTestSession?.stop() + this.hitTestSessionStarted = false + } + if (this.isActive && !this.isScaling && this.isEnabled) { + this.setActive(false) + this.ghost.enabled = false + if ( + this.snapTo && + this.itemSnappingRange && + !this.isTweening && + this.parent?.getParent() !== this.snapTo + ) { + this.setTweening(true) + this.itemSnappingRange = false + + this.parent?.setParentPreserveWorldTransform(this.snapTo) + + let startPosition = + this.parentTransform?.getLocalPosition() || vec3.zero() + animate({ + cancelSet: this.animationCancelSet, + duration: 0.15, + start: 0, + end: 1, + ended: this.tweenCompleted, + update: (t) => { + this.parentTransform?.setLocalPosition( + mix(startPosition, this.snapPosition, t) + ) + }, + }) + let startRot: quat = + this.parentTransform?.getWorldRotation() || quat.quatIdentity() + let endRot: quat = this.snapTo!.getTransform().getWorldRotation() + animate({ + cancelSet: this.animationCancelSet, + duration: 0.14, + start: 0, + end: 1, + update: (t) => { + this.parentTransform?.setWorldRotation(mix(startRot, endRot, t)) + }, + }) + } else if ( + this.parentTransform && + this.worldSnappingRange && + !this.isTweening + ) { + this.setTweening(true) + this.worldSnappingRange = false + + let startPosition = this.parentTransform?.getWorldPosition() + + if (startPosition === undefined) { + return + } + + animate({ + cancelSet: this.animationCancelSet, + duration: 0.15, + start: 0, + end: 1, + ended: this.tweenCompleted, + update: (t) => { + this.parentTransform?.setWorldPosition( + mix(startPosition, this.colliderPosition, t) + ) + }, + }) + const startRot: quat = this.parentTransform.getWorldRotation() + const endRot: quat = this.colliderRotation + animate({ + cancelSet: this.animationCancelSet, + duration: 0.14, + start: 0, + end: 1, + update: (t) => { + this.parentTransform?.setWorldRotation(mix(startRot, endRot, t)) + }, + }) + } + } + this.wasScaling = false + } + + private queryWorld = () => { + validate(this.parentTransform) + validate(this.frame.currentInteractor) + validate(this.hitTestSession) + + const rayLength = 300 + const containerPosition = this.parentTransform.getWorldPosition() + + let indexTipPos, indexForward + let thisHand = this.rightHand + if ( + this.frame.currentInteractor.inputType === InteractorInputType.RightHand + ) { + thisHand = this.rightHand + } else if ( + this.frame.currentInteractor.inputType === InteractorInputType.LeftHand + ) { + thisHand = this.leftHand + } + + if (thisHand.isTracked() && thisHand.indexTip) { + indexTipPos = thisHand.indexTip.position + this.lastIndexTipPosition = indexTipPos + indexForward = containerPosition.sub(indexTipPos).normalize() + this.lastIndexForward = indexForward + } else { + indexTipPos = this.lastIndexTipPosition + indexForward = this.lastIndexForward + } + + const endPos = indexTipPos.add(indexForward.uniformScale(rayLength)) + + if (this.hitTestSessionStarted) { + const hitTest = this.hitTestSession.hitTest( + indexTipPos, + endPos, + (hitResult) => { + if (hitResult === null) { + // log.d("No Point of Collision") + this.missedCount += 1 + return + } else { + const hitPosition: vec3 = hitResult.position + const hitNormal: vec3 = hitResult.normal + + const containerFromHit = + containerPosition.distanceSquared(hitPosition) + if (containerFromHit > 2500) { + // more than 25 away from world mesh too far away + this.missedCount += 1 + return + } + + const indexDistance = indexTipPos.distance(hitPosition) + if (hitPosition === vec3.zero()) { + this.missedCount += 1 + return + } + if (indexDistance < 20) { + // probably an error + this.missedCount += 1 + return + } + + this.queryBuffer.push({ + distance: indexDistance, + hitPosition: hitPosition, + hitNormal: hitNormal, + }) + + if (this.queryBuffer.length === this.queryBufferMaxLength) { + let sumDist = 0 + let sumPosition = vec3.zero() + let sumNormal = vec3.zero() + this.queryBuffer.forEach((queryObj, i) => { + sumDist += queryObj.distance + sumPosition = sumPosition.add(queryObj.hitPosition) + sumNormal = sumNormal.add(queryObj.hitNormal) + }) + const avgPositon = sumPosition.uniformScale( + 1 / this.queryBuffer.length + ) + const avgNormal = sumNormal.uniformScale( + 1 / this.queryBuffer.length + ) + + let toRotation: quat + if (avgNormal.y > 0.95) { + // log.d(`probably on the floor! or some`) + toRotation = quat.lookAt( + avgNormal, + this.frame.worldCamera.getTransform().back + ) + } else { + // log.d(`probably on something else?`) + toRotation = quat.lookAt(avgNormal, NOT_QUITE_UP) + } + + const ghostPos = this.ghostTransform.getWorldPosition() + const ghostRot = this.ghostTransform.getWorldRotation() + + if (this.worldQueryTweenCancel) this.worldQueryTweenCancel() + animate({ + duration: 0.05, + cancelSet: this.worldQueryTweenCancel, + update: (t) => { + this.ghostTransform.setWorldPosition( + vec3.lerp(ghostPos, avgPositon, t) + ) + this.ghostTransform.setWorldRotation( + quat.slerp(ghostRot, toRotation, t) + ) + }, + }) + + this.colliderPosition = avgPositon + this.colliderRotation = toRotation + this.colliderScale = this.scale + this.colliderAspectRatio = this.aspectRatio + this.worldSnappingRange = true + + this.queryBuffer.shift() + this.missedCount = 0 + } else { + this.worldSnappingRange = false + this.missedCount = 0 + } + } + } + ) + } + + if (this.missedCount >= 20) this.worldSnappingRange = false + } + + private calculateItemSnapping = () => { + validate(this.contentTransform) + validate(this.colliderScale) + + if (this.snapTo && this.ghost.getParent() !== this.snapTo) { + this.ghost.setParentPreserveWorldTransform(this.snapTo) + } + + this.contentPosition = this.contentTransform + .getWorldPosition() + .sub(this.colliderPosition) + + this.scale = this.contentTransform.getWorldScale() + + this.contentPosition = this.colliderRotation.multiplyVec3( + this.contentPosition + ) + + const snapToScalar = this.snapTo!.getTransform().getWorldScale() + + // assuming height of 1 + let halfThisImageScale = { + x: + (this.frame.innerSize.x * 0.5 + + this.frame.constantPadding.x * 0.5 + + this.frame.border) / + snapToScalar.x, + y: + (this.frame.innerSize.y * 0.5 + + this.frame.constantPadding.y * 0.5 + + this.frame.border) / + snapToScalar.y, + } + + let halfColliderImageScale = { + x: (this.colliderScale.x * 0.5) / snapToScalar.x, + y: (this.colliderScale.y * 0.5) / snapToScalar.y, + } + + let xOffset: number = 0 + let yOffset: number = 0 + + if (Math.abs(this.contentPosition.x) >= Math.abs(this.contentPosition.y)) { + // snap to left or right + xOffset = + halfColliderImageScale.x + + halfThisImageScale.x + + this.gutterSize / snapToScalar.x + if (this.contentPosition.x > 0) { + this.snapPosition.x = xOffset + } else { + this.snapPosition.x = -xOffset + } + + if (Math.abs(this.contentPosition.y) < this.stickyZoneSize) { + // in sticky center + this.snapPosition.y = 0 + } else if ( + Math.abs( + this.contentPosition.y + + halfThisImageScale.y - + halfColliderImageScale.y + ) < this.stickyZoneSize + ) { + // at top + this.snapPosition.y = halfColliderImageScale.y - halfThisImageScale.y + } else if ( + Math.abs( + this.contentPosition.y - + halfThisImageScale.y + + halfColliderImageScale.y + ) < this.stickyZoneSize + ) { + // at bottom + this.snapPosition.y = -halfColliderImageScale.y + halfThisImageScale.y + } else { + // sliding + this.snapPosition.y = this.contentPosition.y + } + + this.snapPosition.y /= snapToScalar.y + } else { + // snap to top or bottom + yOffset = + halfColliderImageScale.y + + halfThisImageScale.y + + this.gutterSize / snapToScalar.y + + if (this.contentPosition.y > 0) { + this.snapPosition.y = yOffset + } else { + this.snapPosition.y = -yOffset + } + + if (Math.abs(this.contentPosition.x) < this.stickyZoneSize) { + // in sticky center + this.snapPosition.x = 0 + } else if ( + Math.abs( + this.contentPosition.x + + halfThisImageScale.x - + halfColliderImageScale.x + ) < this.stickyZoneSize + ) { + // at right + this.snapPosition.x = halfColliderImageScale.x - halfThisImageScale.x + } else if ( + Math.abs( + this.contentPosition.x - + halfThisImageScale.x + + halfColliderImageScale.x + ) < this.stickyZoneSize + ) { + // at left + this.snapPosition.x = -halfColliderImageScale.x + halfThisImageScale.x + } else { + // sliding + this.snapPosition.x = this.contentPosition.x + } + + this.snapPosition.x /= snapToScalar.x + } + + this.snapPosition.z = 0 + + // scale snap positioning for local space w/in the collider + // this.snapPosition = this.snapPosition.div(this.colliderScale) + + // ghost temporarily parented to snapTo object + this.ghostTransform.setLocalRotation(this.quatId) + this.ghostTransform.setLocalPosition(this.snapPosition) + if (!this.ghost.enabled) this.ghost.enabled = true + } + + update = () => { + validate(this.content) + if ( + this.isActive && + !this.isScaling && + this.isEnabled && + !this.frame.isFollowing + ) { + if (this.itemSnappingRange) { + this.calculateItemSnapping() + } else if (this.useWorldQuery) { + this.queryWorld() + } else if (!this.worldSnappingRange) { + // if not in snapping range + if (!this.isTweening && this.content.getParent() !== this.parent) { + this.deParent() + } + if (this.ghost.enabled) this.ghost.enabled = false + } + // confirm ghost + if (this.worldSnappingRange) { + if (!this.ghost.enabled) this.ghost.enabled = true + } + } else { + if (this.ghost.enabled) this.ghost.enabled = false + if (!this.isTweening && this.content.getParent() !== this.parent) { + this.deParent() + } + } + if (this.tryingSnap) { + if (this.lastEvent) this.onTriggerRelease(this.lastEvent) + this.tryingSnap = false + this.lastEvent = null + } + + if (!this.worldSnappingRange && !this.itemSnappingRange) { + validate(this.frame.parentTransform) + if (this.ghost.enabled) this.ghost.enabled = false + this.ghostTransform.setWorldPosition( + this.frame.parentTransform.getWorldPosition() + ) + this.ghostTransform.setWorldRotation( + this.frame.parentTransform.getWorldRotation() + ) + } + } + + private checkItemOverlaps = (e: any) => { + this.lastEvent = e + if ( + this.isActive && + !this.isScaling && + !this.isTweening && + !this.frame.isFollowing && + this.itemSnapping && + this.isEnabled + ) { + let lastDistance = Infinity + for (let i = 0; i < e.currentOverlaps.length; i++) { + let overlap = e.currentOverlaps[i] + const colliderObject: SceneObject = overlap.collider + .getSceneObject() + .getParent() + .getParent() + // getParent of boundingBox + + const colliderFrameComponent = colliderObject.getComponent( + ContainerFrame.getTypeName() + ) + + validate(this.contentTransform) + + if (isNull(colliderFrameComponent)) { + continue + } + if ( + colliderFrameComponent!.isSnappingActive() || + colliderFrameComponent!.isSnappingTweening() + ) { + continue + } + if (colliderObject === this.parent) { + continue + } + this.colliderTransform = colliderObject.getTransform() + const thisColliderPosition: vec3 = + this.colliderTransform.getWorldPosition() + const thisDistance = thisColliderPosition.distanceSquared( + this.contentTransform.getWorldPosition() + ) + if (thisDistance < lastDistance) { + this.snapTo = overlap.collider.getSceneObject().getParent() + + this.colliderPosition = thisColliderPosition + + this.colliderScale = new vec3( + colliderFrameComponent!.innerSize.x + + colliderFrameComponent!.constantPadding.x + + colliderFrameComponent!.border * 2, + colliderFrameComponent!.innerSize.y + + colliderFrameComponent!.constantPadding.y + + colliderFrameComponent!.border * 2, + 1 + ) + + this.colliderAspectRatio = this.colliderScale.y / this.colliderScale.x + + this.colliderRotation = this.colliderTransform!.getWorldRotation() + this.colliderRotation.x *= -1 + this.colliderRotation.y *= -1 + this.colliderRotation.z *= -1 + + this.itemSnappingRange = true + lastDistance = thisDistance + } + } + } + } + + tryToSnap = () => { + this.setActive(true) + this.tryingSnap = true + if (this.lastEvent) { + this.checkItemOverlaps(this.lastEvent) + } + } + + private tweenCompleted = () => { + // deparent when tween complete + this.deParent() + this.setTweening(false) + this.onSnappingComplete.invoke() + } + + private onOverlapExit = (e: any) => { + if (e.currentOverlaps.length === 0) { + this.ghost.enabled = false + this.itemSnappingRange = false + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts.meta new file mode 100644 index 00000000..23e28602 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ContainerFrame/modules/SnappableBehavior.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! dccbc168-c044-4c7f-acbe-a4678b37cde1 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! dccbc168-c044-4c7f-acbe-a4678b37cde1 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 8b4343d5-30b6-435a-8e22-51f87a268101 + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts new file mode 100644 index 00000000..ed416c8a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts @@ -0,0 +1,70 @@ +import Event from "../../../Utils/Event" +import {Interactable} from "../../Interaction/Interactable/Interactable" +import {InteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import NativeLogger from "../../../Utils/NativeLogger" +import {createCallback} from "../../../Utils/InspectorCallbacks" + +const TAG = "PinchButton" + +/** + * This class provides basic pinch button functionality for the prefab pinch button. It is meant to be added to a Scene Object with an Interactable component, with visual behavior configured in the Lens Studio scene. + */ +@component +export class PinchButton extends BaseScriptComponent { + @input + @hint( + "Enable this to add functions from another script to this component's callback events", + ) + editEventCallbacks: boolean = false + @ui.group_start("On Button Pinched Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called when button is pinched") + @allowUndefined + private customFunctionForOnButtonPinched: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on button pinch", + ) + @allowUndefined + private onButtonPinchedFunctionNames: string[] = [] + @ui.group_end + private interactable: Interactable | null = null + + private onButtonPinchedEvent = new Event() + public readonly onButtonPinched = this.onButtonPinchedEvent.publicApi() + + // Native Logging + private log = new NativeLogger(TAG) + + onAwake(): void { + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName(), + ) + + this.createEvent("OnStartEvent").bind(() => { + if (!this.interactable) { + throw new Error( + "Pinch Button requires an Interactable Component on the same Scene object in order to work - please ensure one is added.", + ) + } + this.interactable.onTriggerEnd.add((interactorEvent: InteractorEvent) => { + try { + if (this.enabled) { + this.onButtonPinchedEvent.invoke(interactorEvent) + } + } catch (e) { + this.log.e("Error invoking onButtonPinchedEvent!") + } + }) + }) + if (this.editEventCallbacks && this.customFunctionForOnButtonPinched) { + this.onButtonPinched.add( + createCallback( + this.customFunctionForOnButtonPinched, + this.onButtonPinchedFunctionNames, + ), + ) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts.meta new file mode 100644 index 00000000..237c3aab --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/PinchButton/PinchButton.ts.meta @@ -0,0 +1,48 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3be08b13-299d-4e12-8eb2-81f6e6a74752 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + customFunctionForOnButtonPinched: false + editEventCallbacks: false + onButtonPinchedFunctionNames: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + - + {} + InputLines: + - "// @input bool editEventCallbacks {\"hint\":\"Enable this to add functions from another script to this component's callback events\"}" + - '// @ui {"widget":"group_start", "label":"On Button Pinched Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnButtonPinched {"hint":"The script containing functions to be called when button is pinched"}' + - '// @input string[] onButtonPinchedFunctionNames {"hint":"The names for the functions on the provided script, to be called on button pinch"}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts new file mode 100644 index 00000000..88647092 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts @@ -0,0 +1,332 @@ +import {ScrollView, ScrollViewEventArgs} from "../ScrollView/ScrollView" + +import {DragType} from "../../../Core/Interactor/Interactor" +import {DragInteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import NativeLogger from "../../../Utils/NativeLogger" +import {validate} from "../../../Utils/validate" +import {Interactable} from "../../Interaction/Interactable/Interactable" + +const TAG = "ScrollBar" + +/** + * This class represents a scrollbar component that can be used with a ScrollView. It manages the scrollbar's position, size, and interaction events. The class calculates the height offset to prevent the scrollbar mesh from extending past the canvas and integrates with the ScrollView to handle scrolling. + */ +@component +export class ScrollBar extends BaseScriptComponent { + private scrollView!: ScrollView + private scrollViewSceneObject!: SceneObject + + private scrollViewScreenTransform: ScreenTransform | undefined + + private interactable: Interactable | null = null + + private transform: Transform | undefined + + @input("Component.RenderMeshVisual") + @hint( + "The mesh visual of the scroll bar, used to calculate the height offset that should be used to prevent the mesh from extending past the canvas. This mesh will also be disabled whenever setting this component to disabled." + ) + @allowUndefined + private _scrollBarMeshVisual: RenderMeshVisual | null = null + + @input + @hint( + "How far (in cm) the top edge of the ScrollBar mesh should sit from the edge of the canvas when at the top of the content." + ) + private _boundingHeightOffset: number = 0 + + private boundingHeight: number = 0 + + private yOrigin: number = 0 + + private log = new NativeLogger(TAG) + + onAwake() { + this.transform = this.getSceneObject().getTransform() + + this.scrollView = this.findScrollView() + this.scrollViewSceneObject = this.scrollView.getSceneObject() + this.scrollViewScreenTransform = this.scrollViewSceneObject.getComponent( + "Component.ScreenTransform" + ) + + this.interactable = this.setupInteractable() + + this.boundingHeight = this.calculateBoundingHeight() + this.yOrigin = this.scrollViewSceneObject + .getTransform() + .getLocalPosition().y + + this.setupScrollViewCallbacks() + + this.reset() + } + + private setupInteractable() { + const interactable = this.getSceneObject().getComponent( + Interactable.getTypeName() + ) + + if (interactable === null) { + throw new Error("ScrollBar requires an interactable to function.") + } + + interactable.onDragStart((event) => { + if (event.interactor.dragType === DragType.Touchpad) { + this.touchpadDragUpdate(event) + } else { + this.sixDofDragUpdate(event) + } + }) + + interactable.onDragUpdate((event) => { + if (event.interactor.dragType === DragType.Touchpad) { + this.touchpadDragUpdate(event) + } else { + this.sixDofDragUpdate(event) + } + }) + + interactable.enableInstantDrag = true + + return interactable + } + + private setupScrollViewCallbacks() { + this.scrollView.onReady.add(() => { + this.reset() + }) + + this.scrollView.onScrollUpdate.add((event) => { + this.onScroll(event) + }) + + this.scrollView.onSnapUpdate.add((event) => { + this.onScroll(event) + }) + } + + private onScroll(event: ScrollViewEventArgs) { + validate(this.transform) + + // If there is no overflow, don't move ScrollBar at all. + if (!this.overflow || !this.scrollPercentage || this.overflow <= 0) { + return + } + + const position = this.transform.getLocalPosition() + position.y = + this.yOrigin + + MathUtils.lerp( + this.boundingHeight, + -this.boundingHeight, + this.scrollPercentage + ) + + this.transform.setLocalPosition(position) + } + + private calculateBoundingHeight() { + validate(this.scrollViewSceneObject) + + const scrollViewHeight = this.scrollView.scrollAreaSize.y + + /** + * aabbMax returns the maximum value along one side of an axis, unrotated/unscaled. + * If aabbMax.x = 10 units, then the actual x-length of the mesh (before scaling) is 20 units. + */ + let aabb = this.scrollBarMeshVisual?.mesh.aabbMax ?? vec3.zero() + + // In the case that the mesh is scaled/rotated, transform the AABB dimensions. + aabb = this.getTransform().getWorldScale().scale(aabb) + aabb = this.getSceneObject() + .getTransform() + .getWorldRotation() + .multiplyVec3(aabb) + + const localAabb = this.scrollViewSceneObject + .getTransform() + .getInvertedWorldTransform() + .multiplyDirection(aabb) + + const boundingHeight = + scrollViewHeight / 2 - localAabb.y - this.boundingHeightOffset + + if (boundingHeight <= 0) { + this.log.e( + `Bounding height of the ScrollBar is negative. Reduce the boundingHeightOffset parameter for proper ScrollBar behavior.` + ) + } + + return boundingHeight + } + + private touchpadDragUpdate(event: DragInteractorEvent) { + validate(this.scrollPercentage) + + const deltaY = event.dragVector.y + const newPercentage = + this.scrollPercentage - deltaY / (this.boundingHeight * 2) + + if (newPercentage < 0 || newPercentage > 1) { + this.scrollToEdge(newPercentage < 0) + return + } + + this.scrollView.scrollBy(new vec2(0, deltaY * this.scrollRatio)) + } + + private sixDofDragUpdate(event: DragInteractorEvent) { + validate(this.scrollViewScreenTransform) + validate(this.scrollPercentage) + + if ( + event.interactor.planecastPoint !== null && + event.planecastDragVector !== null + ) { + const newDragPoint = event.interactor.planecastPoint + const deltaY = this.localizeDragVector(event.planecastDragVector).y + + if ( + this.scrollViewScreenTransform.worldPointToLocalPoint(newDragPoint).y >= + 1 + ) { + this.scrollToEdge(true) + return + } + if ( + this.scrollViewScreenTransform.worldPointToLocalPoint(newDragPoint).y <= + -1 + ) { + this.scrollToEdge(false) + return + } + + const newPercentage = + this.scrollPercentage - deltaY / (this.boundingHeight * 2) + if (newPercentage < 0 || newPercentage > 1) { + this.scrollToEdge(newPercentage < 0) + return + } + + this.scrollView.scrollBy(new vec2(0, deltaY * this.scrollRatio)) + } + } + + private get scrollRatio() { + validate(this.overflow) + return -this.overflow / (this.boundingHeight * 2) + } + + private localizeDragVector(dragVector: vec3): vec2 { + validate(this.scrollViewSceneObject) + + const transform = this.scrollViewSceneObject.getTransform() + + const localXAxis = transform.getWorldRotation().multiplyVec3(vec3.right()) + + const localYAxis = transform.getWorldRotation().multiplyVec3(vec3.up()) + + const localizedX = localXAxis.dot(dragVector) / transform.getWorldScale().x + const localizedY = localYAxis.dot(dragVector) / transform.getWorldScale().y + + return new vec2(localizedX, localizedY) + } + + private scrollToEdge(topEdge: boolean) { + validate(this.scrollPercentage) + validate(this.overflow) + + const adjustedPercentage = topEdge + ? this.scrollPercentage + : -(1 - this.scrollPercentage) + + this.scrollView.scrollBy(new vec2(0, -adjustedPercentage * this.overflow)) + } + + // Search through the siblings of this SceneObject to allow for the script instantiation use case. + private findScrollView(): ScrollView { + const parent = this.getSceneObject().getParent() + const children = parent?.children ?? null + + if (children === null) { + throw new Error( + "Sibling SceneObject with ScrollView component not found. Ensure that the ScrollView owner is a sibling of the ScrollBar owner." + ) + } + + for (let child of children) { + const scrollView = child.getComponent(ScrollView.getTypeName()) + + if (scrollView !== null) { + return scrollView + } + } + + throw new Error( + "Sibling SceneObject with ScrollView component not found. Ensure that the ScrollView owner is a sibling of the ScrollBar owner." + ) + } + + get scrollPercentage(): number { + return this.scrollView.scrollPercentage + } + + get overflow(): number { + return this.scrollView.overflow + } + + get scrollBarMeshVisual(): RenderMeshVisual | null { + return this._scrollBarMeshVisual + } + + set scrollBarMeshVisual(mesh: RenderMeshVisual) { + this._scrollBarMeshVisual = mesh + this.boundingHeight = this.calculateBoundingHeight() + } + + /** + * @returns how far (in cm) the top edge of the ScrollBar mesh should sit from the edge of the canvas when at the top of the content. + */ + get boundingHeightOffset(): number { + return this._boundingHeightOffset + } + + /** + * Sets the offset between the top edge of the mesh and the edge of the canvas. + * @param offset - how far (in cm) the top edge of the ScrollBar mesh should sit from the edge of the canvas when at the top of the content. + */ + set boundingHeightOffset(offset: number) { + this._boundingHeightOffset = offset + this.boundingHeight = this.calculateBoundingHeight() + } + + get isEnabled(): boolean { + return this.scrollBarMeshVisual?.enabled ?? false + } + + set isEnabled(enabled: boolean) { + validate(this.scrollBarMeshVisual) + this.scrollBarMeshVisual.enabled = enabled + } + + reset(): void { + // If the ScrollView has not been found yet due to script execution ordering, then defer the reset for later. + if (!this.scrollView) { + return + } + validate(this.scrollViewSceneObject) + validate(this.transform) + + this.boundingHeight = this.calculateBoundingHeight() + + this.yOrigin = this.scrollViewSceneObject + .getTransform() + .getLocalPosition().y + + const position = this.transform.getLocalPosition() + position.y = this.yOrigin + this.boundingHeight + + this.transform.setLocalPosition(position) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts.meta new file mode 100644 index 00000000..db2672ba --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollBar/ScrollBar.ts.meta @@ -0,0 +1,42 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! fa215fa6-8275-4873-8338-75593ba0ff0f + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + - '// @input Component.RenderMeshVisual _scrollBarMeshVisual {"hint":"The mesh visual of the scroll bar, used to calculate the height offset that should be used to prevent the mesh from extending past the canvas. This mesh will also be disabled whenever setting this component to disabled."}' + - '// @input float _boundingHeightOffset {"hint":"How far (in cm) the top edge of the ScrollBar mesh should sit from the edge of the canvas when at the top of the content."}' + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _boundingHeightOffset: false + _scrollBarMeshVisual: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - _scrollBarMeshVisual: ! 00000000-0000-0000-0000-000000000000 + _boundingHeightOffset: ! 0.000000 + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts new file mode 100644 index 00000000..0bc972d6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts @@ -0,0 +1,22 @@ +/** + * This class is responsible for creating and positioning grid content items based on a specified prefab and item count. It instantiates the items and arranges them vertically with a specified offset. + */ +@component +export class GridContentCreator extends BaseScriptComponent { + @input + itemPrefab!: ObjectPrefab + @input + itemsCount: number = 10 + + onAwake(): void { + const yStart = 0 + const yOffset = -5.4 + + for (let i = 0; i < this.itemsCount; i++) { + const item = this.itemPrefab.instantiate(this.getSceneObject()) + const screenTransform = item.getComponent("Component.ScreenTransform") + screenTransform.offsets.setCenter(new vec2(0, yStart + yOffset * i)) + item.enabled = true + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts.meta new file mode 100644 index 00000000..034351f3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/GridContentCreator.ts.meta @@ -0,0 +1,42 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! ad83ff54-844d-49a8-9102-f568a9d291c3 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ad83ff54-844d-49a8-9102-f568a9d291c3 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b19882ca-9b04-44a9-ad31-aa2f7554889d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + itemPrefab: false + itemsCount: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - itemPrefab: ! 00000000-0000-0000-0000-000000000000 + itemsCount: ! 10.000000 + ScriptTypes: + - + {} + InputLines: + - // @input Asset.ObjectPrefab itemPrefab + - // @input float itemsCount = 10 + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts new file mode 100644 index 00000000..82a6ba18 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts @@ -0,0 +1,347 @@ +import { + DragInteractorEvent, + InteractorEvent, +} from "../../../Core/Interactor/InteractorEvent" +import NativeLogger from "../../../Utils/NativeLogger" + +import {InteractionManager} from "../../../Core/InteractionManager/InteractionManager" +import {InteractionConfigurationProvider} from "../../../Providers/InteractionConfigurationProvider/InteractionConfigurationProvider" +import Event, {PublicApi} from "../../../Utils/Event" +import {validate} from "../../../Utils/validate" +import View from "../../../Utils/views/View" +import {Interactable} from "../../Interaction/Interactable/Interactable" +import {ScreenTransformBoundariesProvider} from "./boundariesProvider/ScreenTransformBoundariesProvider" +import {ScrollViewFocusEventArgs} from "./ScrollView" + +const TAG = "ScrollArea" + +/** + * Defines the scroll area, a box collider that the user can interact with using + * an {@link Interactor}. The dragging events are exposed to be consumed in {@link ScrollView} + */ +export class ScrollArea extends View { + private interactionManager: InteractionManager = + InteractionManager.getInstance() + + private interactionConfigurationProvider: InteractionConfigurationProvider = + InteractionConfigurationProvider.getInstance() + + // Native Logging + private log = new NativeLogger(TAG) + + // Private + private parentScreenTransform: ScreenTransform + private screenTransform: ScreenTransform + private collider: ColliderComponent + private interactable: Interactable | null + private isDragging = false + private isFocused = false + + // Events + private onDragStartEvent = new Event() + readonly onDragStart = this.onDragStartEvent.publicApi() + + private onDragUpdateEvent = new Event() + readonly onDragUpdate = this.onDragUpdateEvent.publicApi() + + private onDragEndEvent = new Event() + readonly onDragEnd = this.onDragEndEvent.publicApi() + + private onFocusEnterEvent = new Event() + readonly onFocusEnter = this.onFocusEnterEvent.publicApi() + + private onFocusExitEvent = new Event() + readonly onFocusExit = this.onFocusExitEvent.publicApi() + + readonly onTriggerStart: PublicApi + readonly onTriggerEnd: PublicApi + readonly onTriggerCanceled: PublicApi + + // Readonly + private _boundariesProvider: ScreenTransformBoundariesProvider + + get boundariesProvider(): ScreenTransformBoundariesProvider { + return this._boundariesProvider + } + + constructor({ + debugDrawEnabled, + parentSceneObject, + scrollAreaBounds, + }: { + debugDrawEnabled: boolean + parentSceneObject: SceneObject + scrollAreaBounds: vec2 + }) { + super({name: TAG}) + this.attachToScene(parentSceneObject) + this.parentScreenTransform = parentSceneObject.getComponent( + "Component.ScreenTransform" + ) + + this.screenTransform = this.createScreenTransform(debugDrawEnabled) + this.collider = this.createCollider(debugDrawEnabled, scrollAreaBounds) + this.interactable = this.createInteractable() + this._boundariesProvider = new ScreenTransformBoundariesProvider( + this.container + ) + + this.onTriggerStart = this.interactable.onTriggerStart + this.onTriggerEnd = this.interactable.onTriggerEnd + this.onTriggerCanceled = this.interactable.onTriggerCanceled + } + + /** + * @returns if collider wire is visible or not + */ + get debugDrawEnabled(): boolean { + return this.collider.debugDrawEnabled + } + + /** + * Toggles collider wire rendering for visualizing collider geometry shape and where it is placed. + */ + set debugDrawEnabled(debugDrawEnabled: boolean) { + this.collider.debugDrawEnabled = debugDrawEnabled + this.screenTransform.enableDebugRendering = debugDrawEnabled + } + + private createScreenTransform( + enableDebugRendering: boolean + ): ScreenTransform { + const screenTransform = this.container.createComponent( + "Component.ScreenTransform" + ) + + screenTransform.enableDebugRendering = enableDebugRendering + screenTransform.anchors = Rect.create(-1, 1, -1, 1) + screenTransform.offsets = Rect.create(0, 0, 0, 0) + + return screenTransform + } + + private createColliderShape(scrollAreaBounds: vec2): BoxShape { + const shape = Shape.createBoxShape() + + const topLeftCorner = this.convertLocalUnitsToParentUnits( + new vec2(-scrollAreaBounds.x, scrollAreaBounds.y) + ) + const bottomRightCorner = this.convertLocalUnitsToParentUnits( + new vec2(scrollAreaBounds.x, -scrollAreaBounds.y) + ) + + shape.size = new vec3( + bottomRightCorner.x - topLeftCorner.x, + topLeftCorner.y - bottomRightCorner.y, + 1 + ) + + return shape + } + + /** + * @returns the collider's BoxShape's bounds. + */ + get scrollColliderBounds(): vec2 { + const boxShape: BoxShape = this.collider.shape as BoxShape + + return new vec2(boxShape.size.x, boxShape.size.y) + } + + /** + * @param scrollColliderBounds - the collider's BoxShape's bounds. + */ + set scrollColliderBounds(scrollColliderBounds: vec2) { + this.collider.shape = this.createColliderShape(scrollColliderBounds) + } + + private createCollider( + debugDrawEnabled: boolean, + scrollAreaBounds: vec2 + ): ColliderComponent { + const collider = this.container.createComponent("Physics.ColliderComponent") + collider.debugDrawEnabled = debugDrawEnabled + collider.fitVisual = false + collider.shape = this.createColliderShape(scrollAreaBounds) + + return collider + } + + private stopEventPropagationOnDragging(event: InteractorEvent) { + if (this.isDragging) { + event.stopPropagation() + } + } + + private stopEventPropagationOutsideScrollArea(event: InteractorEvent) { + if ( + event.interactor.targetHitPosition !== null && + !this.screenTransform.containsWorldPoint( + event.interactor.targetHitPosition + ) + ) { + event.stopPropagation() + } + } + + private createInteractable(): Interactable { + const interactable = this.parentScreenTransform + .getSceneObject() + .createComponent(Interactable.getTypeName()) + + validate( + interactable, + "Couldn't create an Interactable. Interactable typename is undefined." + ) + + // Hover + interactable.onHoverEnter.add((event) => { + validate(this.interactable) + + const planeIntersection = event.interactor.raycastPlaneIntersection( + this.interactable + ) + + const outsideScrollCanvas = + planeIntersection === null || + !this.screenTransform.containsWorldPoint(planeIntersection) + + if (!this.isFocused && !outsideScrollCanvas) { + this.isFocused = true + this.onFocusEnterEvent.invoke({ + position: planeIntersection, + }) + } else if (outsideScrollCanvas) { + this.isFocused = false + this.onFocusExitEvent.invoke({ + position: planeIntersection, + }) + } + }) + + interactable.onHoverUpdate.add((event) => { + validate(this.interactable) + + const planeIntersection = event.interactor.raycastPlaneIntersection( + this.interactable + ) + + const outsideScrollCanvas = + planeIntersection === null || + !this.screenTransform.containsWorldPoint(planeIntersection) + + if (this.isFocused && outsideScrollCanvas) { + this.isFocused = false + this.onFocusExitEvent.invoke({ + position: planeIntersection, + }) + } else if (!this.isFocused && !outsideScrollCanvas) { + this.isFocused = true + this.onFocusEnterEvent.invoke({ + position: planeIntersection, + }) + } + }) + + interactable.onHoverExit.add((event) => { + validate(this.interactable) + + const planeIntersection = event.interactor.raycastPlaneIntersection( + this.interactable + ) + + const outsideScrollCanvas = + planeIntersection === null || + !this.screenTransform.containsWorldPoint(planeIntersection) + + if (this.isFocused && outsideScrollCanvas) { + this.isFocused = false + this.onFocusExitEvent.invoke({ + position: planeIntersection, + }) + } + }) + + // Trigger + interactable.onTriggerStart.add((event) => { + this.stopEventPropagationOutsideScrollArea(event) + }) + interactable.onTriggerUpdate.add((event) => { + this.stopEventPropagationOutsideScrollArea(event) + this.stopEventPropagationOnDragging(event) + }) + interactable.onTriggerEnd.add((event) => { + this.stopEventPropagationOutsideScrollArea(event) + this.stopEventPropagationOnDragging(event) + }) + interactable.onTriggerCanceled.add((event) => { + this.stopEventPropagationOnDragging(event) + }) + + // Drag + interactable.onDragStart.add((event) => { + if ( + event.propagationPhase === "BubbleUp" || + event.propagationPhase === "Target" + ) { + this.isDragging = true + this.onDragStartEvent.invoke(event) + event.stopPropagation() + + this.interactionManager.dispatchEvent({ + interactor: event.interactor, + target: event.target, + eventName: "TriggerCanceled", + origin: interactable, + }) + } + }) + interactable.onDragUpdate.add((event) => { + if (this.isDragging) { + this.onDragUpdateEvent.invoke(event) + event.stopPropagation() + } + }) + interactable.onDragEnd.add((event) => { + if ( + event.propagationPhase === "TrickleDown" || + event.propagationPhase === "Target" + ) { + this.isDragging = false + this.onDragEndEvent.invoke(event) + event.stopPropagation() + } + }) + + interactable.isScrollable = true + interactable.enableInstantDrag = true + + return interactable + } + + /** + * Converts local units (-1 to 1) to parent units relative to the ScrollView canvas. + */ + private convertLocalUnitsToParentUnits(localUnits: vec2): vec2 { + const origin = this.parentScreenTransform.localPointToWorldPoint( + vec2.zero() + ) + const invertQuat = this.parentScreenTransform + .getSceneObject() + .getTransform() + .getWorldRotation() + .invert() + + const worldUnits = this.parentScreenTransform + .localPointToWorldPoint(localUnits) + .sub(origin) + + const localAxisAlignedUnits = invertQuat.multiplyVec3(worldUnits) + + const parentUnits = localAxisAlignedUnits.div( + this.parentScreenTransform.getTransform().getWorldScale() + ) + + return new vec2(parentUnits.x, parentUnits.y) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts.meta new file mode 100644 index 00000000..53603513 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollArea.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! e3636d41-21d9-41fa-8137-b6ffff295ad2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e3636d41-21d9-41fa-8137-b6ffff295ad2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 67063fdd-04e8-4b94-8cfa-efd567bee97c + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts new file mode 100644 index 00000000..7a08681b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts @@ -0,0 +1,702 @@ +import {CancelSet} from "../../../Utils/animate" +import { + EdgeSelector, + EdgeType, + ScrollView, + ScrollViewEventArgs, +} from "./ScrollView" + +import {InteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import Event from "../../../Utils/Event" +import {averageVec2, smoothDamp, smoothSlide} from "../../../Utils/mathUtils" +import {MovingAverageFilter} from "../../../Utils/MovingAverageFilter" +import {BufferedBoundariesProvider} from "./boundariesProvider/BufferedBoundariesProvider" +import {SceneObjectBoundariesProvider} from "./boundariesProvider/SceneObjectBoundariesProvider" + +const TAG = "ScrollProvider" + +export type ScrollProviderConfig = { + scrollArea: SceneObjectBoundariesProvider + enableScrollInertia: boolean + enableScrollLimit: boolean + scrollLimit: number + enableHorizontalScroll: boolean + enableVerticalScroll: boolean + scrollView: ScrollView + screenTransform: ScreenTransform + updateEvent: UpdateEvent +} + +const VELOCITY_WINDOW_SIZE = 10 + +const DECELERATE_TIME = 2.0 +// The minimum speed to keep moving the content during update frames. +const DECELERATE_MIN_SPEED = 1 + +const ELASTIC_TIME = 0.4 +// The minimum distance from content edge to keep moving the content during update frames. +const ELASTIC_MIN_DISTANCE = 0.05 + +/** + * Describes the scrolling logic between the content and the container + */ +export class ScrollProvider { + private onScrollUpdateEvent = new Event() + readonly onScrollUpdate = this.onScrollUpdateEvent.publicApi() + + private onSnapUpdateEvent = new Event() + readonly onSnapUpdate = this.onSnapUpdateEvent.publicApi() + + private onReadyEvent = new Event() + readonly onReady = this.onReadyEvent.publicApi() + + private content!: SceneObjectBoundariesProvider + private contentScrollLimit!: BufferedBoundariesProvider + private scrollArea = this.config.scrollArea + private scrollView = this.config.scrollView + + private cancelSet = new CancelSet() + + private isXOverflow = false + private isYOverflow = false + + private _enableScrollInertia: boolean + private dragVelocity: vec2 = vec2.zero() + private inertiaVelocity: vec2 = vec2.zero() + + private dragVelocityFilter = new MovingAverageFilter( + VELOCITY_WINDOW_SIZE, + vec2.zero, + averageVec2 + ) + + private decelerateTime = DECELERATE_TIME + private decelerateMinSpeed = DECELERATE_MIN_SPEED + + private elasticTime = ELASTIC_TIME + private elasticMinDistance = ELASTIC_MIN_DISTANCE + + private _scrollLimit: number + private enableScrollLimit: boolean + + private _contentLength: number = 0 + private contentOrigin = vec2.zero() + + private isGrabbed: boolean = false + + constructor(private config: ScrollProviderConfig) { + this._enableScrollInertia = config.enableScrollInertia + + this._scrollLimit = config.scrollLimit + this.enableScrollLimit = config.enableScrollLimit + + this.onReady.add(() => { + // Don't start updating until the content is ready, as the content is required for the update logic. + this.config.updateEvent.bind((event) => { + this.update() + }) + }) + } + + /** + * @returns if this class is ready to be used, which means + * that content is set + */ + get isReady(): boolean { + return this.content !== undefined + } + + /** + * @returns if the ScrollView will continue scrolling on release + */ + get enableScrollInertia(): boolean { + return this._enableScrollInertia + } + + /** + * Toggles if the ScrollView should continue scrolling on release + */ + set enableScrollInertia(enableScrollInertia: boolean) { + this._enableScrollInertia = enableScrollInertia + } + + /** + * @returns what amount of the scroll area should always be occupied + */ + get scrollLimit(): number { + return this._scrollLimit + } + + /** + * Sets the amount of the scroll area should always be occupied + */ + set scrollLimit(limit: number) { + this._scrollLimit = limit + } + + /** + * @returns the content position in local space + */ + get contentPosition(): vec3 { + return this.content.position + } + + /** + * Sets the position of the content in local space + */ + set contentPosition(position: vec3) { + this.content.position = position + } + + /** + * @returns the content length along the Y-axis + */ + get contentLength(): number { + return this._contentLength + } + + /** + * Sets the true length of the content in the case of pooling / other non-default use cases + */ + set contentLength(length: number) { + this._contentLength = length + } + + /** + * Resets the content origin for the purpose of calculating scrollPercentage. + * Assumes that the ScrollView is currently at the top of content in the pooling use case. + */ + resetContentOrigin() { + const originOffset = this.getOffsetToEdge({x: -1, y: 1, type: "Content"}) + this.contentOrigin = new vec2( + this.contentPosition.x + originOffset.x, + this.contentPosition.y + originOffset.y + ) + } + + get overflow() { + const scrollAreaSize = this.convertLocalUnitsToParentUnits( + this.scrollArea.size + ) + + const scrollViewHeight = scrollAreaSize.y + return this.contentLength - scrollViewHeight + } + + get scrollPercentage() { + const scrollPercentage = + MathUtils.clamp( + -this.contentOrigin.y + this.contentPosition.y, + 0, + this.overflow + ) / this.overflow + + return scrollPercentage + } + + onGrabStart(event: InteractorEvent) { + this.dragVelocityFilter.clear() + this.isGrabbed = true + this.dragVelocity = vec2.zero() + } + + onGrabEnd(event: InteractorEvent) { + this.isGrabbed = false + this.updateInertiaVelocity() + this.dragVelocity = vec2.zero() + } + + /** + * Sets scroll content. Should be called only one time to initialize the content + * and binds to onStartEvent. + * @param content - defines content boundaries + */ + setContent(content: SceneObjectBoundariesProvider): void { + if (this.content !== undefined) { + throw new Error("Content is already initialized in ScrollProvider.") + } + + this.content = content + this.contentScrollLimit = new BufferedBoundariesProvider( + this.content, + Rect.create(0, 0, 0, 0) + ) + this.recomputeBoundaries() + + // Sometimes this will be called after the user instantiates the ScrollView and sets the contentLength, so we ensure that prior values are respected. + if (this.contentLength === 0) { + this.contentLength = this.convertLocalUnitsToParentUnits( + this.content.size + ).y + } + + this.onReadyEvent.invoke() + } + + /** + * Recomputes content and scroll area boundaries + */ + recomputeBoundaries(): void { + this.content.recomputeStartingBoundaries() + this.scrollArea.recomputeStartingBoundaries() + + const scrollAreaSize = this.scrollArea.boundaries.getSize() + const invertedLimit = 1.0 - this.scrollLimit + this.contentScrollLimit.buffer = Rect.create( + invertedLimit * scrollAreaSize.x, + invertedLimit * scrollAreaSize.x, + invertedLimit * scrollAreaSize.y, + invertedLimit * scrollAreaSize.y + ) + + this.isYOverflow = this.scrollArea.size.y < this.content.size.y + this.isXOverflow = this.scrollArea.size.x < this.content.size.x + } + + /** + * Scrolls content according to a drag vector, along the enabled axis + * @param dragVector - 2D vector to move the content + */ + scrollBy(dragVector: vec2): void { + if (this.isGrabbed && getDeltaTime() === 0) { + return + } + + let deltaX = + this.scrollView.enableHorizontalScroll && this.isXOverflow + ? dragVector.x + : 0 + let deltaY = + this.scrollView.enableVerticalScroll && this.isYOverflow + ? dragVector.y + : 0 + + this.content.position = this.content.position.add( + new vec3(deltaX, deltaY, 0) + ) + + if (this.enableScrollLimit && this.isEdgeInsideScrollArea("ScrollLimit")) { + this.limitToEdgeInstantly("ScrollLimit") + this.dragVelocity = vec2.zero() + } else if (this.isGrabbed) { + const rawVelocity = new vec2(deltaX, deltaY).uniformScale( + 1 / getDeltaTime() + ) + + this.dragVelocity = this.dragVelocityFilter.filter(rawVelocity, getTime()) + + // If the filtered drag velocity is not the same direction as the current frame's delta, negate the delta to avoid hooking. + if (Math.sign(this.dragVelocity.x) !== Math.sign(deltaX)) { + this.content.position = this.content.position.add( + new vec3(-deltaX, 0, 0) + ) + } + if (Math.sign(this.dragVelocity.y) !== Math.sign(deltaY)) { + this.content.position = this.content.position.add( + new vec3(0, -deltaY, 0) + ) + } + } + + this.onScrollUpdateEvent.invoke({ + contentPosition: new vec2( + this.content.position.x, + this.content.position.y + ), + }) + } + + /** + * Snaps content to the selected edges + * @param selectedEdges - Struct that describes the selected edge as an {@link EdgeSelector} + */ + snapToEdges(selectedEdges: EdgeSelector): void { + this.content.position = this.content.position.add( + this.getOffsetToEdge(selectedEdges) + ) + } + + /** + * Checks if both inputted content edges are fully visible in the ScrollArea. + * @param xEdge - 0 if not checking any x-axis edge, 1 for right edge, -1 for left edge. + * @param yEdge - 0 if not checking any y-axis edge, 1 for top edge, -1 for bottom edge. + */ + checkContentEdgeFullyVisible(xEdge: 0 | 1 | -1, yEdge: 0 | 1 | -1): boolean { + let visible = true + + const contentOffset = this.contentOffset + + if (xEdge !== 0) { + if (xEdge === 1) { + visible = visible && contentOffset.right >= 0 + } else if (yEdge === -1) { + visible = visible && contentOffset.left <= 0 + } + } + + if (yEdge !== 0) { + if (yEdge === 1) { + visible = visible && contentOffset.top >= 0 + } else if (yEdge === -1) { + visible = visible && contentOffset.bottom <= 0 + } + } + + return visible + } + + private offsetBetween(a: Rect, b: Rect): Rect { + return Rect.create( + a.left - b.left, + a.right - b.right, + a.bottom - b.bottom, + a.top - b.top + ) + } + + get contentOffset(): Rect { + return this.offsetBetween( + this.scrollArea.boundaries, + this.content.boundaries + ) + } + + get scrollLimitOffset(): Rect { + return this.offsetBetween( + this.scrollArea.boundaries, + this.contentScrollLimit.boundaries + ) + } + + // Simulates physics (velocity upon release, friction, elasticity when past edge) when the user is not grabbing the ScrollView. + private update() { + if (this.isGrabbed || getDeltaTime() === 0) { + return + } + + const initialEdgeSelector = this.selectEdgesInsideScrollArea("Content") + if ( + this.inertiaVelocity.equal(vec2.zero()) && + initialEdgeSelector.x === 0 && + initialEdgeSelector.y === 0 + ) { + return + } + + const deltaTime = getDeltaTime() + + let currentPosition = this.content.position + let currentVelocity = this.inertiaVelocity + + // Apply friction to decelerate the contents post-interaction. + const frictionResults = this.applyFriction( + currentPosition, + currentVelocity, + this.decelerateTime, + deltaTime + ) + + currentPosition = frictionResults[0] + currentVelocity = frictionResults[1] + + this.content.position = currentPosition + + // Ensure that the content does not exceed the scroll limit boundaries, zeroing out the velocity if reaching the limit. + if (this.enableScrollLimit && this.isEdgeInsideScrollArea("ScrollLimit")) { + this.limitToEdgeInstantly("ScrollLimit") + currentPosition = this.content.position + currentVelocity = vec2.zero() + } + + // Apply elasticity to return the contents within the boundaries. + const elasticityResults = this.applyElasticity( + currentPosition, + currentVelocity, + this.elasticTime, + deltaTime + ) + + currentPosition = elasticityResults[0] + currentVelocity = elasticityResults[1] + + this.content.position = currentPosition + + // If the content is within the ScrollArea boundaries and has a low enough velocity, stop moving the contents to reduce update cost. + let currentEdgeSelector = this.selectEdgesInsideScrollArea("Content") + if ( + currentEdgeSelector.x === 0 && + Math.abs(this.inertiaVelocity.x) < this.decelerateMinSpeed + ) { + currentVelocity.x = 0 + } + if ( + currentEdgeSelector.y === 0 && + Math.abs(this.inertiaVelocity.y) < this.decelerateMinSpeed + ) { + currentVelocity.y = 0 + } + + this.inertiaVelocity = currentVelocity + + this.onScrollUpdateEvent.invoke({ + contentPosition: new vec2( + this.content.position.x, + this.content.position.y + ), + }) + } + + /** + * If there is a edge of the given type inside the scroll area, instantly snap to the edge. + * @param edgeType The type of edge to snap to. + */ + private limitToEdgeInstantly(edgeType: EdgeType): void { + const snapEdges: EdgeSelector = this.selectEdgesInsideScrollArea(edgeType) + const targetPositionOffset = this.getOffsetToEdge(snapEdges) + this.content.position = this.content.position.add(targetPositionOffset) + } + + /** + * Returns true if any edge of the given type is inside the scroll region, as long as the content is + * large enough in that dimension to be scrollable. + * @param edgeType the type of edge to check for + */ + private isEdgeInsideScrollArea(edgeType: EdgeType) { + const edgesInsideScrollArea = this.selectEdgesInsideScrollArea(edgeType) + return ( + (this.isXOverflow && edgesInsideScrollArea.x !== 0) || + (this.isYOverflow && edgesInsideScrollArea.y !== 0) + ) + } + + private selectEdgesInsideScrollArea(edgeType: EdgeType): EdgeSelector { + const snapEdges: EdgeSelector = {x: 0, y: 0, type: edgeType} + const offset = + edgeType === "Content" ? this.contentOffset : this.scrollLimitOffset + + /** + * only try to snap if there is an overflow in the x dimension + */ + if (this.isXOverflow) { + if (offset.left < 0) { + /* + * if left border inside the scroll area, + * snap to left side + */ + snapEdges.x = -1 + } else if (offset.right > 0) { + /* + * if right border inside the scroll area, + * snap to right side + */ + snapEdges.x = 1 + } + } + + /** + * only try to snap if there is an overflow in the y dimension + */ + if (this.isYOverflow) { + if (offset.top > 0) { + /* + * if top border inside the scroll area, + * snap to top side + */ + snapEdges.y = 1 + } else if (offset.bottom < 0) { + /* + * if bottom border inside the scroll area, + * snap to bottom side + */ + snapEdges.y = -1 + } + } + + return snapEdges + } + + private getOffsetToEdge(selectedEdges: EdgeSelector): vec3 { + const offset = + selectedEdges.type === "Content" + ? this.contentOffset + : this.scrollLimitOffset + + const targetPositionOffset = vec2.zero() + if (selectedEdges.x === -1) { + targetPositionOffset.x = offset.left + } else if (selectedEdges.x === 1) { + targetPositionOffset.x = offset.right + } + + if (selectedEdges.y === 1) { + targetPositionOffset.y = offset.top + } else if (selectedEdges.y === -1) { + targetPositionOffset.y = offset.bottom + } + + const worldUnitOffset = + this.convertLocalUnitsToParentUnits(targetPositionOffset) + + return new vec3(worldUnitOffset.x, worldUnitOffset.y, 0) + } + + private updateInertiaVelocity() { + let newInertiaVelocity = vec2.zero() + + if (Math.sign(this.dragVelocity.x) === Math.sign(this.inertiaVelocity.x)) { + newInertiaVelocity.x = this.dragVelocity.x + this.inertiaVelocity.x + } else { + newInertiaVelocity.x = this.dragVelocity.x + } + + if (Math.sign(this.dragVelocity.y) === Math.sign(this.inertiaVelocity.y)) { + newInertiaVelocity.y = this.dragVelocity.y + this.inertiaVelocity.y + } else { + newInertiaVelocity.y = this.dragVelocity.y + } + + this.inertiaVelocity = newInertiaVelocity + } + + private applyFriction( + position: vec3, + velocity: vec2, + decelerateTime: number, + deltaTime: number + ): [vec3, vec2] { + const edgeSelector = this.selectEdgesInsideScrollArea("Content") + + // If the content is within the X-axis bounds, move the contents along the X-axis and apply friction. + if (this.scrollView.enableHorizontalScroll && edgeSelector.x === 0) { + const smoothResults = smoothSlide( + position.x, + velocity.x, + decelerateTime, + deltaTime + ) + position.x = smoothResults[0] + velocity.x = smoothResults[1] + } + + // If the content is within the Y-axis bounds, move the contents along the Y-axis and apply friction. + if (this.scrollView.enableVerticalScroll && edgeSelector.y === 0) { + const smoothResults = smoothSlide( + position.y, + velocity.y, + decelerateTime, + deltaTime + ) + position.y = smoothResults[0] + velocity.y = smoothResults[1] + } + + return [position, velocity] + } + + private applyElasticity( + position: vec3, + velocity: vec2, + elasticTime: number, + deltaTime: number + ): [vec3, vec2] { + const edgeSelector = this.selectEdgesInsideScrollArea("Content") + const contentOffset = this.getOffsetToEdge(edgeSelector) + + // If the content is past the X-axis bounds, return the content closer to the boundary. + if (this.scrollView.enableHorizontalScroll && edgeSelector.x !== 0) { + const contentLimitX = position.x + contentOffset.x + + const smoothResults = smoothDamp( + position.x, + contentLimitX, + velocity.x, + elasticTime, + deltaTime + ) + position.x = smoothResults[0] + velocity.x = smoothResults[1] + + // If the content is close enough to the bounds, place the content exactly on the boundary to reduce update cost. + if (Math.abs(position.x - contentLimitX) < this.elasticMinDistance) { + position.x = contentLimitX + velocity.x = 0 + } + } + + // If the content is past the Y-axis bounds, return the content closer to the boundary. + if (this.scrollView.enableVerticalScroll && edgeSelector.y !== 0) { + const contentLimitY = position.y + contentOffset.y + + const smoothResults = smoothDamp( + position.y, + contentLimitY, + velocity.y, + elasticTime, + deltaTime + ) + position.y = smoothResults[0] + velocity.y = smoothResults[1] + + // If the content is close enough to the bounds, place the content exactly on the boundary to reduce update cost. + if (Math.abs(position.y - contentLimitY) < this.elasticMinDistance) { + position.y = contentLimitY + velocity.y = 0 + } + } + + return [position, velocity] + } + + /** + * Converts the offset (normalized -1 to 1) to local units relative to the ScrollView canvas. + */ + public convertLocalOffsetToParentOffset(offset: Rect): Rect { + const bottomLeftCorner = new vec2(offset.left, offset.bottom) + const topRightCorner = new vec2(offset.right, offset.top) + + const bottomLeftOffsetWorld = + this.convertLocalUnitsToParentUnits(bottomLeftCorner) + const topRightOffsetWorld = + this.convertLocalUnitsToParentUnits(topRightCorner) + + return Rect.create( + bottomLeftOffsetWorld.x, + topRightOffsetWorld.x, + bottomLeftOffsetWorld.y, + topRightOffsetWorld.y + ) + } + + /** + * Converts local units (normalized -1 to 1) to world units relative to the ScrollView canvas. + */ + private convertLocalUnitsToWorldUnits(localUnits: vec2): vec2 { + const origin = this.config.screenTransform.localPointToWorldPoint( + vec2.zero() + ) + + const invertQuat = this.config.screenTransform + .getSceneObject() + .getTransform() + .getWorldRotation() + .invert() + + const worldUnits = invertQuat.multiplyVec3( + this.config.screenTransform.localPointToWorldPoint(localUnits).sub(origin) + ) + + return new vec2(worldUnits.x, worldUnits.y) + } + + /** + * Converts local units (-1 to 1) to parent units relative to the ScrollView canvas. + */ + public convertLocalUnitsToParentUnits(localUnits: vec2): vec2 { + const worldUnits = this.convertLocalUnitsToWorldUnits(localUnits) + const worldScale = this.config.screenTransform + .getTransform() + .getWorldScale() + + return new vec2(worldUnits.x / worldScale.x, worldUnits.y / worldScale.y) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts.meta new file mode 100644 index 00000000..b9aedf77 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! ca94ec7a-c84b-4714-9d67-3c54a14aca99 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ca94ec7a-c84b-4714-9d67-3c54a14aca99 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 86a5ca1a-4075-48b3-9f10-a695e348ed2e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts new file mode 100644 index 00000000..d3878712 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts @@ -0,0 +1,420 @@ +import {DragInteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import {InteractorInputType} from "../../../Core/Interactor/Interactor" +import {MobileInteractor} from "../../../Core/MobileInteractor/MobileInteractor" +import NativeLogger from "../../../Utils/NativeLogger" +import {SceneObjectBoundariesProvider} from "./boundariesProvider/SceneObjectBoundariesProvider" +import {ScrollArea} from "./ScrollArea" +import {ScrollProvider} from "./ScrollProvider" +import {VisualBoundariesProvider} from "./boundariesProvider/VisualBoundariesProvider" + +export const AXIS_DIRECTION = [-1, 0, 1] as const +export type AxisDirection = (typeof AXIS_DIRECTION)[number] + +export const EDGE_TYPE = ["Content", "ScrollLimit"] as const +export type EdgeType = (typeof EDGE_TYPE)[number] + +/** + * Describes the selected edge as {x, y}, specifically: + * (top-left, top-right, bottom-left, bottom-right, top, left, right, bottom) + */ +export type EdgeSelector = { + /** + * Selects the x axis direction (left = -1, none = 0, right = 1) + */ + x: AxisDirection + + /** + * Selects the y axis direction (bottom = -1, none = 0, top = 1) + */ + y: AxisDirection + + /** + * Which type of edge to snap to (Content = The edges of the content, ScrollLimit = The edges of the scrollable region) + */ + type: EdgeType +} + +/** + * Base argument used for ScrollView events + */ +export type ScrollViewEventArgs = { + /** + * Position of the content in world units relative to the parent's center + */ + contentPosition: vec2 +} + +/** + * Base argument used for ScrollView events + */ +export type ScrollViewFocusEventArgs = { + /** + * The position of where the interactor entered or exited the scroll area. + */ + position: vec3 | null +} + +const TAG = "ScrollView" + +/** + * ScrollView will have two children: + * - the content wrapper: created by ScrollView user + * - scroll area: implemented internally by ScrollView + * and not exposed to the user. + * + * To avoid issues related to + * initialization order, we check the number of children + * on StartEvent + */ +const EXPECTED_CHILDREN_COUNT = 2 + +/** + * This class is responsible for creating and positioning grid content items based on a specified prefab and item count. It instantiates the items and arranges them vertically with a specified offset. + */ +@component +export class ScrollView extends BaseScriptComponent { + // Native Logging + private log = new NativeLogger(TAG) + + private scrollArea!: ScrollArea + private scrollProvider!: ScrollProvider + private mask!: MaskingComponent + + // Initialized on start + private contentBoundariesProvider!: SceneObjectBoundariesProvider + + private updateEvent = this.createEvent("UpdateEvent") + + @input + _debugDrawEnabled: boolean = false + + @input + enableHorizontalScroll: boolean = false + + @input + enableVerticalScroll: boolean = true + + @input + _enableScrollInertia: boolean = true + + @input + enableScrollLimit: boolean = true + + @input + @widget(new SliderWidget(0, 1, 0.01)) + _scrollLimit: number = 0.3 + + @input("vec2", "{1, 1}") + scrollAreaBounds: vec2 = new vec2(1, 1) + + onAwake() { + this.scrollArea = this.createScrollArea() + this.scrollProvider = this.createScrollProvider(this.scrollArea) + this.mask = this.sceneObject.createComponent("Component.MaskingComponent") + + this.defineScriptEvents() + } + + private onDestroy() { + this.scrollArea.destroy() + } + + private createScrollArea() { + const scrollArea = new ScrollArea({ + debugDrawEnabled: this.debugDrawEnabled, + parentSceneObject: this.sceneObject, + scrollAreaBounds: this.scrollAreaBounds, + }) + + return scrollArea + } + + private createScrollProvider(scrollArea: ScrollArea) { + const scrollProvider = new ScrollProvider({ + scrollArea: this.scrollArea.boundariesProvider, + scrollLimit: this.scrollLimit, + enableScrollInertia: this.enableScrollInertia, + enableScrollLimit: this.enableScrollLimit, + enableHorizontalScroll: this.enableHorizontalScroll, + enableVerticalScroll: this.enableVerticalScroll, + scrollView: this, + screenTransform: this.sceneObject.getComponent( + "Component.ScreenTransform", + ), + updateEvent: this.updateEvent, + }) + + scrollArea.onDragStart.add((event) => { + this.processPlanecastDrag(event) + this.processTouchpadDrag(event) + }) + scrollArea.onDragUpdate.add((event) => { + this.processPlanecastDrag(event) + this.processTouchpadDrag(event) + }) + scrollArea.onDragEnd.add((event) => { + scrollProvider.onGrabEnd(event) + }) + + scrollArea.onTriggerStart.add((event) => { + scrollProvider.onGrabStart(event) + }) + + return scrollProvider + } + + private createContentBoundariesProvider() { + if (this.sceneObject.getChildrenCount() !== EXPECTED_CHILDREN_COUNT) { + throw new Error( + "ScrollView requires exactly one child that wraps the content", + ) + } + + let contentSceneObject: SceneObject | undefined + for (const child of this.sceneObject.children) { + if (child !== this.scrollArea.getSceneObject()) { + contentSceneObject = child + } + } + + if (contentSceneObject === undefined) { + throw new Error( + "Couldn't find content scene object among ScrollView children.", + ) + } + + return new VisualBoundariesProvider(contentSceneObject) + } + + private defineScriptEvents() { + this.createEvent("OnDestroyEvent").bind(() => this.onDestroy()) + this.createEvent("OnStartEvent").bind(() => { + this.contentBoundariesProvider = this.createContentBoundariesProvider() + this.scrollProvider.setContent(this.contentBoundariesProvider) + this.scrollProvider.snapToEdges({x: -1, y: 1, type: "Content"}) + this.scrollProvider.resetContentOrigin() + // We recompute boundaries once more to ensure that the scroll limit anchor is set properly. + this.scrollProvider.recomputeBoundaries() + }) + } + + recomputeBoundaries = () => { + if (!this.scrollProvider.isReady) { + this.log.w( + "recomputeBoundaries called before OnStartEvent. Call ignored.", + ) + } else { + this.scrollProvider.recomputeBoundaries() + } + } + private deferOnReady = (callback: () => void) => { + if (!this.scrollProvider.isReady) { + this.scrollProvider.onReady.add(callback) + } else { + callback() + } + } + snapToEdges = (selectedEdges: EdgeSelector) => { + this.deferOnReady(() => this.scrollProvider.snapToEdges(selectedEdges)) + } + scrollBy = (dragVector: vec2) => { + this.deferOnReady(() => this.scrollProvider.scrollBy(dragVector)) + } + get onScrollUpdate() { + return this.scrollProvider.onScrollUpdate + } + get onSnapUpdate() { + return this.scrollProvider.onSnapUpdate + } + get onReady() { + return this.scrollProvider.onReady + } + get onFocusEnter() { + return this.scrollArea.onFocusEnter + } + get onFocusExit() { + return this.scrollArea.onFocusExit + } + + get debugDrawEnabled(): boolean { + return this._debugDrawEnabled + } + + set debugDrawEnabled(debugDrawEnabled: boolean) { + if (debugDrawEnabled === this._debugDrawEnabled) { + return + } + this._debugDrawEnabled = debugDrawEnabled + this.scrollArea.debugDrawEnabled = debugDrawEnabled + } + + get enableScrollInertia(): boolean { + return this._enableScrollInertia + } + + set enableScrollInertia(enableScrollInertia: boolean) { + if (enableScrollInertia === this._enableScrollInertia) { + return + } + this._enableScrollInertia = enableScrollInertia + this.scrollProvider.enableScrollInertia = enableScrollInertia + } + + get scrollLimit(): number { + return this._scrollLimit + } + + set scrollLimit(limit: number) { + if (this._scrollLimit === limit) { + return + } + this._scrollLimit = limit + this.scrollProvider.scrollLimit = limit + } + + get contentPosition(): vec3 { + return this.scrollProvider.contentPosition + } + + set contentPosition(position: vec3) { + this.scrollProvider.contentPosition = position + } + + /** + * @returns the offset to each content edge and the ScrollArea in world units relative to the canvas' rotation. + */ + get contentOffset(): Rect { + return this.scrollProvider.convertLocalOffsetToParentOffset( + this.scrollProvider.contentOffset, + ) + } + + /** + * @returns the length of the content along the y-axis in local units relative to the ScrollView canvas. + */ + get contentLength(): number { + return this.scrollProvider.contentLength + } + + /** + * @param length - the length of the content along the y-axis in local units relative to the ScrollView canvas. + */ + set contentLength(length: number) { + if (length === this.scrollProvider.contentLength) { + return + } + this.scrollProvider.contentLength = length + } + + /** + * Resets the content origin for the purpose of calculating scrollPercentage. + * Assumes that the ScrollView is currently at the top of content in the pooling use case. + */ + resetContentOrigin(): void { + this.scrollProvider.resetContentOrigin() + } + + /** + * @returns the ScrollArea's size in local units relative to the ScrollView canvas. + */ + get scrollAreaSize(): vec2 { + return this.scrollProvider.convertLocalUnitsToParentUnits( + this.scrollArea.boundariesProvider.size, + ) + } + + /** + * @returns the ScrollArea collider's BoxShape's bounds. + */ + get scrollColliderBounds(): vec2 { + return this.scrollArea.scrollColliderBounds + } + + /** + * @param bounds - the ScrollArea collider's BoxShape's bounds. + */ + set scrollColliderBounds(bounds: vec2) { + this.scrollArea.scrollColliderBounds = bounds + } + + /** + * @returns the amount of content overflow along the y-axis in local units relative to the ScrollView's canvas. + */ + get overflow(): number { + return this.scrollProvider.overflow + } + + /** + * @returns the scroll percentage of the ScrollView (0=top of ScrollView, 1= bottom). + */ + get scrollPercentage(): number { + return this.scrollProvider.scrollPercentage + } + + /** + * Checks if both inputted content edges are fully visible in the ScrollArea. + * @param xEdge - 0 if not checking any x-axis edge, 1 for right edge, -1 for left edge. + * @param yEdge - 0 if not checking any y-axis edge, 1 for top edge, -1 for bottom edge. + */ + checkContentEdgeFullyVisible(xEdge: 0 | 1 | -1, yEdge: 0 | 1 | -1): boolean { + return this.scrollProvider.checkContentEdgeFullyVisible(xEdge, yEdge) + } + + private localizeDragVector(dragVector: vec3): vec2 { + const transform = this.sceneObject.getTransform() + + const localXAxis = transform.getWorldRotation().multiplyVec3(vec3.right()) + + const localYAxis = transform.getWorldRotation().multiplyVec3(vec3.up()) + + const localizedX = localXAxis.dot(dragVector) / transform.getWorldScale().x + const localizedY = localYAxis.dot(dragVector) / transform.getWorldScale().y + + return new vec2(localizedX, localizedY) + } + + private localizeTouchpadVector(touchpadVector: vec3): vec2 { + const screenTransform = this.sceneObject.getComponent( + "Component.ScreenTransform", + ) + + // Mobile touchpad drag uses a screen space of [0,1], while screen transforms use a screen space of [-1,1] + const touchpadVector2D = new vec2( + touchpadVector.x * 2, + touchpadVector.y * 2, + ) + + const origin = screenTransform.localPointToWorldPoint(vec2.zero()) + + const worldSpaceVector = screenTransform + .localPointToWorldPoint(touchpadVector2D) + .sub(origin) + + return this.localizeDragVector(worldSpaceVector) + } + + private processPlanecastDrag(event: DragInteractorEvent) { + if (event.planecastDragVector === null) { + return + } + const localDrag = this.localizeDragVector(event.planecastDragVector) + this.scrollProvider.scrollBy(localDrag) + } + + private processTouchpadDrag(event: DragInteractorEvent) { + if (event.interactor.inputType === InteractorInputType.Mobile) { + const mobileInteractor = event.interactor as MobileInteractor + + if (mobileInteractor.touchpadDragVector !== null) { + const screenSpaceTouchpadDrag = + mobileInteractor.touchpadDragVector?.uniformScale( + 1 / mobileInteractor.touchpadScrollSpeed, + ) ?? vec3.zero() + + this.scrollProvider.scrollBy( + this.localizeTouchpadVector(screenSpaceTouchpadDrag), + ) + } + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts.meta new file mode 100644 index 00000000..06f7b802 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/ScrollView.ts.meta @@ -0,0 +1,57 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 22232e5e-be4f-4ef3-9b80-5f899c815454 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _debugDrawEnabled: false + _enableScrollInertia: false + _scrollLimit: false + enableHorizontalScroll: false + enableScrollLimit: false + enableVerticalScroll: false + scrollAreaBounds: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - enableHorizontalScroll: false + enableVerticalScroll: true + enableScrollLimit: true + _debugDrawEnabled: false + _enableScrollInertia: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + - + {} + InputLines: + - // @input bool _debugDrawEnabled + - // @input bool enableHorizontalScroll + - // @input bool enableVerticalScroll = true + - // @input bool _enableScrollInertia = true + - // @input bool enableScrollLimit = true + - '// @input float _scrollLimit = 0.3 {"widget":"slider", "min":0, "max":1, "step":0.01}' + - '// @input vec2 scrollAreaBounds = "{1, 1}"' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts new file mode 100644 index 00000000..f5c5bc0b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts @@ -0,0 +1,16 @@ +/** + * Base class to compute boundaries + */ +export abstract class BoundariesProvider { + /** + * The boundaries as a {@link Rect}. + */ + abstract get boundaries(): Rect + + /** + * @returns the size of the rectangle boundaries as (width, height). + */ + get size(): vec2 { + return this.boundaries.getSize() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts.meta new file mode 100644 index 00000000..344930ea --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BoundariesProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 92ed6cca-1a5e-4bc7-9eb7-6a94dc68e57a + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 92ed6cca-1a5e-4bc7-9eb7-6a94dc68e57a + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3fb5d181-1ad1-490f-b6aa-7a6ecde7b7d3 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts new file mode 100644 index 00000000..ebcb87e6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts @@ -0,0 +1,46 @@ +import {BoundariesProvider} from "./BoundariesProvider" + +/** + * Computes a boundary by adding a buffer around another boundariesProvider + */ +export class BufferedBoundariesProvider extends BoundariesProvider { + private _buffer: Rect + + /** + * Computes a boundary by adding a buffer around another boundariesProvider + * @param toBuffer - The BoundariesProvider to buffer + * @param initialBuffer - The amount of buffer to apply + */ + constructor( + readonly toBuffer: BoundariesProvider, + readonly initialBuffer: Rect + ) { + super() + + this._buffer = initialBuffer + } + + /** + * Get the amount of buffer being applied + */ + get buffer(): Rect { + return this._buffer + } + + /** + * Set the amount of buffer being applied + * @param newBuffer - The new value + */ + set buffer(newBuffer: Rect) { + this._buffer = newBuffer + } + + get boundaries(): Rect { + return Rect.create( + this.toBuffer.boundaries.left - this.buffer.left, + this.toBuffer.boundaries.right + this.buffer.right, + this.toBuffer.boundaries.bottom - this.buffer.bottom, + this.toBuffer.boundaries.top + this.buffer.top + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts.meta new file mode 100644 index 00000000..5eb147ff --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/BufferedBoundariesProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 693dfe69-1749-4270-9961-65fa5497ead6 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 693dfe69-1749-4270-9961-65fa5497ead6 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 9b440bc9-207e-4be0-b68c-705383b47068 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts new file mode 100644 index 00000000..4d75a361 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts @@ -0,0 +1,106 @@ +import {BoundariesProvider} from "./BoundariesProvider" + +const TAG = "SceneObjectBoundariesProvider" + +/** + * Apply a boundary by computing it from a Scene Object + */ +export abstract class SceneObjectBoundariesProvider extends BoundariesProvider { + protected screenTransform: ScreenTransform = this.sceneObject.getComponent( + "Component.ScreenTransform" + ) + + protected startingPosition = this.localPointToParentPoint( + this.screenTransform, + vec2.zero() + ) + protected startingBoundaries: Rect + + /** + * Apply a boundary by computing it from a Scene Object. Must have a ScreenTransform. + * @param sceneObject - The scene object to compute using + */ + constructor(readonly sceneObject: SceneObject) { + super() + + if (!this.screenTransform) { + throw new Error(`ScreenTransform missing in ${this.sceneObject.name}`) + } + + const position = this.screenTransform.localPointToWorldPoint(vec2.zero()) + this.startingPosition = new vec2(position.x, position.y) + this.startingBoundaries = this.getBoundaries() + } + + get boundaries(): Rect { + const offsetPosition = this.localPointToParentPoint( + this.screenTransform, + vec2.zero() + ).sub(this.startingPosition) + return Rect.create( + this.startingBoundaries.left + offsetPosition.x, + this.startingBoundaries.right + offsetPosition.x, + this.startingBoundaries.bottom + offsetPosition.y, + this.startingBoundaries.top + offsetPosition.y + ) + } + + /** + * @returns local position in world units relative to the parent's center + */ + get position(): vec3 { + return this.screenTransform.position + } + + /** + * Sets local position in world units relative to the parent's center + * @param position - desired position + */ + set position(position: vec3) { + this.screenTransform.position = position + } + + /** + * Recomputes starting boundaries + */ + recomputeStartingBoundaries(): void { + this.startingPosition = this.localPointToParentPoint( + this.screenTransform, + vec2.zero() + ) + this.startingBoundaries = this.getBoundaries() + } + + protected abstract getBoundaries(): Rect + + protected createScreenTransformRectBoundaries( + screenTransform: ScreenTransform + ): Rect { + const topLeftCorner = this.localPointToParentPoint( + screenTransform, + new vec2(-1, 1) + ) + + const bottomRightCorner = this.localPointToParentPoint( + screenTransform, + new vec2(1, -1) + ) + + return Rect.create( + topLeftCorner.x, + bottomRightCorner.x, + bottomRightCorner.y, + topLeftCorner.y + ) + } + + private localPointToParentPoint( + screenTransform: ScreenTransform, + position: vec2 + ) { + const worldPoint = screenTransform.localPointToWorldPoint(position) + const parentPoint = this.screenTransform.worldPointToParentPoint(worldPoint) + + return parentPoint + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts.meta new file mode 100644 index 00000000..8dacee01 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/SceneObjectBoundariesProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 400422dd-d000-4a20-969a-c83ab3f2e188 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 400422dd-d000-4a20-969a-c83ab3f2e188 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 4498e7a1-3bfd-48d9-aeb9-b44507f216f5 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts new file mode 100644 index 00000000..5ebbc316 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts @@ -0,0 +1,14 @@ +import {SceneObjectBoundariesProvider} from "./SceneObjectBoundariesProvider" + +/** + * Wraps screen transform boundaries + */ +export class ScreenTransformBoundariesProvider extends SceneObjectBoundariesProvider { + protected getBoundaries(): Rect { + if (!this.sceneObject.enabled) { + return Rect.create(0, 0, 0, 0) + } + + return this.createScreenTransformRectBoundaries(this.screenTransform) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts.meta new file mode 100644 index 00000000..6ef83c1c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/ScreenTransformBoundariesProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 7868171c-6a34-49a8-a117-caf0062e2a07 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 7868171c-6a34-49a8-a117-caf0062e2a07 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 4bc9bc9e-1873-4d93-9e08-115ef820c1c0 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts new file mode 100644 index 00000000..1c42dd01 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts @@ -0,0 +1,62 @@ +import {SceneObjectBoundariesProvider} from "./SceneObjectBoundariesProvider" + +const TAG = "VisualBoundariesProvider" + +/** + * Computes boundaries for elements with BaseMeshVisual + */ +export class VisualBoundariesProvider extends SceneObjectBoundariesProvider { + protected getBoundaries(): Rect { + if (!this.sceneObject.enabled) { + return Rect.create(0, 0, 0, 0) + } + + return this.getNodeBoundaries(this.sceneObject) + } + + private getNodeBoundaries(node: SceneObject): Rect { + if (!node.enabled) { + // Infinity doesn't work, but MAX_VALUE === Infinity + return Rect.create( + Number.MAX_VALUE, + -Number.MAX_VALUE, + Number.MAX_VALUE, + -Number.MAX_VALUE + ) + } + + const rect = this.createNodeRectBoundaries(node) + + for (const child of node.children) { + const childRect = this.getNodeBoundaries(child) + rect.left = Math.min(rect.left, childRect.left) + rect.right = Math.max(rect.right, childRect.right) + rect.bottom = Math.min(rect.bottom, childRect.bottom) + rect.top = Math.max(rect.top, childRect.top) + } + + return rect + } + + private createNodeRectBoundaries(sceneObject: SceneObject): Rect { + const screenTransform = sceneObject.getComponent( + "Component.ScreenTransform" + ) + if (!screenTransform) { + throw new Error(`Missing ScreenTransform attached to ${sceneObject.name}`) + } + + const baseMeshVisual = sceneObject.getComponent("Component.BaseMeshVisual") + if (!baseMeshVisual) { + // Infinity doesn't work, but MAX_VALUE === Infinity + return Rect.create( + Number.MAX_VALUE, + -Number.MAX_VALUE, + Number.MAX_VALUE, + -Number.MAX_VALUE + ) + } + + return this.createScreenTransformRectBoundaries(screenTransform) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts.meta new file mode 100644 index 00000000..4879862b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ScrollView/boundariesProvider/VisualBoundariesProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f627f668-d38d-4f1a-8daa-848b1073e966 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f627f668-d38d-4f1a-8daa-848b1073e966 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! dd277d07-ac8e-4e70-a7c7-612abda0d7d4 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts new file mode 100644 index 00000000..282c845c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts @@ -0,0 +1,793 @@ +import Event, {PublicApi, unsubscribe} from "../../../Utils/Event" + +import {DragInteractorEvent} from "../../../Core/Interactor/InteractorEvent" +import {DragType} from "../../../Core/Interactor/Interactor" +import {Interactable} from "../../Interaction/Interactable/Interactable" +import NativeLogger from "../../../Utils/NativeLogger" +import animate from "../../../Utils/animate" +import {createCallback} from "../../../Utils/InspectorCallbacks" +import {validate} from "../../../Utils/validate" + +const TAG = "Slider" + +/** + * Describes the current state of the slider. + */ +export type SliderState = { + // The current drag vector provided by the slider's underlying Interactable + dragVector: vec3 | null + + // The raw value of the knob's position as an offset from the slider center along the track's axis. + rawValue: number + + // The raw value of the knob's position, snapped to the nearest slider step. + snappedValue: number + + // The actual numeric value displayed by the slider. + displayValue: number +} + +/** + * Describes the current bounds and orientation of the slider track (the path of the slider knob). + */ +export type TrackState = { + trackMin: number + trackMax: number + trackSize: number + trackDirection: vec3 +} +export type SliderBounds = { + start: vec3 + end: vec3 + minAnchor: Rect + maxAnchor: Rect +} +export type DragUpdate = { + dragVector: vec3 + dragPoint: vec3 +} + +/** + * This class represents a numerical slider control powered by Interaction Kit's hand tracking interactions. It allows users to adjust a value by sliding a handle along a track. + */ +@component +export class Slider extends BaseScriptComponent { + @input + @hint("The minimum numeric value of the slider") + private _minValue: number = 0 + @input + @hint("The maximum numeric value of the slider") + private _maxValue: number = 1 + @input + @hint("The initial numeric value of the slider") + startValue: number = 0.5 + @input + @hint( + "Enable this to change the slider's value in steps rather than continuously", + ) + stepBehavior: boolean = false + @input + @hint("The size of the steps that the slider's value will be changed in.") + @showIf("stepBehavior", true) + private _stepSize: number = 0 + + @input + @showIf("isToggleable", true) + @hint("The duration of the toggle animation in seconds.") + toggleDuration: number = 0.2 + + @ui.separator + @input + @hint("The position of the slider knob when the minimum value is reached.") + sliderMin!: SceneObject + @input + @hint("The position of the slider knob when the maximum value is reached.") + sliderMax!: SceneObject + @input("SceneObject") + @hint( + "The SceneObject representing the knob of the slider which will be moved along the path between the positions provided by sliderMin and sliderMax when the value is updated. Please ensure the SceneObject has an Interactable component attached.", + ) + private _sliderKnob: SceneObject | undefined + + @ui.separator + @input + @hint( + "Enable this to add functions from another script to this component's callback events", + ) + editEventCallbacks: boolean = false + + @ui.group_start("On Hover Enter Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on hover enter") + @allowUndefined + private customFunctionForOnHoverEnter: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on hover enter", + ) + @allowUndefined + private onHoverEnterFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Hover Exit Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on hover exit") + @allowUndefined + private customFunctionForOnHoverExit: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on hover exit", + ) + @allowUndefined + private onHoverExitFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Slide Start Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on slide start") + @allowUndefined + private customFunctionForOnSlideStart: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on slide start", + ) + @allowUndefined + private onSlideStartFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Slide End Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on slide end") + @allowUndefined + private customFunctionForOnSlideEnd: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on slide end", + ) + @allowUndefined + private onSlideEndFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Value Update Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on value update") + @allowUndefined + private customFunctionForOnValueUpdate: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on value update", + ) + @allowUndefined + private onValueUpdateFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Min Value Reached Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on min value reached") + @allowUndefined + private customFunctionForOnMinValueReached: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called when minimum value is reached", + ) + @allowUndefined + private onMinValueReachedFunctionNames: string[] = [] + @ui.group_end + @ui.group_start("On Max Value Reached Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on max value reached") + @allowUndefined + private customFunctionForOnMaxValueReached: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called when maximum value is reached", + ) + @allowUndefined + private onMaxValueReachedFunctionNames: string[] = [] + @ui.group_end + private log = new NativeLogger(TAG) + + private _startPosition!: vec3 + private _endPosition!: vec3 + + private sliderBounds!: SliderBounds + private minBound!: vec2 + private maxBound!: vec2 + + private trackState: TrackState | null = null + private sliderState: SliderState | null = null + + private sliderKnobScreenTransform: ScreenTransform | undefined + + private interactable: Interactable | null = null + + private unsubscribeBag: unsubscribe[] = [] + + private isDragging = false + + // Events + private onHoverEnterEvent: Event = new Event() + private onHoverExitEvent: Event = new Event() + private onSlideStartEvent: Event = new Event() + private onSlideEndEvent: Event = new Event() + private onMinValueReachedEvent: Event = new Event() + private onMaxValueReachedEvent: Event = new Event() + private onValueUpdateEvent: Event | null = null + + onHoverEnter!: PublicApi + onHoverExit!: PublicApi + onSlideStart!: PublicApi + onSlideEnd!: PublicApi + onValueUpdate!: PublicApi + onMinValueReached!: PublicApi + onMaxValueReached!: PublicApi + + transform!: Transform + + onAwake(): void { + validate(this.sliderKnob) + + this.interactable = this.sliderKnob.getComponent(Interactable.getTypeName()) + this.sliderKnobScreenTransform = this.sliderKnob.getComponent( + "Component.ScreenTransform", + ) + + this.transform = this.getTransform() + + this.sliderBounds = { + start: this.transform + .getInvertedWorldTransform() + .multiplyPoint(this.sliderMin.getTransform().getWorldPosition()), + end: this.transform + .getInvertedWorldTransform() + .multiplyPoint(this.sliderMax.getTransform().getWorldPosition()), + minAnchor: this.sliderMin.getComponent("Component.ScreenTransform") + .anchors, + maxAnchor: this.sliderMax.getComponent("Component.ScreenTransform") + .anchors, + } + + this._startPosition = this.sliderBounds.start + this._endPosition = this.sliderBounds.end + + this.minBound = this.sliderBounds.minAnchor.getCenter() + this.maxBound = this.sliderBounds.maxAnchor.getCenter() + + this.trackState = this.getTrackState() + this.sliderState = this.getInitialSliderState() + + this.onValueUpdateEvent = new Event((value) => { + if (value >= this._maxValue) { + this.onMaxValueReachedEvent.invoke(this._maxValue) + } else if (value <= this._minValue) { + this.onMinValueReachedEvent.invoke(this._minValue) + } + }) + + this.onHoverEnter = this.onHoverEnterEvent.publicApi() + this.onHoverExit = this.onHoverExitEvent.publicApi() + this.onSlideStart = this.onSlideStartEvent.publicApi() + this.onSlideEnd = this.onSlideEndEvent.publicApi() + this.onValueUpdate = this.onValueUpdateEvent.publicApi() + this.onMinValueReached = this.onMinValueReachedEvent.publicApi() + this.onMaxValueReached = this.onMaxValueReachedEvent.publicApi() + + if (this._minValue > this._maxValue || this._maxValue < this._minValue) { + throw new Error( + "Error: SliderComponent's maxValue must be less than its minValue.", + ) + } + if ( + this._stepSize < 0 || + this._stepSize > this._maxValue - this._minValue + ) { + throw new Error( + "Error: SliderComponent's stepSize must be greater than or equal to 0, and less than its value range.", + ) + } + this.updateUI() + + // Waiting for the OnStartEvent ensures that Interactable components are initialized before we add slider callbacks. + this.createEvent("OnStartEvent").bind(() => { + if (!this.interactable) { + throw new Error( + "Slider Knob must contain an Interactable component for the slider to work - please ensure that one is added to the SceneObject.", + ) + } + if (!this.sliderKnobScreenTransform) { + throw new Error( + "Slider Knob must be a Screen Transform for the slider to work - please ensure that one is added to the SceneObject.", + ) + } + this.setupInteractable() + }) + + this.createEvent("OnDestroyEvent").bind(() => { + this.unsubscribeCallbacks() + }) + + if (this.editEventCallbacks) { + if (this.customFunctionForOnHoverEnter) { + this.onHoverEnter.add( + createCallback( + this.customFunctionForOnHoverEnter, + this.onHoverEnterFunctionNames, + ), + ) + } + + if (this.customFunctionForOnHoverExit) { + this.onHoverExit.add( + createCallback( + this.customFunctionForOnHoverExit, + this.onHoverExitFunctionNames, + ), + ) + } + + if (this.customFunctionForOnSlideStart) { + this.onSlideStart.add( + createCallback( + this.customFunctionForOnSlideStart, + this.onSlideStartFunctionNames, + ), + ) + } + + if (this.customFunctionForOnSlideEnd) { + this.onSlideEnd.add( + createCallback( + this.customFunctionForOnSlideEnd, + this.onSlideEndFunctionNames, + ), + ) + } + + if (this.customFunctionForOnValueUpdate) { + this.onValueUpdate.add( + createCallback( + this.customFunctionForOnValueUpdate, + this.onValueUpdateFunctionNames, + ), + ) + } + + if (this.customFunctionForOnMinValueReached) { + this.onMinValueReached.add( + createCallback( + this.customFunctionForOnMinValueReached, + this.onMinValueReachedFunctionNames, + ), + ) + } + + if (this.customFunctionForOnMaxValueReached) { + this.onMaxValueReached.add( + createCallback( + this.customFunctionForOnMaxValueReached, + this.onMaxValueReachedFunctionNames, + ), + ) + } + } + } + + get minValue(): number { + return this._minValue + } + + set minValue(value: number) { + if (value >= this._maxValue) { + this.log.e( + `Could not set minimum value to ${value} as it cannot be greater than or equal to the maximum value: ${this._maxValue}`, + ) + return + } + validate(this.sliderState) + + this._minValue = value + let displayValue = this.sliderState.displayValue + if (value > this.sliderState.displayValue) { + this.log.w( + `Setting current value ${this.sliderState.displayValue} to the new minimum value ${value} provided as it is now out of range.`, + ) + displayValue = value + } + this.updateSliderStateFromDisplayValue(displayValue) + } + + get maxValue(): number { + return this._maxValue + } + + set maxValue(value: number) { + if (value <= this._minValue) { + this.log.e( + `Could not set maximum value to ${value} as it cannot be less than or equal to the minimum value: ${this._minValue}`, + ) + return + } + validate(this.sliderState) + + this._maxValue = value + let displayValue = this.sliderState.displayValue + if (value < this.sliderState.displayValue) { + this.log.w( + `Setting current value ${this.sliderState.displayValue} to the new maximum value ${value} provided as it is now out of range.`, + ) + displayValue = value + } + this.updateSliderStateFromDisplayValue(displayValue) + } + get currentValue(): number | null { + return this.sliderState?.displayValue ?? null + } + set currentValue(value: number) { + if (value < this._minValue) { + this.log.w( + `Slider value will be set to the minimum value: ${this._minValue} as the provided value ${value} was less than the minimum value allowed.`, + ) + value = this._minValue + } else if (value > this._maxValue) { + this.log.w( + `Slider value will be set to the maximum value: ${this._maxValue} as the provided value ${value} was greater than the maximum value allowed.`, + ) + value = this._maxValue + } + this.updateSliderStateFromDisplayValue(value) + } + + get stepSize(): number { + return this._stepSize + } + set stepSize(stepSize: number) { + if (stepSize > this._maxValue - this._minValue) { + this.log.e( + `Could not set step size to ${stepSize} as it must be less than the slider's value range.`, + ) + return + } else if (stepSize < 0) { + this.log.e( + `Could not set step size to ${stepSize} as it must be greater than or equal to 0.`, + ) + return + } + this._stepSize = stepSize + } + + get startPosition(): vec3 | null { + return this._startPosition + } + + set startPosition(position: vec3) { + this._startPosition = position + this.trackState = this.getTrackState() + this.updateSliderState(null) + } + + get endPosition(): vec3 | null { + return this._endPosition + } + set endPosition(position: vec3) { + this._endPosition = position + this.trackState = this.getTrackState() + this.updateSliderState(null) + } + + get sliderKnob(): SceneObject | undefined { + return this._sliderKnob + } + + private getInitialSliderState(): SliderState { + const rawValue = this.calculateRawValueFromDisplayValue(this.startValue) + const displayValue = this.getSteppedDisplayValue(this.startValue) + const snappedValue = this.calculateRawValueFromDisplayValue(displayValue) + + return { + dragVector: null, + rawValue: rawValue, + snappedValue: snappedValue, + displayValue: displayValue, + } + } + + private getTrackState(): TrackState { + const direction = this._endPosition.sub(this._startPosition).normalize() + + const min = -this._startPosition.length + const max = this._endPosition.length + + return { + trackMin: min, + trackMax: max, + trackSize: max - min, + trackDirection: direction, + } + } + + /** + * Sets up event callbacks for behavior on the Interactable's interaction events. + */ + private setupInteractable() { + if (this.interactable === null) { + throw new Error( + "Slider Knob must contain an Interactable component for the slider to work - please ensure that one is added to the SceneObject.", + ) + } + + // If this is not a slider with step size, enable instant dragging for more responsive behavior. + if (this.stepSize === 0) { + this.interactable.enableInstantDrag = true + } + + this.unsubscribeBag.push( + this.interactable.onHoverEnter.add(() => { + this.onHoverEnterEvent.invoke() + }), + ) + + this.unsubscribeBag.push( + this.interactable.onHoverExit.add(() => { + this.onHoverExitEvent.invoke() + }), + ) + + this.unsubscribeBag.push( + this.interactable.onDragStart.add((event: DragInteractorEvent) => { + validate(this.sliderState) + validate(event.planecastDragVector) + validate(event.interactor.planecastPoint) + + this.onSlideStartEvent.invoke(this.sliderState.displayValue) + this.isDragging = true + this.updateSliderState({ + dragVector: + event.interactor.dragType !== DragType.Touchpad + ? event.planecastDragVector + : event.dragVector, + dragPoint: event.interactor.planecastPoint, + }) + }), + ) + + this.unsubscribeBag.push( + this.interactable.onDragUpdate.add((event: DragInteractorEvent) => { + validate(event.planecastDragVector) + validate(event.interactor.planecastPoint) + + this.updateSliderState({ + dragVector: + event.interactor.dragType !== DragType.Touchpad + ? event.planecastDragVector + : event.dragVector, + dragPoint: event.interactor.planecastPoint, + }) + }), + ) + + this.unsubscribeBag.push( + this.interactable.onDragEnd.add(() => { + validate(this.sliderState) + this.onSlideEndEvent.invoke(this.sliderState.displayValue) + this.isDragging = false + this.updateSliderState(null) + }), + ) + + this.unsubscribeBag.push( + this.interactable.onTriggerEnd.add(() => { + this.toggleSliderState() + }), + ) + } + + private calculateRawValueFromDragVector(dragVector: vec3 | null) { + validate(this.sliderState) + + if (dragVector === null) { + return this.sliderState.rawValue + } + validate(this.trackState) + + dragVector = this.transform + .getInvertedWorldTransform() + .multiplyDirection(dragVector) + return MathUtils.clamp( + this.sliderState.rawValue + + this.trackState.trackDirection.dot(dragVector), + this.trackState.trackMin, + this.trackState.trackMax, + ) + } + + private calculateDisplayValueFromRawValue(rawValue: number): number { + validate(this.trackState) + + const displayValue = MathUtils.remap( + rawValue, + this.trackState.trackMin, + this.trackState.trackMax, + this._minValue, + this._maxValue, + ) + return this.getSteppedDisplayValue(displayValue) + } + + private calculateRawValueFromDisplayValue(displayValue: number): number { + validate(this.trackState) + + return MathUtils.remap( + displayValue, + this._minValue, + this._maxValue, + this.trackState.trackMin, + this.trackState.trackMax, + ) + } + + private getSteppedDisplayValue(displayValue: number): number { + return this._stepSize > 0 + ? this._minValue + + Math.round((displayValue - this._minValue) / this._stepSize) * + this._stepSize + : displayValue + } + + /** + * Updates SliderState representing the most updated version of the slider, using the drag vector if active. + * @param dragUpdate - the drag vector provided by the Interactor, or null if a drag is not active. + */ + private updateSliderState(dragUpdate: DragUpdate | null) { + validate(this.sliderState) + + if (dragUpdate === null) { + this.sliderState.dragVector = null + return + } + + const localizedDragPoint = this.transform + .getInvertedWorldTransform() + .multiplyPoint(dragUpdate.dragPoint) + + // Check that the drag point is between the start/end points. + const dragPointCheck = this.checkOutsideTrackBoundary(localizedDragPoint) + + if (dragPointCheck === -1) { + this.currentValue = this.minValue + return + } else if (dragPointCheck === 1) { + this.currentValue = this.maxValue + return + } + + const rawValue = this.calculateRawValueFromDragVector(dragUpdate.dragVector) + const displayValue = this.calculateDisplayValueFromRawValue(rawValue) + const snappedValue = this.calculateRawValueFromDisplayValue(displayValue) + + if (this.sliderState.displayValue !== displayValue) { + this.onValueUpdateEvent?.invoke(displayValue) + } + + this.sliderState = { + dragVector: dragUpdate.dragVector, + rawValue: rawValue, + snappedValue: snappedValue, + displayValue: displayValue, + } + this.updateUI() + } + + // Check if a local point is to the left of the start point (-1) or the right of the end point (1). + private checkOutsideTrackBoundary(localPoint: vec3): -1 | 0 | 1 { + validate(this.trackState) + + const isPastStartPoint = + localPoint + .sub(this.sliderBounds.start) + .angleTo(this.trackState.trackDirection) > + Math.PI / 2 + + const isPastEndPoint = + localPoint + .sub(this.sliderBounds.end) + .angleTo(this.trackState.trackDirection) < + Math.PI / 2 + + if (isPastStartPoint) { + return -1 + } + + if (isPastEndPoint) { + return 1 + } + + return 0 + } + + private toggleSliderState() { + if (this.isDragging) { + return + } + validate(this.currentValue) + + const initialValue = this.currentValue + + if (this.stepSize === this.maxValue - this.minValue) { + if (initialValue === this.minValue) { + this.currentValue = this.maxValue + } else if (initialValue === this.maxValue) { + this.currentValue = this.minValue + } + + this.animateToggleUI(initialValue < this.currentValue) + } + } + + private animateToggleUI(toggledOn: boolean): void { + animate({ + duration: this.toggleDuration, + easing: "ease-out-cubic", + update: (t) => { + validate(this.sliderKnobScreenTransform) + validate(this.minBound) + validate(this.maxBound) + + const lerpValue = toggledOn ? t : 1 - t + this.sliderKnobScreenTransform.anchors.setCenter( + vec2.lerp(this.minBound, this.maxBound, lerpValue), + ) + }, + }) + } + + /** + * Updates SliderState representing the most updated version of the slider, using a provided display value. + * @param displayValue - the desired display value. + */ + private updateSliderStateFromDisplayValue(displayValue: number) { + validate(this.sliderState) + const snappedValue = this.calculateRawValueFromDisplayValue(displayValue) + + if (displayValue !== this.sliderState.displayValue) { + this.onValueUpdateEvent?.invoke(displayValue) + } + + this.sliderState = { + dragVector: null, + rawValue: snappedValue, + snappedValue: snappedValue, + displayValue: displayValue, + } + this.updateUI() + } + + /** + * Updates the slider UI based on the snapped value, by moving the knob's position. + */ + private updateUI(): void { + validate(this.sliderKnobScreenTransform) + validate(this.sliderState) + validate(this.trackState) + + this.sliderKnobScreenTransform.anchors.setCenter( + vec2.lerp( + this.minBound, + this.maxBound, + (this.sliderState.snappedValue - this.trackState.trackMin) / + this.trackState.trackSize, + ), + ) + } + + /** + * Unsubscribes all the slider-specific callbacks to the Interactable component before this component is destroyed. + */ + unsubscribeCallbacks(): void { + this.unsubscribeBag.forEach((unsubscribeCallback: () => void) => { + unsubscribeCallback() + }) + this.unsubscribeBag = [] + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts.meta new file mode 100644 index 00000000..f06857f5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/Slider/Slider.ts.meta @@ -0,0 +1,131 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 5268cc6c-59e0-4691-926c-7be3f68fc06c + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _maxValue: false + _minValue: false + _sliderKnob: false + _stepSize: false + customFunctionForOnHoverEnter: false + customFunctionForOnHoverExit: false + customFunctionForOnMaxValueReached: false + customFunctionForOnMinValueReached: false + customFunctionForOnSlideEnd: false + customFunctionForOnSlideStart: false + customFunctionForOnValueUpdate: false + editEventCallbacks: false + onHoverEnterFunctionNames: false + onHoverExitFunctionNames: false + onMaxValueReachedFunctionNames: false + onMinValueReachedFunctionNames: false + onSlideEndFunctionNames: false + onSlideStartFunctionNames: false + onValueUpdateFunctionNames: false + sliderMax: false + sliderMin: false + startValue: false + stepBehavior: false + toggleDuration: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - startValue: 0.500000 + stepBehavior: false + sliderMin: ! 00000000-0000-0000-0000-000000000000 + sliderMax: ! 00000000-0000-0000-0000-000000000000 + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + _stepSize: ! 0.000000 + _sliderKnob: ! 00000000-0000-0000-0000-000000000000 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + toggleDuration: 0.200000 + ScriptTypes: + - + {} + InputLines: + - '// @input float _minValue {"hint":"The minimum numeric value of the slider"}' + - '// @input float _maxValue = 1 {"hint":"The maximum numeric value of the slider"}' + - '// @input float startValue = 0.5 {"hint":"The initial numeric value of the slider"}' + - "// @input bool stepBehavior {\"hint\":\"Enable this to change the slider's value in steps rather than continuously\"}" + - "// @input float _stepSize {\"hint\":\"The size of the steps that the slider's value will be changed in.\", \"showIf\":\"stepBehavior\", \"showIfValue\":true}" + - '// @input float toggleDuration = 0.2 {"hint":"The duration of the toggle animation in seconds.", "showIf":"isToggleable", "showIfValue":true}' + - '// @ui {"widget":"separator"}' + - '// @input SceneObject sliderMin {"hint":"The position of the slider knob when the minimum value is reached."}' + - '// @input SceneObject sliderMax {"hint":"The position of the slider knob when the maximum value is reached."}' + - '// @input SceneObject _sliderKnob {"hint":"The SceneObject representing the knob of the slider which will be moved along the path between the positions provided by sliderMin and sliderMax when the value is updated. Please ensure the SceneObject has an Interactable component attached."}' + - '// @ui {"widget":"separator"}' + - "// @input bool editEventCallbacks {\"hint\":\"Enable this to add functions from another script to this component's callback events\"}" + - '// @ui {"widget":"group_start", "label":"On Hover Enter Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnHoverEnter {"hint":"The script containing functions to be called on hover enter"}' + - '// @input string[] onHoverEnterFunctionNames {"hint":"The names for the functions on the provided script, to be called on hover enter"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Hover Exit Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnHoverExit {"hint":"The script containing functions to be called on hover exit"}' + - '// @input string[] onHoverExitFunctionNames {"hint":"The names for the functions on the provided script, to be called on hover exit"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Slide Start Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnSlideStart {"hint":"The script containing functions to be called on slide start"}' + - '// @input string[] onSlideStartFunctionNames {"hint":"The names for the functions on the provided script, to be called on slide start"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Slide End Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnSlideEnd {"hint":"The script containing functions to be called on slide end"}' + - '// @input string[] onSlideEndFunctionNames {"hint":"The names for the functions on the provided script, to be called on slide end"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Value Update Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnValueUpdate {"hint":"The script containing functions to be called on value update"}' + - '// @input string[] onValueUpdateFunctionNames {"hint":"The names for the functions on the provided script, to be called on value update"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Min Value Reached Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnMinValueReached {"hint":"The script containing functions to be called on min value reached"}' + - '// @input string[] onMinValueReachedFunctionNames {"hint":"The names for the functions on the provided script, to be called when minimum value is reached"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"On Max Value Reached Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnMaxValueReached {"hint":"The script containing functions to be called on max value reached"}' + - '// @input string[] onMaxValueReachedFunctionNames {"hint":"The names for the functions on the provided script, to be called when maximum value is reached"}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts new file mode 100644 index 00000000..31075883 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts @@ -0,0 +1,148 @@ +import {createCallback} from "../../../Utils/InspectorCallbacks" +import ReplayEvent from "../../../Utils/ReplayEvent" +import {Interactable} from "../../Interaction/Interactable/Interactable" + +/** + * This class provides basic toggle functionality for a prefab toggle button. It manages the toggle state and provides methods to handle toggle events and update the button's visual state. + */ +@component +export class ToggleButton extends BaseScriptComponent { + @input("SceneObject") + @hint("The icon to be shown when the button is toggled on") + @allowUndefined + _onIcon: SceneObject | undefined + @input("SceneObject") + @hint("The icon to be shown when the button is toggled off") + @allowUndefined + _offIcon: SceneObject | undefined + @input + @hint( + "The initial state of the button, set to true if toggled on upon lens launch." + ) + private _isToggledOn: boolean = false + @input + @hint( + "Enable this to add functions from another script to this component's callback events" + ) + editEventCallbacks: boolean = false + @ui.group_start("On State Changed Callbacks") + @showIf("editEventCallbacks") + @input("Component.ScriptComponent") + @hint("The script containing functions to be called on toggle state change") + @allowUndefined + private customFunctionForOnStateChanged: ScriptComponent | undefined + @input + @hint( + "The names for the functions on the provided script, to be called on toggle state change" + ) + @allowUndefined + private onStateChangedFunctionNames: string[] = [] + @ui.group_end + private interactable: Interactable | null = null + + private onStateChangedEvent = new ReplayEvent() + public readonly onStateChanged = this.onStateChangedEvent.publicApi() + + onAwake() { + this.interactable = this.getSceneObject().getComponent( + Interactable.getTypeName() + ) + + this.createEvent("OnStartEvent").bind(() => { + if (!this.interactable) { + throw new Error( + "Toggle Button requires an Interactable Component on the same Scene object in order to work - please ensure one is added." + ) + } + this.interactable.onTriggerEnd.add(() => { + if (this.enabled) { + this.toggleState() + } + }) + + this.onStateChangedEvent.invoke(this._isToggledOn) + }) + + if (this.editEventCallbacks && this.customFunctionForOnStateChanged) { + this.onStateChanged.add( + createCallback( + this.customFunctionForOnStateChanged, + this.onStateChangedFunctionNames + ) + ) + } + + this.refreshVisual() + } + + /** + * Toggles the state of the button + */ + toggle(): void { + this.toggleState() + } + + /** + * @returns the icon to be shown when the button is toggled on + */ + get onIcon(): SceneObject | null { + return this._onIcon ?? null + } + + /** + * @param iconObject - the icon to be shown when the button is toggled on + */ + set onIcon(iconObject: SceneObject) { + this._onIcon = iconObject + this.refreshVisual() + } + + /** + * @returns the icon to be shown when the button is toggled off + */ + get offIcon(): SceneObject | null { + return this._offIcon ?? null + } + + /** + * @param iconObject - the icon to be shown when the button is toggled off + */ + set offIcon(iconObject: SceneObject) { + this._offIcon = iconObject + this.refreshVisual() + } + + /** + * @returns the current toggle state of the button + */ + get isToggledOn(): boolean { + return this._isToggledOn + } + + /** + * @param toggleOn - the new state of the button, invoking the toggle event if different than current state. + */ + set isToggledOn(toggleOn: boolean) { + // Return if the requested state is the same as the current state (no change) + if (toggleOn === this._isToggledOn) { + return + } + this.toggleState() + } + + private refreshVisual() { + if (this._onIcon !== undefined) { + this._onIcon.enabled = this._isToggledOn + } + + if (this._offIcon !== undefined) { + this._offIcon.enabled = !this._isToggledOn + } + } + + private toggleState() { + this._isToggledOn = !this._isToggledOn + this.refreshVisual() + this.onStateChangedEvent.invoke(this._isToggledOn) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts.meta new file mode 100644 index 00000000..37c31d51 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Components/UI/ToggleButton/ToggleButton.ts.meta @@ -0,0 +1,57 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b371b7ce-4907-4799-a923-db403f60d7ac + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _isToggledOn: false + _offIcon: false + _onIcon: false + customFunctionForOnStateChanged: false + editEventCallbacks: false + onStateChangedFunctionNames: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - _onIcon: ! 00000000-0000-0000-0000-000000000000 + _offIcon: ! 00000000-0000-0000-0000-000000000000 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + - + {} + InputLines: + - '// @input SceneObject _onIcon {"hint":"The icon to be shown when the button is toggled on"}' + - '// @input SceneObject _offIcon {"hint":"The icon to be shown when the button is toggled off"}' + - '// @input bool _isToggledOn {"hint":"The initial state of the button, set to true if toggled on upon lens launch."}' + - "// @input bool editEventCallbacks {\"hint\":\"Enable this to add functions from another script to this component's callback events\"}" + - '// @ui {"widget":"group_start", "label":"On State Changed Callbacks", "showIf":"editEventCallbacks"}' + - '// @input Component.ScriptComponent customFunctionForOnStateChanged {"hint":"The script containing functions to be called on toggle state change"}' + - '// @input string[] onStateChangedFunctionNames {"hint":"The names for the functions on the provided script, to be called on toggle state change"}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts new file mode 100644 index 00000000..55fadb63 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts @@ -0,0 +1,22 @@ +const TAG = "ConfigurationValidator" +const SIK_VERSION = "0.10.0" + +/** + * This class is responsible for validating the configuration settings for running the Spectacles Interaction Kit (SIK) in Lens Studio. + * + */ +@component +export class ConfigurationValidator extends BaseScriptComponent { + onAwake(): void { + if ( + !global.deviceInfoSystem.isSpectacles() && + global.deviceInfoSystem.isEditor() + ) { + throw new Error( + "To run Spectacles Interaction Kit in the Lens Studio Preview, set the Preview Panel's Device Type Override to Spectacles, or the Simulation Mode to Spectacles (2024)!" + ) + } + + print("SIK Version : " + SIK_VERSION) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts.meta new file mode 100644 index 00000000..6478dd68 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/ConfigurationValidator/ConfigurationValidator.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 1c046036-dc61-4261-b077-b286105ecec8 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts new file mode 100644 index 00000000..ff3f64ed --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts @@ -0,0 +1,587 @@ +import {InteractionPlane} from "../../Components/Interaction/InteractionPlane/InteractionPlane" +import {HandInputData} from "../../Providers/HandInputData/HandInputData" +import {HandType} from "../../Providers/HandInputData/HandType" +import TrackedHand from "../../Providers/HandInputData/TrackedHand" +import TargetProvider, { + InteractableHitInfo, +} from "../../Providers/TargetProvider/TargetProvider" +import Event, {PublicApi} from "../../Utils/Event" +import {validate} from "../../Utils/validate" +import BaseInteractor from "../Interactor/BaseInteractor" +import {DirectTargetProvider} from "../Interactor/DirectTargetProvider" +import {DragProvider} from "../Interactor/DragProvider" +import {HandRayProvider} from "../Interactor/HandRayProvider" +import IndirectTargetProvider from "../Interactor/IndirectTargetProvider" +import { + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "../Interactor/Interactor" +import {PokeTargetProvider} from "../Interactor/PokeTargetProvider" + +/** + * Enum representing the types of raycasts available for hand interactions. + */ +export type RaycastType = + | "AnchorShoulder" + | "AnchorVariableShoulder" + | "LegacySingleCamera" + | "AnchorHead" + | "Proxy" + +export enum FieldTargetingMode { + FarField, + NearField, + BehindNearField, +} + +const TAG = "HandInteractor" +const HANDUI_INTERACTION_DISTANCE_THRESHOLD_CM = 15 + +// The threshold to reject a near field interaction (the default hand ray must be within a 45 degree angle to the plane's normal). +const NEAR_FIELD_ANGLE_THRESHOLD_RADIAN = Math.PI / 4 + +/** + * This class handles hand interactions within the Spectacles Interaction Kit. It provides various configurations for hand types and raycast types. + * + */ +@component +export class HandInteractor extends BaseInteractor { + @ui.group_start("Hand Interactor") + @input + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Left", "left"), + new ComboBoxItem("Right", "right"), + ]) + ) + private handType: string = "right" + @input + @widget( + new ComboBoxWidget([ + new ComboBoxItem("AnchorVariableShoulder", "AnchorVariableShoulder"), + new ComboBoxItem("LegacySingleCamera", "LegacySingleCamera"), + new ComboBoxItem("AnchorHead", "AnchorHead"), + new ComboBoxItem("Proxy", "Proxy"), + ]) + ) + @hint("Forwards the TargetingData received from LensCore's Gesture Module") + private raycastAlgorithm: string = "Proxy" + @input + @hint( + "Forces the usage of Poke targeting when interacting near the nondominant hand's palm." + ) + private forcePokeOnNonDominantPalmProximity: boolean = false + + @input + @hint( + "The radius around the midpoint of the index/thumb to target Interactables." + ) + private directColliderEnterRadius: number = 1 + + @input + @hint( + "The radius around the midpoint of the index/thumb to de-target Interactables (for bistable thresholding)." + ) + private directColliderExitRadius: number = 1.5 + + @input + private directDragThreshold: number = 3.0 + + @input + @hint( + "If true far field interactions will be disable when your hand is not in an interacting pose." + ) + private filterBasedOnIntent: boolean = false + @ui.group_end + protected handProvider: HandInputData = HandInputData.getInstance() + + private onFieldTargetingModeChangedEvent: Event = + new Event() + readonly onFieldTargetingModeChanged: PublicApi = + this.onFieldTargetingModeChangedEvent.publicApi() + + private hand: TrackedHand | undefined + + private handRayProvider: HandRayProvider | undefined + + private indirectTargetProvider: IndirectTargetProvider | undefined + private indirectDragProvider: DragProvider | undefined + + private directTargetProvider: DirectTargetProvider | undefined + private directDragProvider: DragProvider | undefined + + private pokeTargetProvider: PokeTargetProvider | undefined + private activeTargetProvider: TargetProvider | undefined + + private _fieldTargetingMode: FieldTargetingMode = FieldTargetingMode.FarField + private _currentInteractionPlane: InteractionPlane | null = null + + onAwake(): void { + this.inputType = + this.handType === "left" + ? InteractorInputType.LeftHand + : InteractorInputType.RightHand + + this.hand = this.handProvider.getHand(this.handType as HandType) + + this.handRayProvider = new HandRayProvider({ + handType: this.handType as HandType, + raycastAlgorithm: this.raycastAlgorithm as RaycastType, + handInteractor: this, + }) + + this.indirectTargetProvider = new IndirectTargetProvider( + this as BaseInteractor, + { + maxRayDistance: this.maxRaycastDistance, + rayProvider: this.handRayProvider, + targetingVolumeMultiplier: this.indirectTargetingVolumeMultiplier, + shouldPreventTargetUpdate: () => { + return this.preventTargetUpdate() + }, + spherecastRadii: this.spherecastRadii, + spherecastDistanceThresholds: this.spherecastDistanceThresholds, + } + ) + this.indirectDragProvider = new DragProvider(this.indirectDragThreshold) + + if (this.directColliderEnterRadius >= this.directColliderExitRadius) { + throw Error( + `The direct collider enter radius should be less than the exit radius for bistable threshold behavior.` + ) + } + + this.directTargetProvider = new DirectTargetProvider( + this as BaseInteractor, + { + handType: this.handType as HandType, + shouldPreventTargetUpdate: () => { + return this.preventTargetUpdate() + }, + debugEnabled: this.drawDebug, + colliderEnterRadius: this.directColliderEnterRadius, + colliderExitRadius: this.directColliderExitRadius, + } + ) + this.directDragProvider = new DragProvider(this.directDragThreshold) + + this.pokeTargetProvider = new PokeTargetProvider({ + handType: this.handType as HandType, + drawDebug: this.drawDebug, + }) + + this.activeTargetProvider = this.indirectTargetProvider + this.dragProvider = this.indirectDragProvider + + this.defineSceneEvents() + } + + get startPoint(): vec3 | null { + return this.activeTargetProvider?.startPoint ?? null + } + + get endPoint(): vec3 | null { + return this.activeTargetProvider?.endPoint ?? null + } + + get direction(): vec3 | null { + const proposedDirection = + this.activeTargetingMode === TargetingMode.Poke + ? this.pokeTargetProvider?.direction + : this.indirectTargetProvider?.direction + + return proposedDirection ?? null + } + + get orientation(): quat | null { + return this.hand?.getPinchDirection() ?? null + } + + get distanceToTarget(): number | null { + return ( + this.activeTargetProvider?.currentInteractableHitInfo?.hit.distance ?? + null + ) + } + + get targetHitPosition(): vec3 | null { + return ( + this.activeTargetProvider?.currentInteractableHitInfo?.hit.position ?? + null + ) + } + + get targetHitInfo(): InteractableHitInfo | null { + return this.activeTargetProvider?.currentInteractableHitInfo ?? null + } + + get activeTargetingMode(): TargetingMode { + return this.activeTargetProvider?.targetingMode ?? TargetingMode.None + } + + get maxRaycastDistance(): number { + return this._maxRaycastDistance + } + + get interactionStrength(): number | null { + const proposedStrength = + this.activeTargetingMode === TargetingMode.Poke + ? this.pokeTargetProvider?.getInteractionStrength() + : this.hand?.getPinchStrength() + + return proposedStrength ?? null + } + + /** + * Set if the Interactor is should draw a debug gizmo of collider/raycasts in the scene. + */ + set drawDebug(debug: boolean) { + validate(this.indirectTargetProvider) + validate(this.directTargetProvider) + validate(this.pokeTargetProvider) + this._drawDebug = debug + + this.indirectTargetProvider.drawDebug = debug + this.directTargetProvider.drawDebug = debug + this.pokeTargetProvider.drawDebug = debug + } + + /** + * @returns if the Interactor is currently drawing a debug gizmo of collider/raycasts in the scene. + */ + get drawDebug(): boolean { + return this._drawDebug + } + + override updateState(): void { + super.updateState() + this.updateTarget() + this.updateDragVector() + } + + protected override clearDragProviders(): void { + this.directDragProvider?.clear() + this.indirectDragProvider?.clear() + this.planecastDragProvider.clear() + } + + override get planecastDragVector(): vec3 | null { + // If the hand has been recently found, return vec3.zero() to allow time to determine if pinch is sustained. + if (this.hand === undefined) return vec3.zero() + return this.hand.isRecentlyFound() + ? vec3.zero() + : this.planecastDragProvider.currentDragVector + } + + protected override set currentDragVector(dragVector: vec3 | null) { + this._currentDragVector = dragVector + } + + override get currentDragVector(): vec3 | null { + // If the hand has been recently found, return vec3.zero() to allow time to determine if pinch is sustained. + if (this.hand === undefined) return vec3.zero() + return this.hand.isRecentlyFound() ? vec3.zero() : this._currentDragVector + } + + override get planecastPoint(): vec3 | null { + if (this.activeTargetProvider === this.indirectTargetProvider) { + return this.raycastPlaneIntersection(this.currentInteractable) + } else { + return this.colliderPlaneIntersection(this.currentInteractable) + } + } + + /** + * Clears an InteractionPlane from the cache of planes if it is nearby. + * @param plane + */ + clearInteractionPlane(plane: InteractionPlane) { + this.directTargetProvider.clearInteractionPlane(plane) + + const fieldTargetingMode = this.updateNearestPlane() + + if (this.fieldTargetingMode !== fieldTargetingMode) { + this._fieldTargetingMode = fieldTargetingMode + this.onFieldTargetingModeChangedEvent.invoke(fieldTargetingMode) + } + } + + get fieldTargetingMode(): FieldTargetingMode { + return this._fieldTargetingMode + } + + get currentInteractionPlane(): InteractionPlane | null { + return this._currentInteractionPlane + } + + /** + * @returns a normalized value between 0 and 1 representing proximity to an InteractionPlane when in near field mode, + * null if in FarField mode. + */ + get nearFieldProximity(): number | null { + if (this.fieldTargetingMode === FieldTargetingMode.FarField) { + return null + } + + if (this.fieldTargetingMode === FieldTargetingMode.NearField) { + return ( + 1 - + this.currentInteractionPlane.projectPoint(this.hand.indexTip.position) + .distance / + this.currentInteractionPlane.proximityDistance + ) + } else { + return ( + 1 + + this.currentInteractionPlane.projectPoint(this.hand.indexTip.position) + .distance / + this.currentInteractionPlane.behindDistance + ) + } + } + + isTargeting(): boolean { + return ( + (this.hand?.isInTargetingPose() && + (!this.filterBasedOnIntent || + this.hand?.targetingData.intendsToTarget)) ?? + false + ) + } + + /** + * Returns true if the hand interactor and the hand it is associated with are both enabled. + */ + isActive(): boolean { + return ( + this.enabled && + (this.hand?.enabled ?? false) && + (!this.filterBasedOnIntent || + this.activeTargetProvider !== this.indirectTargetProvider || + this.isTargeting()) + ) + } + + /** + * Returns true if the hand this interactor is associated with is both enabled and tracked. + */ + isTracking(): boolean { + validate(this.hand) + + return this.hand.enabled && this.hand.isTracked() + } + + /** + * Returns true if the hand is targeting via far field raycasting. + */ + isFarField(): boolean { + return this.fieldTargetingMode === FieldTargetingMode.FarField + } + + protected clearCurrentHitInfo(): void { + this.indirectTargetProvider?.clearCurrentInteractableHitInfo() + this.directTargetProvider?.clearCurrentInteractableHitInfo() + this.pokeTargetProvider?.clearCurrentInteractableHitInfo() + } + + /** @inheritdoc */ + override setInputEnabled(enabled: boolean): void { + super.setInputEnabled(enabled) + this.handProvider.getHand(this.handType as HandType).setEnabled(enabled) + } + + private defineSceneEvents() { + this.createEvent("OnDestroyEvent").bind(() => { + this.onDestroy() + }) + } + + private updateTarget(): void { + if (!this.isActive()) { + this.indirectTargetProvider?.reset() + return + } + + // If the user is mid-interaction, do not hijack raycast logic to avoid jerky interactions. + if (!this.preventTargetUpdate()) { + const fieldTargetingMode = this.updateNearestPlane() + + if (this.fieldTargetingMode !== fieldTargetingMode) { + this._fieldTargetingMode = fieldTargetingMode + this.onFieldTargetingModeChangedEvent.invoke(fieldTargetingMode) + } + } + + this.pokeTargetProvider?.update() + + // Workaround to get onTriggerExit event on poke end, since poke doesn't use hover + // Otherwise, the interaction manager will by default do an onTriggerCanceled event. + if ( + !this.isPoking() && + this.previousTrigger === InteractorTriggerType.Poke + ) { + this.currentTrigger = InteractorTriggerType.None + this.currentInteractable = this.previousInteractable + return + } + + if (this.isPoking()) { + this.activeTargetProvider = this.pokeTargetProvider + this.dragProvider = this.directDragProvider + } else { + this.directTargetProvider?.update() + this.indirectTargetProvider?.update() + + if ((this.previousTrigger & InteractorTriggerType.Select) === 0) { + if (this.pokeTargetProvider?.hasTarget()) { + this.activeTargetProvider = this.pokeTargetProvider + this.dragProvider = this.directDragProvider + } else if (this.directTargetProvider?.hasTarget()) { + this.activeTargetProvider = this.directTargetProvider + this.dragProvider = this.directDragProvider + } else { + this.activeTargetProvider = this.indirectTargetProvider + // During a near field raycast, use direct drag threshold. + this.dragProvider = + this.fieldTargetingMode === FieldTargetingMode.FarField + ? this.indirectDragProvider + : this.directDragProvider + } + } + } + + if (this.isPoking()) { + this.currentTrigger = InteractorTriggerType.Poke + } else if ( + this.hand && + this.hand.isPinching() && + (this.previousTrigger & InteractorTriggerType.Poke) === 0 + ) { + this.currentTrigger = InteractorTriggerType.Pinch + } else { + this.currentTrigger = InteractorTriggerType.None + } + + this.currentInteractable = + this.activeTargetProvider?.currentInteractableHitInfo?.interactable ?? + null + } + + private isPoking(): boolean { + return ( + this.activeTargetProvider === this.pokeTargetProvider && + (this.pokeTargetProvider?.isTriggering() ?? false) + ) + } + + /** + * @returns if we should prevent any updates to the currently targeted item. + * In the case of pinching (indirect or direct) or poking, we prevent updates to the targeting system. + * Otherwise, allow updates to the targeted item. + */ + private preventTargetUpdate(): boolean { + return ( + this.hand !== undefined && (this.hand.isPinching() || this.isPoking()) + ) + } + + private isPokingNonDominantHand(): boolean { + return ( + this.forcePokeOnNonDominantPalmProximity && this.isNearNonDominantHand() + ) + } + + private isNearNonDominantHand(): boolean { + const nonDominantHand = this.handProvider.getNonDominantHand() + const dominantHand = this.handProvider.getDominantHand() + + /** If either the dominant or non-dominant hand is not tracked, + * or if both hands are in an active targeting pose, + * then the user is not intending to interact with the nondominant hand UI. + */ + if ( + !nonDominantHand.isTracked() || + !dominantHand.isTracked() || + (dominantHand.isInTargetingPose() && nonDominantHand.isInTargetingPose()) + ) { + return false + } + + // Detect if dominant index is within interaction proximity to non-dominant palm + const palmCenter = nonDominantHand.getPalmCenter() + const dominantIndexTip = dominantHand.indexTip?.position + + return ( + palmCenter !== null && + dominantIndexTip !== undefined && + palmCenter.distanceSquared(dominantIndexTip) < + HANDUI_INTERACTION_DISTANCE_THRESHOLD_CM * + HANDUI_INTERACTION_DISTANCE_THRESHOLD_CM + ) + } + + // Check for cached planes (via direct collider overlap), choosing the nearest plane if multiple are available. + private updateNearestPlane(): FieldTargetingMode { + const interactionPlanes = this.directTargetProvider.currentInteractionPlanes + + let nearestPlane: InteractionPlane | null = null + let distance = Number.POSITIVE_INFINITY + + const planeRaycastLocus = this.directTargetProvider.colliderPosition + if (planeRaycastLocus === null) { + this._currentInteractionPlane = null + return FieldTargetingMode.FarField + } + + for (const interactionPlane of interactionPlanes) { + const planeProjection = interactionPlane.projectPoint(planeRaycastLocus) + + // Check if the locus is within the interaction zone or behind zone, then check if the locus is closer to this plane than prior planes. + const isNearPlane = + planeProjection !== null && + (planeProjection.isWithinInteractionZone || + planeProjection.isWithinBehindZone) && + Math.abs(planeProjection.distance) < distance + + const normal = interactionPlane.normal + const handDirection = this.handRayProvider.raycast.getRay() + + // Check if the hand direction faces the plane enough to target the plane. + const isTowardPlane = + handDirection !== null && + handDirection.direction.angleTo(normal.uniformScale(-1)) < + NEAR_FIELD_ANGLE_THRESHOLD_RADIAN + + // If both checks are true, cache the plane. + if (isNearPlane && isTowardPlane) { + nearestPlane = interactionPlane + distance = planeProjection.distance + } + } + + this._currentInteractionPlane = nearestPlane + + // Return to far field targeting if no nearby planes were found. + if (this._currentInteractionPlane === null) { + return FieldTargetingMode.FarField + } + + // Check if the index tip is past the plane for purpose of visuals. + const indexPoint = this.hand.indexTip.position + const indexProjection = + this._currentInteractionPlane.projectPoint(indexPoint) + const isIndexInBehindZone = indexProjection.isWithinBehindZone + + return isIndexInBehindZone + ? FieldTargetingMode.BehindNearField + : FieldTargetingMode.NearField + } + + private onDestroy() { + this.release() + this.directTargetProvider?.destroy() + this.indirectTargetProvider?.destroy() + this.pokeTargetProvider?.destroy() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts.meta new file mode 100644 index 00000000..418db837 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/HandInteractor/HandInteractor.ts.meta @@ -0,0 +1,94 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 714912bc-574d-427d-aaa4-b3fa65e126e8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _drawDebug: false + _maxRaycastDistance: false + directColliderEnterRadius: false + directColliderExitRadius: false + directDragThreshold: false + filterBasedOnIntent: false + forcePokeOnNonDominantPalmProximity: false + handType: false + indirectDragThreshold: false + indirectTargetingVolumeMultiplier: false + raycastAlgorithm: false + sphereCastEnabled: false + spherecastDistanceThresholds: false + spherecastRadii: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - handType: right + raycastAlgorithm: Proxy + sphereCastEnabled: false + indirectTargetingVolumeMultiplier: ! 1.000000 + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectDragThreshold: ! 40.000000 + directDragThreshold: ! 3.000000 + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + _drawDebug: false + filterBasedOnIntent: false + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Interactor"}' + - // @input bool _drawDebug + - '// @ui {"widget":"group_start", "label":"Spherecast Configuration"}' + - // @input bool sphereCastEnabled + - '// @input number[] spherecastRadii = "{0.5, 2.0, 4.0}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @input number[] spherecastDistanceThresholds = "{0, 12, 30}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Targeting Configuration"}' + - // @input float _maxRaycastDistance = 500 + - // @input float indirectTargetingVolumeMultiplier = 1 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Indirect Drag Provider"}' + - // @input float indirectDragThreshold = 3 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Hand Interactor"}' + - '// @input string handType = "right" {"widget":"combobox", "values":[{"label":"Left", "value":"left"}, {"label":"Right", "value":"right"}]}' + - "// @input string raycastAlgorithm = \"Proxy\" {\"hint\":\"Forwards the TargetingData received from LensCore's Gesture Module\", \"widget\":\"combobox\", \"values\":[{\"label\":\"AnchorVariableShoulder\", \"value\":\"AnchorVariableShoulder\"}, {\"label\":\"LegacySingleCamera\", \"value\":\"LegacySingleCamera\"}, {\"label\":\"AnchorHead\", \"value\":\"AnchorHead\"}, {\"label\":\"Proxy\", \"value\":\"Proxy\"}]}" + - "// @input bool forcePokeOnNonDominantPalmProximity {\"hint\":\"Forces the usage of Poke targeting when interacting near the nondominant hand's palm.\"}" + - '// @input float directColliderEnterRadius = 1 {"hint":"The radius around the midpoint of the index/thumb to target Interactables."}' + - '// @input float directColliderExitRadius = 1.5 {"hint":"The radius around the midpoint of the index/thumb to de-target Interactables (for bistable thresholding)."}' + - // @input float directDragThreshold = 3 + - '// @input bool filterBasedOnIntent {"hint":"If true far field interactions will be disable when your hand is not in an interacting pose."}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts new file mode 100644 index 00000000..19276e35 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts @@ -0,0 +1,175 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {InteractorInputType} from "../Interactor/Interactor" +import { + DispatchableEventArgs, + InteractableEventName, + InteractorEvent, +} from "../Interactor/InteractorEvent" + +export type SceneObjectMap = Map + +export type StoppableEventArgs = DispatchableEventArgs & { + propagationStopped: boolean +} + +/** + * Dispatches an event in 3 phases: + * - Trickle-down: the event descends the hierarchy, from the first + * interactable ancestor of the target to its parent + * - Target: the event is sent to the target + * - Bubble-up: the event ascends the hierarchy, from the target's parent + * to its first interactable ancestor + */ +export class EventDispatcher { + constructor(private sceneObjectMap: SceneObjectMap) {} + + /** + * Triggers the event propagation + * @param eventArgs - provides the interactor, the target and the callback name + */ + dispatch(eventArgs: DispatchableEventArgs): void { + if ( + eventArgs.target.allowMultipleInteractors === false && + (eventArgs.target.hoveringInteractor & eventArgs.interactor.inputType) === + 0 + ) { + // Don't dispatch the event if multiple interactors aren't allowed & there's already an active interactor + if (eventArgs.target.hoveringInteractor !== InteractorInputType.None) { + return + } + + // Cover the edge case where an interactable that doesn't allow multiple interactors has multiple possible interactors + // The active interactor exits so we can dispatch events on the interactor that previously had its events blocked + // However, we need to send enter events to update the hovering/triggering interactor input type. + if ( + eventArgs.target.hoveringInteractor === InteractorInputType.None && + eventArgs.eventName === "HoverUpdate" + ) { + eventArgs.eventName = "HoverEnter" + } else if ( + eventArgs.target.triggeringInteractor === InteractorInputType.None && + eventArgs.eventName === "TriggerUpdate" + ) { + eventArgs.eventName = "TriggerStart" + } + } + + const ancestors: Interactable[] = [] + this.getInteractableAncestors( + eventArgs.target.sceneObject.getParent(), + ancestors, + eventArgs.origin?.sceneObject + ) + + const stoppableEventArgs = { + ...eventArgs, + propagationStopped: false, + } + + this.trickleDown(ancestors, stoppableEventArgs) + this.target(stoppableEventArgs) + this.bubbleUp(ancestors, stoppableEventArgs) + } + + private getInteractableAncestors( + node: SceneObject | null, + ancestors: Interactable[], + excludedNode: SceneObject | undefined = undefined + ) { + if (node === null || node === excludedNode) { + return + } + + const interactable = this.sceneObjectMap.get(node) + if (interactable !== undefined) { + ancestors.push(interactable) + } + + this.getInteractableAncestors(node.getParent(), ancestors, excludedNode) + } + + private trickleDown( + ancestors: Interactable[], + eventArgs: StoppableEventArgs + ) { + for (let i = ancestors.length - 1; i >= 0; i--) { + if (eventArgs.propagationStopped) { + break + } + + const event: InteractorEvent = { + ...eventArgs, + interactable: ancestors[i], + propagationPhase: "TrickleDown", + stopPropagation: () => this.stopPropagation(eventArgs), + } + this.invokeEvent(event, eventArgs.eventName) + } + } + + private target(eventArgs: StoppableEventArgs) { + if (eventArgs.propagationStopped) { + return + } + + const event: InteractorEvent = { + ...eventArgs, + interactable: eventArgs.target, + propagationPhase: "Target", + stopPropagation: () => this.stopPropagation(eventArgs), + } + this.invokeEvent(event, eventArgs.eventName) + } + + private bubbleUp(ancestors: Interactable[], eventArgs: StoppableEventArgs) { + for (let i = 0; i < ancestors.length; i++) { + if (eventArgs.propagationStopped) { + break + } + + const event: InteractorEvent = { + ...eventArgs, + interactable: ancestors[i], + propagationPhase: "BubbleUp", + stopPropagation: () => this.stopPropagation(eventArgs), + } + this.invokeEvent(event, eventArgs.eventName) + } + } + + private stopPropagation(eventArgs: StoppableEventArgs) { + eventArgs.propagationStopped = true + } + + private invokeEvent( + event: InteractorEvent, + eventName: InteractableEventName + ) { + const interactable = event.interactable + switch (eventName) { + case "HoverEnter": + interactable.hoverEnter(event) + break + case "HoverUpdate": + interactable.hoverUpdate(event) + break + case "HoverExit": + interactable.hoverExit(event) + break + case "TriggerStart": + interactable.triggerStart(event) + break + case "TriggerUpdate": + interactable.triggerUpdate(event) + break + case "TriggerEnd": + interactable.triggerEnd(event) + break + case "TriggerCanceled": + interactable.triggerCanceled(event) + break + default: + throw new Error(`Callback ${eventName} is not supported`) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts.meta new file mode 100644 index 00000000..f2bd98e7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/EventDispatcher.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 8b80abb6-a127-4ba0-ae0c-bd489c9c0934 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 8b80abb6-a127-4ba0-ae0c-bd489c9c0934 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b7910ab1-5a20-4fb0-8cd3-5abee397d4b8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts new file mode 100644 index 00000000..6c7b7314 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts @@ -0,0 +1,650 @@ +import NativeLogger from "../../Utils/NativeLogger" +import { + Interactor, + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "../Interactor/Interactor" + +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {InteractionPlane} from "../../Components/Interaction/InteractionPlane/InteractionPlane" +import {Singleton} from "../../Decorators/Singleton" +import {LensConfig} from "../../Utils/LensConfig" +import {getSafeReference} from "../../Utils/SafeReference" +import {HandInteractor} from "../HandInteractor/HandInteractor" +import BaseInteractor from "../Interactor/BaseInteractor" +import {DispatchableEventArgs} from "../Interactor/InteractorEvent" +import {EventDispatcher} from "./EventDispatcher" + +const TAG = "InteractionManager" + +/** + * Manages interactions between {@link Interactor} and {@link Interactable}, and + * decides if events need to be transmitted to {@link Interactable} + */ +@Singleton +export class InteractionManager { + public static getInstance: () => InteractionManager + + // Native Logging + private log = new NativeLogger(TAG) + + private interactors = new Set() + private interactables = new Set() + private interactionPlanes = new Set() + + private interactableSceneObjects = new Map() + private colliderToInteractableMap = new Map() + private eventDispatcher = new EventDispatcher(this.interactableSceneObjects) + + private _debugModeEnabled = false + + /* + shouldEnableNonMobileInteractors is nullable because we use this as a cached class-level condition to + compare against the function-level condition in disableOtherInteractorsIfMobileInputTypeIsDetected(). + Initializing to null here ensures the first frame always initializes the interactor's activeness properly. + */ + private shouldEnableNonMobileInteractors: boolean | null = null + + constructor() { + this.defineScriptEvents() + } + + /** + * Adds an {@link Interactor} to the interaction manager's registry, + * so it can be used to determine which {interactors} are interacting + * with interactables. + * @param interactor The {@link Interactor} to register. + */ + registerInteractor(interactor: BaseInteractor): void { + if (interactor === null || interactor === undefined) { + this.log.e("Cannot register null or uninitialized interactor.") + return + } + + if (this.debugModeEnabled) { + interactor.drawDebug = this.debugModeEnabled + } + + this.interactors.add(interactor) + this.log.d(`Registered interactor "${interactor.sceneObject.name}"`) + } + + /** + * Removes an {@link Interactor} from the interaction manager's registry, + * so that it will no longer be considered when determining which + * interactors are interacting with interactables. + * @param interactor The {@link Interactor} to deregister. + */ + deregisterInteractor(interactor: BaseInteractor): void { + if (interactor === null || interactor === undefined) { + this.log.e("Cannot deregister null or uninitialized interactor.") + return + } + if (this.interactors.delete(interactor)) { + this.log.d(`Deregistered interactor "${interactor.sceneObject.name}"`) + } + } + + /** + * Returns all interactors of matching interactor type + * @param inputType The {@link InteractorInputType} to filter interactors by. + * @returns An array of interactors that match the input type. + */ + getInteractorsByType(inputType: InteractorInputType): Interactor[] { + let returnValue: Interactor[] = [] + this.interactors.forEach((interactor: Interactor) => { + if ((interactor.inputType & inputType) !== 0) { + returnValue.push(interactor) + } + }) + + return returnValue + } + + /** + * Returns all interactors that are currently targeting + * @returns An array of interactors that are targeting. + */ + getTargetingInteractors(): Interactor[] { + let returnValue: Interactor[] = [] + this.interactors.forEach((interactor: Interactor) => { + if (interactor.isTargeting()) { + returnValue.push(interactor) + } + }) + + return returnValue + } + + /** + * Adds an {@link InteractionPlane} to the interaction manager's registry, + * so it can be used to determine which {interactors} are interacting + * with interaction planes. + * @param interactionPlane The {@link InteractionPlane} to register. + */ + registerInteractionPlane(interactionPlane: InteractionPlane): void { + if (interactionPlane === null || interactionPlane === undefined) { + this.log.e("Cannot register null or uninitialized interaction plane.") + return + } + this.interactionPlanes.add(interactionPlane) + + if (this.debugModeEnabled) { + interactionPlane.drawDebug = true + } + + this.log.d( + `Registered interaction plane "${interactionPlane.sceneObject.name}"` + ) + } + + /** + * Removes an {@link InteractionPlane} from the interaction manager's registry. + * @param interactionPlane The {@link InteractionPlane} to deregister. + */ + deregisterInteractionPlane(interactionPlane: InteractionPlane): void { + if (interactionPlane === null || interactionPlane === undefined) { + this.log.e("Cannot deregister null or uninitialized interaction plane.") + return + } + + /* + * When an Interactable is deregistered, check our list of Interactors and clear their current InteractionPlane + * if it is the same as the InteractionPlane that was just deregistered + */ + const handInteractors = this.getInteractorsByType( + InteractorInputType.BothHands + ) as HandInteractor[] + for (const handInteractor of handInteractors) { + handInteractor.clearInteractionPlane(interactionPlane) + } + + if (this.interactionPlanes.delete(interactionPlane)) { + this.log.d( + `Deregistered interaciton plane "${interactionPlane.sceneObject.name}"` + ) + } + } + + getInteractionPlanes(): InteractionPlane[] { + const interactionPlanes = [] + for (const plane of this.interactionPlanes) { + interactionPlanes.push(plane) + } + return interactionPlanes + } + + /** + * Adds an {@link Interactable} to the interaction manager's registry. + * This registry helps speed up calculations when raycasting + * objects in the scene. + * @param interactable The {@link Interactable} to register. + */ + registerInteractable(interactable: Interactable): void { + if (interactable === null || interactable === undefined) { + this.log.e("Cannot register null or uninitialized interactable.") + return + } + this.interactables.add(interactable) + this.interactableSceneObjects.set(interactable.sceneObject, interactable) + const colliders = this.findOrCreateColliderForInteractable(interactable) + for (let i = 0; i < colliders.length; i++) { + this.colliderToInteractableMap.set(colliders[i], interactable) + } + + if (this.debugModeEnabled) { + for (const collider of colliders) { + collider.debugDrawEnabled = this.debugModeEnabled + } + } + + this.log.d( + `Registered interactable "${interactable.sceneObject.name}" with ${colliders.length} colliders` + ) + } + + /** + * Removes an {@link Interactable} from the interaction manager's registry. + * @param interactable The {@link Interactable} to deregister. + */ + deregisterInteractable(interactable: Interactable): void { + if (interactable === null || interactable === undefined) { + this.log.e("Cannot deregister null or uninitialized interactable.") + return + } + + /* + * When an Interactable is deregistered, check our list of Interactors and clear their current Interactable + * if it is the same as the Interactable that was just deregistered + */ + for (const interactor of this.interactors) { + if ( + interactor.currentInteractable !== null && + interactable === interactor.currentInteractable + ) { + interactor.clearCurrentInteractable() + } + } + + if ( + this.interactables.delete(interactable) && + this.interactableSceneObjects.delete(interactable.sceneObject) + ) { + this.log.d(`Deregistered interactable "${interactable.sceneObject.name}"`) + } + } + + /** + * Returns an {@link Interactable} by the collider attached to it. + * This is an optimization to reduce expensive getComponent calls. + * @param collider The {@link ColliderComponent} to filter interactables by. + * @returns The interactable that matches the collider. + */ + getInteractableByCollider(collider: ColliderComponent): Interactable | null { + const interactable = this.colliderToInteractableMap.get(collider) ?? null + if (!interactable) { + return null + } + if (getSafeReference(interactable.sceneObject) === null) { + this.colliderToInteractableMap.delete(collider) + } + + if (interactable?.sceneObject.enabled) { + return interactable + } else { + return null + } + } + + /** + * Returns the interactable of the passed {@link SceneObject}. + * @param sceneObject The {@link SceneObject} to filter interactables by. + * @returns The interactable that matches the scene object. + */ + getInteractableBySceneObject(sceneObject: SceneObject): Interactable | null { + const interactable = this.interactableSceneObjects.get(sceneObject) ?? null + + if (!interactable) { + return null + } + + if (getSafeReference(interactable.sceneObject) === null) { + this.interactableSceneObjects.delete(sceneObject) + } + + return interactable + } + + /** + * @deprecated use `getInteractablesThatTarget(targetingMode) instead.` + * @param targetingMode the targeting mode that the interactable(s) are configured to + */ + getInteractablesByTargetingMode( + targetingMode: TargetingMode + ): Interactable[] { + return this.getInteractablesThatTarget(targetingMode) + } + + /** + * Returns all interactables that are set to the passed targeting mode. + * @param targetingMode - {@link TargetingMode} to filter interactables by + * @returns an array of interactables that match the targeting mode + */ + getInteractablesThatTarget(targetingMode: TargetingMode): Interactable[] { + const returnArray: Interactable[] = [] + this.interactables.forEach((interactable: Interactable) => { + if ((interactable.targetingMode & targetingMode) !== 0) { + returnArray.push(interactable) + } + }) + return returnArray + } + + /** + * Dispatches an event in 3 phases: + * - Trickle-down: the event descends the hierarchy, from the first + * interactable ancestor of the target to its parent + * - Target: the event is sent to the target + * - Bubble-up: the event ascends the hierarchy, from the target's parent + * to its first interactable ancestor + * + * The {@link DispatchableEventArgs | eventArgs.origin} is not included in the propagation path and + * the dispatch starts at {@link DispatchableEventArgs | eventArgs.origin} child. + * @param eventArgs The event arguments to dispatch. + */ + dispatchEvent(eventArgs: DispatchableEventArgs): void { + this.eventDispatcher.dispatch(eventArgs) + } + + set debugModeEnabled(enabled: boolean) { + this._debugModeEnabled = enabled + + for (const interactor of this.interactors.keys()) { + interactor.drawDebug = enabled + } + + for (const collider of this.colliderToInteractableMap.keys()) { + collider.debugDrawEnabled = enabled + } + + for (const plane of this.interactionPlanes.keys()) { + plane.drawDebug = enabled + } + } + + get debugModeEnabled(): boolean { + return this._debugModeEnabled + } + + private defineScriptEvents(): void { + LensConfig.getInstance() + .updateDispatcher.createUpdateEvent("InteractionManagerUpdateEvent") + .bind(() => this.update()) + } + + /** + * Iterates through all the interactors, determine which interactables + * are being interacted with, and send events to them + */ + private update() { + this.disableOtherInteractorsIfMobileInputTypeIsDetected() + + // Update interactors + this.updateInteractors() + + // Process interactor events + this.interactors.forEach((interactor) => this.processEvents(interactor)) + } + + private processEvents(interactor: Interactor) { + if (!interactor.enabled) { + /** + * Check to see if we were triggering an interactable before + * losing tracking / being disabled. If we were, send a cancel + * event to keep the interactable up to date. + */ + + if (interactor.previousInteractable) { + if ((InteractorTriggerType.Select & interactor.previousTrigger) !== 0) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "TriggerCanceled", + }) + } + if ( + (interactor.inputType & + interactor.previousInteractable.hoveringInteractor) !== + 0 + ) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "HoverExit", + }) + } + } + + return + } + + // Process events + if (interactor.currentInteractable) { + this.processHoverEvents(interactor) + this.processTriggerEvents(interactor) + } else if (interactor.previousInteractable) { + if ( + (interactor.inputType & + interactor.previousInteractable.hoveringInteractor) !== + 0 + ) { + // If it was previously targeted + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "HoverExit", + }) + } + + // If the interactor is no longer interacting with an interactable that it was previously interacting, + // the trigger has been cancelled rather than ending fully. + if (interactor.previousTrigger !== InteractorTriggerType.None) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "TriggerCanceled", + }) + } + } + } + + private updateInteractors() { + this.interactors.forEach((interactor: Interactor) => { + interactor.updateState() + + if (interactor.currentInteractable !== interactor.previousInteractable) { + interactor.currentInteractableChanged() + } + + if (!interactor.isActive()) { + /** + * Check to see if we were triggering an interactable before + * losing tracking / being disabled. If we were, send a cancel + * event to keep the interactable up to date. + */ + if (interactor.previousInteractable) { + if ( + (InteractorTriggerType.Select & interactor.previousTrigger) !== + 0 + ) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "TriggerCanceled", + }) + } + + if ( + (interactor.inputType & + interactor.previousInteractable.hoveringInteractor) !== + 0 + ) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "HoverExit", + }) + } + } + return + } + }) + } + + private processHoverEvents(interactor: Interactor) { + if (interactor.currentInteractable === null) { + return + } + + // If first time targeted + if (interactor.previousInteractable !== interactor.currentInteractable) { + // Alert previous interactable that we've left it + if (interactor.previousInteractable !== null) { + if ( + (interactor.inputType & + interactor.previousInteractable.hoveringInteractor) !== + 0 + ) { + this.eventDispatcher.dispatch({ + target: interactor.previousInteractable, + interactor: interactor, + eventName: "HoverExit", + }) + } + } + + this.eventDispatcher.dispatch({ + target: interactor.currentInteractable, + interactor: interactor, + eventName: "HoverEnter", + }) + } else { + this.eventDispatcher.dispatch({ + target: interactor.currentInteractable, + interactor: interactor, + eventName: "HoverUpdate", + }) + } + } + + private processTriggerEvents(interactor: Interactor) { + if (interactor.currentInteractable === null) { + return + } + + const previousTrigger = interactor.previousTrigger + const currentTrigger = interactor.currentTrigger + + const eventArgs = { + target: interactor.currentInteractable, + interactor: interactor, + } + + if ( + previousTrigger === InteractorTriggerType.None && + (InteractorTriggerType.Select & currentTrigger) !== 0 + ) { + this.eventDispatcher.dispatch({ + ...eventArgs, + eventName: "TriggerStart", + }) + } else if ( + previousTrigger === currentTrigger && + currentTrigger !== InteractorTriggerType.None + ) { + this.eventDispatcher.dispatch({ + ...eventArgs, + eventName: "TriggerUpdate", + }) + } else if ( + previousTrigger !== InteractorTriggerType.None && + // This check ensures that the interactor being in a 'triggering' state only invokes onTriggerEnd of an Interactable + // if the trigger was actually applied to the Interactable in a previous update. + interactor.previousInteractable !== null + ) { + this.eventDispatcher.dispatch({ + ...eventArgs, + eventName: "TriggerEnd", + }) + } + } + + /** + * Looks for colliders in the descendants of the param {@link Interactable} + * if not collider is found, one is created. + * @param interactable the interactable for which to find or create the collider + * @returns an array of {@link ColliderComponent} + */ + private findOrCreateColliderForInteractable( + interactable: Interactable + ): ColliderComponent[] { + let colliders = interactable.colliders + let sceneObject = interactable.sceneObject + if (colliders.length === 0) { + colliders = this.findCollidersForSceneObject(sceneObject, colliders, true) + } + if (colliders.length === 0) { + this.log.d( + `No ColliderComponent in ${sceneObject.name}'s hierarchy. Creating one...` + ) + + colliders.push(sceneObject.createComponent("Physics.ColliderComponent")) + } + interactable.colliders = colliders + return colliders + } + + /** + * Finds all colliders in the descendants of an {@link SceneObject} with the following rules: + * - If the current {@link SceneObject} is not root and has an {@link Interactable} component, + * we stop the search as we do not want to associate this child's colliders. + * - Else we accumulate all {@link ColliderComponent} and return them + * @param sceneObject the {@link SceneObject} for which to look for colliders + * - If some colliders are already registered + * @param colliders the current array of colliders + * @param isRoot whether the sceneObject is the root of the search + * @returns an array of {@link ColliderComponent} + */ + private findCollidersForSceneObject( + sceneObject: SceneObject, + colliders: ColliderComponent[], + isRoot: boolean = false + ): ColliderComponent[] { + const interactable = sceneObject.getComponent(Interactable.getTypeName()) + + if (interactable !== null && !isRoot) { + return colliders + } + + const foundColliders = sceneObject.getComponents( + "Physics.ColliderComponent" + ) + const collidersRegistered = + foundColliders.find((collider: ColliderComponent) => + this.colliderToInteractableMap.has(collider) + ) !== undefined + + if (collidersRegistered) { + this.log.w( + `Some colliders in ${sceneObject.name} were already registered with an Interactable object.` + ) + } + + colliders.push(...foundColliders) + + const childrenCount = sceneObject.getChildrenCount() + for (let i = 0; i < childrenCount; i++) { + this.findCollidersForSceneObject(sceneObject.getChild(i), colliders) + } + + return colliders + } + + private disableOtherInteractorsIfMobileInputTypeIsDetected() { + const mobileInteractors = this.getInteractorsByType( + InteractorInputType.Mobile + ) + if (mobileInteractors.length === 0) { + return + } + const handInteractors = this.getInteractorsByType( + InteractorInputType.BothHands + ) + const shouldEnableOtherInteractors = !mobileInteractors[0].isActive() + + if ( + this.shouldEnableNonMobileInteractors !== shouldEnableOtherInteractors + ) { + this.shouldEnableNonMobileInteractors = shouldEnableOtherInteractors + + if (this.shouldEnableNonMobileInteractors) { + this.log.d("Switching to non-Mobile interactors.") + } else { + this.log.d("Switching to Mobile interactor.") + } + + handInteractors.forEach((handInteractor: Interactor) => + handInteractor.setInputEnabled(shouldEnableOtherInteractors) + ) + const mouseInteractors = this.getInteractorsByType( + InteractorInputType.Mouse + ) + if (mouseInteractors.length > 0) { + mouseInteractors.forEach((mouseInteractor: Interactor) => { + mouseInteractor.enabled = shouldEnableOtherInteractors + }) + } + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts.meta new file mode 100644 index 00000000..42f63564 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/InteractionManager/InteractionManager.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 99e37220-7ec1-4b1e-bd39-e952dc778348 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 99e37220-7ec1-4b1e-bd39-e952dc778348 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 71d144b3-1c09-4552-af5f-50dd16c8f560 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts new file mode 100644 index 00000000..b28780b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts @@ -0,0 +1,380 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {InteractableHitInfo} from "../../Providers/TargetProvider/TargetProvider" +import Event from "../../Utils/Event" +import {validate} from "../../Utils/validate" +import {InteractionManager} from "../InteractionManager/InteractionManager" +import {DragProvider} from "./DragProvider" +import { + DragType, + Interactor, + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "./Interactor" + +const TAG = "BaseInteractor" + +/** + * Defines API for {@link Interactor} type + */ +export default abstract class BaseInteractor + extends BaseScriptComponent + implements Interactor +{ + @ui.group_start("Interactor") + /** + * Should draw gizmos for visual debugging. + */ + @input + _drawDebug: boolean = false + + @ui.group_start("Spherecast Configuration") + /** + * Should use spherecast for targeting when raycast does not register a hit. + */ + @input + sphereCastEnabled: boolean = false + @input("number[]", "{0.5, 2.0, 4.0}") + @showIf("sphereCastEnabled", true) + spherecastRadii: number[] = [0.5, 2.0, 4.0] + @input("number[]", "{0, 12, 30}") + @showIf("sphereCastEnabled", true) + spherecastDistanceThresholds: number[] = [0, 12, 30] + @ui.group_end + @ui.group_start("Targeting Configuration") + /** + * The maximum distance at which the interactor can target interactables. + */ + @input + _maxRaycastDistance: number = 500 + @input + indirectTargetingVolumeMultiplier: number = 1 + @ui.group_end + @ui.group_start("Indirect Drag Provider") + @input + protected indirectDragThreshold: number = 3.0 + @ui.group_end + @ui.group_end + + // Dependencies injection + protected interactionManager = InteractionManager.getInstance() + + protected _dragProvider = new DragProvider(this.indirectDragThreshold) + + // To allow the planecast drag vector to always be available for 1:1 usage, the threshold should be 0. + protected _planecastDragProvider = new DragProvider(0) + + /** + * Defines the interactor's input type. This can be used for prioritization + * or for discerning controller vs hands. + */ + inputType = InteractorInputType.None + + /** + * Returns the current targeted interactable or null. + */ + currentInteractable: Interactable | null = null + /** + * Returns the previous targeted interactable or null. + */ + previousInteractable: Interactable | null = null + + private onCurrentInteractableChangedEvent = new Event() + + /** + * Called whenever the Interactor changes the target Interactable + */ + onCurrentInteractableChanged = + this.onCurrentInteractableChangedEvent.publicApi() + + /** + * Returns the previous trigger value + */ + previousTrigger = InteractorTriggerType.None + + /** + * Returns the current trigger value + */ + currentTrigger = InteractorTriggerType.None + + _currentDragVector: vec3 | null = null + + /** + * Returns the nullable drag vector, computed in the + * previous frame + */ + previousDragVector: vec3 | null = null + + protected _previousStartPoint: vec3 | null = null + + constructor() { + super() + + this.interactionManager.registerInteractor(this) + } + + release(): void { + this.interactionManager.deregisterInteractor(this) + } + + /** + * Updates the targeting and trigger state of the interactor + */ + updateState(): void { + this.previousInteractable = this.currentInteractable + this.previousTrigger = this.currentTrigger + this.previousDragVector = this.currentDragVector + this._previousStartPoint = this.startPoint + + this.currentInteractable = null + } + + /** + * Disables or enables the input powering this interactor + * @param enabled whether the input powering the interactor should be enabled + */ + setInputEnabled(enabled: boolean): void {} + + /** + * Clears the current Interactable, used when an Interactable is deleted at runtime + */ + clearCurrentInteractable(): void { + this.currentInteractable = null + this.clearCurrentHitInfo() + } + + /** + * Returns the point where the interactor's ray starts. + */ + abstract get startPoint(): vec3 | null + + /** + * Returns the point where the interactor's ray ends. + */ + abstract get endPoint(): vec3 | null + + /** + * Returns the delta start position from previous frame + */ + get deltaStartPosition(): vec3 | null { + if (this.startPoint === null || this._previousStartPoint === null) { + return null + } + return this.startPoint.sub(this._previousStartPoint) + } + + /** + * Returns the direction the interactor's ray is pointing toward. + */ + abstract get direction(): vec3 | null + + /** + * Returns the orientation of the interactor + */ + abstract get orientation(): quat | null + + /** + * @deprecated in favor of using targetHitInfo + * Returns the distance to the current target in cm + */ + abstract get distanceToTarget(): number | null + + /** + * @deprecated in favor of using targetHitInfo + * Returns the point at which the interactor intersected the current target + */ + abstract get targetHitPosition(): vec3 | null + + /** + * Returns the {@link InteractableHitInfo} describing the intersection with the current target + * This includes information such as the intersection position/normal, the Interactable, the collider, etc + */ + abstract get targetHitInfo(): InteractableHitInfo | null + + /** + * Returns the maximum raycast length for world targeting in cm + */ + abstract get maxRaycastDistance(): number + + /** + * Returns the targeting mode used to obtain the targeted interactable + */ + abstract get activeTargetingMode(): TargetingMode + + /** + * Returns a normalized value from 0-1, where 0 is the lowest strength and + * 1 the highest. + * Returns null if the strength cannot be computed. + */ + abstract get interactionStrength(): number | null + + /** + * Returns true if the interactor is actively targeting + */ + abstract isTargeting(): boolean + + /** + * Returns true if the interactor is active + */ + abstract isActive(): boolean + + protected abstract clearCurrentHitInfo(): void + + get dragProvider(): DragProvider { + return this._dragProvider + } + + set dragProvider(provider: DragProvider | undefined) { + validate(provider) + this._dragProvider = provider + } + + protected get planecastDragProvider(): DragProvider { + return this._planecastDragProvider + } + + /** + * Returns the current vector associated to a dragging + * movement since the last frame, and null if not dragging + */ + get currentDragVector(): vec3 | null { + return this._currentDragVector + } + + protected set currentDragVector(dragVector: vec3 | null) { + this._currentDragVector = dragVector + } + + /** + * @returns the drag vector projected onto the plane defined by the current Interactable's forward and origin + */ + get planecastDragVector(): vec3 | null { + return this.planecastDragProvider.currentDragVector + } + + protected clearDragProviders(): void { + this.dragProvider.clear() + this.planecastDragProvider.clear() + } + + protected updateDragVector(): void { + if ((this.currentTrigger & InteractorTriggerType.Select) !== 0) { + this.currentDragVector = this.dragProvider.getDragVector( + this.getDragPoint(), + this.currentInteractable?.enableInstantDrag ?? null + ) + + this.planecastDragProvider.getDragVector( + this.planecastPoint, + this.currentInteractable?.enableInstantDrag ?? null + ) + } else { + this.currentDragVector = null + this.clearDragProviders() + } + } + + protected getDragPoint(): vec3 | null { + return this.endPoint + } + + get planecastPoint(): vec3 | null { + return this.raycastPlaneIntersection(this.currentInteractable) + } + + /** + * Used to define the type of drag vector that the interactor is invoking. + * By default, interactor drag vectors will be as SixDof drags. + */ + get dragType(): DragType | null { + if (this.currentDragVector !== null) { + return DragType.SixDof + } + + return null + } + + /** + * Set if the Interactor is should draw a debug gizmo of collider/raycasts in the scene. + */ + abstract set drawDebug(debug: boolean) + + /** + * @returns if the Interactor is currently drawing a debug gizmo of collider/raycasts in the scene. + */ + abstract get drawDebug(): boolean + + /** + * Calculates the intersection of the Interactor's indirect raycast and the plane defined by the Interactable's forward vector / origin + * @param interactable - the Interactable used to define the plane of intersection + * @returns the intersection point of the indirect raycast and plane + */ + public raycastPlaneIntersection( + interactable: Interactable | null + ): vec3 | null { + const origin = this.startPoint + const direction = this.direction + + if (origin === null || direction === null || interactable === null) { + return null + } + + // This logic uses the equation of t = ((p0-l0)·n)/(l·n) with l0 + l*t = the point of intersection. + // l0 represents ray origin, l represents direction, p0 represents plane origin, and n represents the plane normal. + const normal = interactable.sceneObject.getTransform().forward + const originToPlane = interactable.sceneObject + .getTransform() + .getWorldPosition() + .sub(origin) + + const originDotProduct = originToPlane.dot(normal) + const directionDotProduct = direction.dot(normal) + + const parametricValue = originDotProduct / directionDotProduct + + if (parametricValue >= 0) { + return origin.add(direction.uniformScale(parametricValue)) + } else { + return null + } + } + + /** + * Projects the direct collider's position onto the plane defined by the Interactable's forward vector / origin + * @param interactable - the Interactable used to define the plane of intersection + * @returns the direct collider's position projected onto the plane + */ + public colliderPlaneIntersection( + interactable: Interactable | null + ): vec3 | null { + const origin = this.startPoint + + if (origin === null || interactable === null) { + return null + } + + // This logic uses the equation of t = ((p0-l0)·n)/(l·n) with l0 + l*t = the point of intersection. + // l0 represents ray origin, l represents direction, p0 represents plane origin, and n represents the plane normal. + const normal = interactable.sceneObject.getTransform().forward + const originToPlane = interactable.sceneObject + .getTransform() + .getWorldPosition() + .sub(origin) + + const originDotProduct = originToPlane.dot(normal) + const directionDotProduct = normal.dot(normal) + + const parametricValue = originDotProduct / directionDotProduct + + return origin.add(normal.uniformScale(parametricValue)) + } + + /** + * Notifies that the Interactor has changed target Interactable + */ + currentInteractableChanged = (): void => { + if (this.currentInteractable !== this.previousInteractable) { + this.onCurrentInteractableChangedEvent.invoke(this.currentInteractable) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts.meta new file mode 100644 index 00000000..74119fb5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/BaseInteractor.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! cfcabf2a-c8e9-437c-ae0c-246ced8aae6f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! cfcabf2a-c8e9-437c-ae0c-246ced8aae6f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! e4892e76-26a7-4665-9b1f-6eb9a7e31b14 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts new file mode 100644 index 00000000..82a1fb28 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts @@ -0,0 +1,202 @@ +import {InteractionPlane} from "../../Components/Interaction/InteractionPlane/InteractionPlane" +import TargetProvider from "../../Providers/TargetProvider/TargetProvider" +import {notEmpty} from "../../Utils/notEmpty" +import BaseInteractor from "./BaseInteractor" + +/** + * Config for ColliderTargetProvider + */ +export type ColliderTargetProviderConfig = { + shouldPreventTargetUpdate?: () => boolean +} + +/** + * Uses a collider positioned to detect a target + */ +export abstract class ColliderTargetProvider extends TargetProvider { + protected ownerSceneObject: SceneObject + + // If the collider is in an interaction plane's interaction zone, cache the plane. + protected _currentInteractionPlanes: InteractionPlane[] = [] + + protected interactor: BaseInteractor + constructor( + interactor: BaseInteractor, + protected config: ColliderTargetProviderConfig + ) { + super() + this.interactor = interactor + this.ownerSceneObject = global.scene.createSceneObject( + "ColliderTargetProvider" + ) + this.ownerSceneObject.setParent(this.interactor.sceneObject) + } + + /** @inheritdoc */ + get startPoint(): vec3 { + return this.colliderPosition + } + + /** @inheritdoc */ + get endPoint(): vec3 { + return this.colliderPosition + } + + /** + * Returns an array of InteractionPlanes with interaction zones overlapping with the collider. + */ + get currentInteractionPlanes(): InteractionPlane[] { + return this._currentInteractionPlanes + } + + /** + * Clears an InteractionPlane from the cache (in the event of the InteractionPlane being de-registered). + * @param plane - the InteractionPlane to clear. + */ + clearInteractionPlane(plane: InteractionPlane): void { + const index = this.currentInteractionPlanes.indexOf(plane) + + if (index !== -1) { + this._currentInteractionPlanes.splice(index, 1) + } + } + + /** + * @returns the direct collider position for direct manipulation + */ + get colliderPosition(): vec3 { + return this.isAvailable() + ? this.ownerSceneObject.getTransform().getWorldPosition() + : vec3.zero() + } + + /** + * @returns true if target provider is available, false otherwise + */ + protected abstract isAvailable(): boolean + + /** + * @returns the collider next position + */ + protected abstract getNextPosition(): vec3 + + /** @inheritdoc */ + update(): void { + if (this.isAvailable()) { + const newPosition = this.getNextPosition() + this.ownerSceneObject.getTransform().setWorldPosition(newPosition) + this.ownerSceneObject.enabled = true + } else { + this.ownerSceneObject.enabled = false + this.clearCurrentInteractableHitInfo() + this._currentInteractionPlanes = [] + } + } + + /** @inheritdoc */ + destroy(): void { + this.ownerSceneObject.destroy() + } + + protected createCollider( + sceneObject: SceneObject, + radius: number, + onOverlapStay: ((eventArgs: OverlapStayEventArgs) => void) | null, + onOverlapExit: ((eventArgs: OverlapExitEventArgs) => void) | null, + debugDrawEnabled: boolean + ): ColliderComponent { + const collider = sceneObject.createComponent("Physics.ColliderComponent") + + const shape = Shape.createSphereShape() + shape.radius = radius + collider.shape = shape + collider.intangible = true + collider.debugDrawEnabled = debugDrawEnabled + + if (onOverlapStay !== null) { + collider.onOverlapStay.add(onOverlapStay) + } + + if (onOverlapExit !== null) { + collider.onOverlapExit.add(onOverlapExit) + } + + return collider + } + + protected onColliderOverlapStay( + event: OverlapEnterEventArgs, + allowOutOfFovInteraction = true + ): void { + if (this.config.shouldPreventTargetUpdate?.()) { + return + } + + const hits: RayCastHit[] = event.currentOverlaps + .map((overlap) => { + try { + return { + collider: overlap.collider, + distance: overlap.collider + .getTransform() + .getWorldPosition() + .distance(this.endPoint), + normal: vec3.zero(), + position: this.endPoint, + skipRemaining: false, + t: 0, + triangle: null, + getTypeName: overlap.collider.getTypeName, + isTypeOf: overlap.collider.isOfType, + isSame: overlap.collider.isSame, + isOfType: overlap.collider.isOfType, + } as RayCastHit + } catch { + return null + } + }) + .filter(notEmpty) + + this._currentInteractableHitInfo = this.getInteractableHitFromRayCast( + hits, + 0, + allowOutOfFovInteraction + ) + + this.updateInteractionPlanesFromOverlap(event.currentOverlaps) + } + + protected onColliderOverlapExit(event: OverlapEnterEventArgs): void { + if ( + event.overlap.collider === this._currentInteractableHitInfo?.hit.collider + ) { + this._currentInteractableHitInfo = null + } + + this.removeInteractionPlaneFromOverlap(event.overlap) + } + + protected updateInteractionPlanesFromOverlap(overlaps: Overlap[]): void { + for (const overlap of overlaps) { + const plane = overlap.collider + .getSceneObject() + .getComponent(InteractionPlane.getTypeName()) + if (plane !== null && !this._currentInteractionPlanes.includes(plane)) { + this._currentInteractionPlanes.push(plane) + } + } + } + + protected removeInteractionPlaneFromOverlap(overlap: Overlap): void { + const plane = overlap.collider + .getSceneObject() + .getComponent(InteractionPlane.getTypeName()) + if (plane !== null) { + const index = this.currentInteractionPlanes.indexOf(plane) + + if (index !== -1) { + this._currentInteractionPlanes.splice(index, 1) + } + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts.meta new file mode 100644 index 00000000..579dae18 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/ColliderTargetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! e50b2da5-e6e2-4e49-bc2d-3403ffe77858 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e50b2da5-e6e2-4e49-bc2d-3403ffe77858 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! e9befd12-a0ef-4340-9323-6e92d2f94c5f + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts new file mode 100644 index 00000000..da4bb5bf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts @@ -0,0 +1,140 @@ +import {HandInputData} from "../../Providers/HandInputData/HandInputData" +import {HandType} from "../../Providers/HandInputData/HandType" +import BaseInteractor from "./BaseInteractor" +import { + ColliderTargetProvider, + ColliderTargetProviderConfig, +} from "./ColliderTargetProvider" +import {TargetingMode} from "./Interactor" + +export type DirectTargetProviderConfig = ColliderTargetProviderConfig & { + handType: HandType + debugEnabled: boolean + colliderEnterRadius: number + colliderExitRadius: number +} + +/** + * Hand based direct target provider. Uses a collider positioned + * at the center position of the index and thumb + */ +export class DirectTargetProvider extends ColliderTargetProvider { + readonly targetingMode: TargetingMode = TargetingMode.Direct + + private handProvider: HandInputData = HandInputData.getInstance() + + private hand = this.handProvider.getHand(this.config.handType) + + private overlapEvent: OverlapStayEventArgs | null = null + + private colliders: ColliderComponent[] + + private _drawDebug = this.config.debugEnabled + + constructor( + interactor: BaseInteractor, + protected config: DirectTargetProviderConfig + ) { + super(interactor, config) + + this.colliders = [] + + this.colliders.push( + this.createCollider( + this.ownerSceneObject, + config.colliderEnterRadius, + this.onColliderOverlapStay.bind(this), + null, + config.debugEnabled + ) + ) + + this.colliders.push( + this.createCollider( + this.ownerSceneObject, + config.colliderExitRadius, + null, + this.onColliderOverlapExit.bind(this), + config.debugEnabled + ) + ) + + this.ownerSceneObject.enabled = false + this.hand.onHandFound.add(() => { + this.ownerSceneObject.enabled = true + }) + this.hand.onHandLost.add(() => { + this.ownerSceneObject.enabled = false + }) + } + + set drawDebug(debug: boolean) { + this._drawDebug = debug + + for (const collider of this.colliders) { + collider.debugDrawEnabled = debug + } + } + + get drawDebug(): boolean { + return this._drawDebug + } + + /** @inheritdoc */ + protected isAvailable(): boolean { + return ( + this.hand.indexTip !== null && + this.hand.thumbTip !== null && + this.hand.enabled && + (this.hand.isTracked() || this.hand.isPinching()) + ) + } + + /** @inheritdoc */ + override update(): void { + if (this.isAvailable()) { + const newPosition = this.getNextPosition() + this.ownerSceneObject.getTransform().setWorldPosition(newPosition) + this.ownerSceneObject.enabled = true + + if (!this.config.shouldPreventTargetUpdate?.()) { + if (this.overlapEvent === null) { + this.clearCurrentInteractableHitInfo() + } + this.overlapEvent = null + } + } else { + this.ownerSceneObject.enabled = false + this.clearCurrentInteractableHitInfo() + this._currentInteractionPlanes = [] + } + } + + protected override onColliderOverlapStay( + event: OverlapEnterEventArgs, + allowOutOfFovInteraction = true + ): void { + this.overlapEvent = event + super.onColliderOverlapStay(event, allowOutOfFovInteraction) + } + + protected override onColliderOverlapExit(event: OverlapEnterEventArgs): void { + if (this.config.shouldPreventTargetUpdate?.()) { + return + } + + super.onColliderOverlapExit(event) + } + + /** @inheritdoc */ + protected getNextPosition(): vec3 { + const indexTip = this.hand.indexTip?.position + const thumbTip = this.hand.thumbTip?.position + + if (indexTip === undefined || thumbTip === undefined) { + return vec3.zero() + } + + return indexTip.add(thumbTip).uniformScale(0.5) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts.meta new file mode 100644 index 00000000..dae92cfd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DirectTargetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! b053c2ed-a426-4c58-b5d2-7138186a1dcd + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b053c2ed-a426-4c58-b5d2-7138186a1dcd + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! dd5878dc-b21a-4da2-8339-a0fdf4e55a49 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts new file mode 100644 index 00000000..584f6b6d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts @@ -0,0 +1,92 @@ +/** + * Manages the logic for the dragging behaviour, especially detects when dragging happens, + * and provides the associated dragVector + */ +export class DragProvider { + private _originPosition: vec3 | null = null + private _isDragging = false + private previousPosition = vec3.zero() + private _currentDragVector: vec3 | null = null + + constructor(private dragThreshold: number) { + if (dragThreshold < 0) { + throw new Error("HandInteractor: DragThreshold can't be negative.") + } + } + + /** + * @returns origin position for the drag + */ + get originPosition(): vec3 | null { + return this._originPosition + } + + /** + * @returns if dragging is happening or not + */ + get isDragging(): boolean { + return this._isDragging + } + + /** + * @returns the drag vector of the current frame + */ + get currentDragVector(): vec3 | null { + return this._currentDragVector + } + + /** + * Resets the dragging state + */ + clear(): void { + this._originPosition = null + this._isDragging = false + this._currentDragVector = null + } + + /** + * Detects if the interactor is being dragged and returns dragVector if that happens. + * Detection algorithm: if the distance between the interaction point and the origin + * position exceeds the dragging threshold, then dragging is happening. + * @param currentPosition - position that is used to compute the drag vector + * @returns the dragVector as a {@link vec3} if dragging and null otherwise + */ + getDragVector( + currentPosition: vec3 | null, + enableInstantDrag: boolean | null + ): vec3 | null { + if (currentPosition === null) { + return null + } + + if (!this._isDragging) { + this._isDragging = this.isDragDetected(currentPosition, enableInstantDrag) + this.previousPosition = currentPosition + if (!this._isDragging) { + return null + } + } + + const dragVector = currentPosition.sub(this.previousPosition) + + this.previousPosition = currentPosition + this._currentDragVector = dragVector + + return dragVector + } + + private isDragDetected( + position: vec3, + enableInstantDrag: boolean | null + ): boolean { + if (this._originPosition === null) { + this._originPosition = position + return false + } + + const originDelta = position.sub(this._originPosition) + return ( + originDelta.length >= this.dragThreshold || (enableInstantDrag ?? false) + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts.meta new file mode 100644 index 00000000..f71d80ae --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/DragProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! cc27c36f-8fbf-4a1f-8c52-cba98d3c41a2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! cc27c36f-8fbf-4a1f-8c52-cba98d3c41a2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c3346de3-0c61-474a-aa04-e67eeb3ac8e5 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts new file mode 100644 index 00000000..69aba98b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts @@ -0,0 +1,110 @@ +import {RaycastInfo, RayProvider} from "./RayProvider" + +import {HandInputData} from "../../Providers/HandInputData/HandInputData" +import {HandType} from "../../Providers/HandInputData/HandType" +import { + FieldTargetingMode, + HandInteractor, + RaycastType, +} from "../HandInteractor/HandInteractor" +import RaycastAnchorHead from "./raycastAlgorithms/RaycastAnchorHead" +import RaycastAnchorVariableShoulder from "./raycastAlgorithms/RaycastAnchorVariableShoulder" +import RaycastBase from "./raycastAlgorithms/RaycastBase" +import RaycastLegacySingleCamera from "./raycastAlgorithms/RaycastLegacySingleCamera" +import RaycastProxy from "./raycastAlgorithms/RaycastProxy" + +export type HandRayProviderConfig = { + raycastAlgorithm: RaycastType + handType: HandType + handInteractor: HandInteractor +} + +/** + * This class provides raycasting functionality for hand interactions. It selects the appropriate raycast algorithm based on the provided configuration. + */ +export class HandRayProvider implements RayProvider { + readonly raycast: RaycastBase + + private handProvider: HandInputData = HandInputData.getInstance() + + private hand = this.handProvider.getHand(this.config.handType) + + constructor(private config: HandRayProviderConfig) { + // Set raycast algorithm used + switch (config.raycastAlgorithm) { + case "LegacySingleCamera": { + this.raycast = new RaycastLegacySingleCamera(this.hand) + break + } + case "AnchorHead": { + this.raycast = new RaycastAnchorHead(this.hand) + break + } + case "Proxy": { + this.raycast = new RaycastProxy(this.hand) + break + } + default: { + this.raycast = new RaycastAnchorVariableShoulder(this.hand) + break + } + } + } + + /** @inheritdoc */ + getRaycastInfo(): RaycastInfo { + // When not near an InteractionPlane, use the raycast base's logic for direction / locus. + if ( + this.config.handInteractor.fieldTargetingMode === + FieldTargetingMode.FarField + ) { + return ( + this.raycast.getRay() ?? { + direction: vec3.zero(), + locus: vec3.zero(), + } + ) + } + // When near an InteractionPlane, raycast from the midpoint straight towards the plane. + else { + const indexTip = this.hand.indexTip?.position + const thumbTip = this.hand.thumbTip?.position + + if (indexTip === undefined || thumbTip === undefined) { + return { + direction: vec3.zero(), + locus: vec3.zero(), + } + } + + const locus = indexTip.add(thumbTip).uniformScale(0.5) + const planeProjection = + this.config.handInteractor.currentInteractionPlane.projectPoint(locus) + + if (planeProjection === null) { + return { + direction: vec3.zero(), + locus: vec3.zero(), + } + } else { + return { + direction: planeProjection.point.sub(locus).normalize(), + locus: locus, + } + } + } + } + + /** @inheritdoc */ + isAvailable(): boolean { + return ( + (this.hand.isInTargetingPose() && this.hand.isTracked()) || + this.hand.isPinching() + ) + } + + /** @inheritdoc */ + reset(): void { + this.raycast.reset() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts.meta new file mode 100644 index 00000000..46c0fefd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/HandRayProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! d8134328-2011-49c9-b4a7-2d8b847006e0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d8134328-2011-49c9-b4a7-2d8b847006e0 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d708f8fc-c62b-44c3-b282-04ee4916bf9e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts new file mode 100644 index 00000000..b8490183 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts @@ -0,0 +1,183 @@ +import {RayProvider, RaycastInfo} from "./RayProvider" +import TargetProvider, { + InteractableHitInfo, +} from "../../Providers/TargetProvider/TargetProvider" + +import BaseInteractor from "./BaseInteractor" +import {TargetingMode} from "./Interactor" + +export type IndirectTargetProviderConfig = { + rayProvider: RayProvider + maxRayDistance: number + targetingVolumeMultiplier?: number + shouldPreventTargetUpdate: () => boolean + spherecastRadii: number[] + spherecastDistanceThresholds: number[] +} + +/** + * This class provides indirect targeting functionality using raycasting and spherecasting. It extends the TargetProvider class and uses a configuration object for initialization. + */ +export default class IndirectTargetProvider extends TargetProvider { + readonly targetingMode: TargetingMode = TargetingMode.Indirect + + private probe = Physics.createGlobalProbe() + private currentRay: RaycastInfo | null = null + private targetingVolumeMultiplier: number = + this.config.targetingVolumeMultiplier ?? 1 + + private spherecastRadii: number[] = this.config.spherecastRadii + private spherecastDistanceThresholds: number[] = + this.config.spherecastDistanceThresholds + + private _drawDebug = this.interactor.drawDebug + + constructor( + private interactor: BaseInteractor, + private config: IndirectTargetProviderConfig, + ) { + super() + this._drawDebug = this.interactor.drawDebug + this.probe.debugDrawEnabled = this.interactor.drawDebug + if ( + this.config.spherecastRadii.length !== + this.config.spherecastDistanceThresholds.length + ) { + throw new Error( + "An Interactor's Spherecast Radii and Spherecast Distance Thresholds input arrays are not the same length!", + ) + } + } + + get startPoint(): vec3 { + return this.currentRay?.locus ?? vec3.zero() + } + + get endPoint(): vec3 { + return this.startPoint.add( + this.direction.uniformScale(this.config.maxRayDistance), + ) + } + + get direction(): vec3 { + return this.currentRay?.direction ?? vec3.zero() + } + + set drawDebug(debug: boolean) { + this._drawDebug = debug + + this.probe.debugDrawEnabled = debug + } + + get drawDebug(): boolean { + return this._drawDebug + } + + /** + * Can be used to reset inner states + * Should be called when the hand is not tracked or targeting is blocked + */ + reset(): void { + this.config.rayProvider.reset() + } + + /** @inheritdoc */ + update(): void { + if (!this.config.rayProvider.isAvailable()) { + this.config.rayProvider.reset() + this.updateTargetedItem(null) + return + } + + this.currentRay = this.config.rayProvider.getRaycastInfo() + if (this.currentRay) { + this.indirectRayCast(this.currentRay) + } + } + + /** @inheritdoc */ + destroy(): void {} + + /** + * Uses a ray cast to detect items in the direct path + * Starts sphere casting if and only if nothing is found with the ray + */ + private indirectRayCast(ray: RaycastInfo) { + this.probe.rayCastAll( + ray.locus, + this.endPoint, + // RaycastHits are automatically sorted from nearest to farthest + (hits: RayCastHit[]) => { + const hitInfo = this.getInteractableHitFromRayCast(hits) + + if (hitInfo) { + this.updateTargetedItem(hitInfo) + return + } + + /* + * If nothing is hit directly by the ray, try sphere cast if ray is sticky or set targeted item to null if not + * Also, reset to default indirect mode + */ + if (this.interactor.sphereCastEnabled) { + this.indirectSphereCast(ray) + } else { + this.updateTargetedItem(null) + } + }, + ) + } + + /** + * Does a sphere cast to look for interactables + * Iterates through size options from smallest to largest until something is found/all options are checked + */ + private indirectSphereCast(ray: RaycastInfo, index: number = 0): void { + // Nothing is targeted if no interactables exist, or we've iterated through all sphere options + if (index >= this.spherecastDistanceThresholds.length) { + this.updateTargetedItem(null) + return + } + const offset = this.spherecastDistanceThresholds[index] + const castOrigin = ray.locus.add(ray.direction.uniformScale(offset)) + const castEnd = castOrigin.add( + ray.direction.uniformScale(this.config.maxRayDistance - offset), + ) + + this.probe.sphereCastAll( + this.spherecastRadii[index] * this.targetingVolumeMultiplier, + castOrigin, + castEnd, + (hits: RayCastHit[]) => { + const hitInfo = this.getInteractableHitFromRayCast(hits, offset) + if (hitInfo) { + this.updateTargetedItem(hitInfo) + return + } + + this.indirectSphereCast(ray, index + 1) + }, + ) + } + + private updateTargetedItem(hitInfo: InteractableHitInfo | null): void { + /* + * We check if the new target is the same, we always update the hit data with the new + * value + */ + if ( + hitInfo !== null && + this.currentInteractableHitInfo !== null && + this.currentInteractableHitInfo.interactable === hitInfo.interactable + ) { + this.currentInteractableHitInfo.hit = hitInfo.hit + } + + // If we shouldn't update the target, we return early + if (this.config.shouldPreventTargetUpdate()) { + return + } + + this._currentInteractableHitInfo = hitInfo + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts.meta new file mode 100644 index 00000000..59e29d7e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/IndirectTargetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 5e1ac85a-6e0e-47c4-b18d-15ba77e3b17a + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 5e1ac85a-6e0e-47c4-b18d-15ba77e3b17a + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 5b4a4b05-a649-44f1-9fbb-8663266a9ee1 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts new file mode 100644 index 00000000..e23e6f84 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts @@ -0,0 +1,128 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {InteractableHitInfo} from "../../Providers/TargetProvider/TargetProvider" +import {PublicApi} from "../../Utils/Event" + +/** + * Input types that discern a target interactable and translate events from their inputs + */ +export enum InteractorInputType { + None = 0, + LeftHand = 1 << 0, + RightHand = 1 << 1, + BothHands = LeftHand | RightHand, + Mobile = 1 << 2, + BtController = 1 << 3, + CustomController = 1 << 4, + Mouse = 1 << 5, + All = BothHands | Mobile | BtController | CustomController | Mouse, +} + +/** + * TargetingMode is a bitflag that determines how an interactor is interacting with an interactable. + * This is also used to determine whether a specific targeting mode can interact with an interactable. + */ +export enum TargetingMode { + None = 0, + Direct = 1 << 0, + Indirect = 1 << 1, + Poke = 1 << 2, // Poke is mutually exclusive with Direct and Indirect + All = Direct | Indirect | Poke, +} + +/** + * InteractorTriggerType is used to differentiate triggers, + * such as a pinch and poke. For objects that only care about activation, + * we can combine these types to make more generic functionality. + * + * Example: + * The developer may want to trigger a sound effect when selected. We combine + * both Pinch and Poke into Select so that all we have to look for is Select. + */ +export enum InteractorTriggerType { + None = 0, + Pinch = 1 << 0, + Poke = 1 << 1, + Select = Pinch | Poke, +} + +/** + * DragType differentiates the type of drag vector that is being passed. + * SixDof is used when the interactor is being moved in world space. + * Touchpad is used when the interactor has some sort of touchpad to initiate drag events. + */ +export enum DragType { + SixDof = 0, + Touchpad = 1, +} + +/** + * Defines available Interactor apis + */ +export interface Interactor { + enabled: boolean + + inputType: InteractorInputType + + currentInteractable: Interactable | null + + previousInteractable: Interactable | null + + onCurrentInteractableChanged: PublicApi + + currentTrigger: InteractorTriggerType + + previousTrigger: InteractorTriggerType + + currentDragVector: vec3 | null + + previousDragVector: vec3 | null + + planecastDragVector: vec3 | null + + /** + * The type of drag vector that is currently being invoked. + */ + dragType: DragType | null + + startPoint: vec3 | null + + endPoint: vec3 | null + + planecastPoint: vec3 | null + + deltaStartPosition: vec3 | null + + direction: vec3 | null + + orientation: quat | null + + distanceToTarget: number | null + + targetHitPosition: vec3 | null + + targetHitInfo: InteractableHitInfo | null + + maxRaycastDistance: number + + activeTargetingMode: TargetingMode + + interactionStrength: number | null + + drawDebug: boolean + + isTargeting(): boolean + + isActive(): boolean + + updateState(): void + + setInputEnabled(enabled: boolean): void + + raycastPlaneIntersection(interactable: Interactable | null): vec3 | null + + colliderPlaneIntersection(interactable: Interactable | null): vec3 | null + + clearCurrentInteractable(): void + + currentInteractableChanged(): void +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts.meta new file mode 100644 index 00000000..6e31b46f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/Interactor.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! d2321203-bfe2-465b-bb74-c480d87c9b1b + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d2321203-bfe2-465b-bb74-c480d87c9b1b + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 567a4841-3272-4dc1-95ee-78fcfd162d2d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts new file mode 100644 index 00000000..fc697823 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts @@ -0,0 +1,68 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {Interactor} from "./Interactor" + +export type EventPropagationPhase = "TrickleDown" | "Target" | "BubbleUp" + +export type InteractableEventName = + | "HoverEnter" + | "HoverUpdate" + | "HoverExit" + | "TriggerStart" + | "TriggerUpdate" + | "TriggerEnd" + | "TriggerCanceled" + +export type DispatchableEventArgs = { + interactor: Interactor + target: Interactable + eventName: InteractableEventName + origin?: Interactable +} + +/** + * Represents an interactor event + * Events are propagated along the scene hierarchy, and can be invoked + * by another component as itself. This event adds a field + * to keep track of which {@link Interactable} invoked it. + */ +export type InteractorEvent = { + /** + * The {@link Interactor} that triggered this event + */ + interactor: Interactor + + /** + * The {@link Interactable} targeted by the interactor + */ + target: Interactable + + /** + * The {@link Interactable} where this event was invoked to + */ + interactable: Interactable + + /** + * The current phase for this event + */ + propagationPhase: EventPropagationPhase + + /** + * Stop propagating this event on the propagation path. + */ + stopPropagation(): void +} + +/** + * InteractorEvent with dragging data + */ +export type DragInteractorEvent = InteractorEvent & { + /* + * The coordinate of the interactor origin relative to the + * position of the last {@link DragInteractorEvent}. + */ + dragVector: vec3 + /** + * The drag vector projected onto the plane defined by the Interactable's forward and origin + */ + planecastDragVector: vec3 | null +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts.meta new file mode 100644 index 00000000..19fbebe4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/InteractorEvent.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 72c8d064-a42b-403d-ae20-17ebe741104e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 72c8d064-a42b-403d-ae20-17ebe741104e + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 167a05f3-46a4-4974-a028-d29f13a30623 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts new file mode 100644 index 00000000..6e4f7b75 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts @@ -0,0 +1,48 @@ +import {MobileInputData} from "../../Providers/MobileInputData/MobileInputData" +import NativeLogger from "../../Utils/NativeLogger" +import {RaycastInfo, RayProvider} from "./RayProvider" + +const TAG = "MobileRayProvider" +const MOBILE_ROTATION = quat.angleAxis(Math.PI / 2, vec3.right()) + +/** + * Constructs the {@link RaycastInfo} from the {@link MobileInputData} data. + */ +export class MobileRayProvider implements RayProvider { + // Native Logging + private log = new NativeLogger(TAG) + + private mobileInputData: MobileInputData = MobileInputData.getInstance() + private raycastInfo: RaycastInfo | null = null + + /** @inheritdoc */ + getRaycastInfo(): RaycastInfo { + if (this.mobileInputData.isAvailable()) { + this.raycastInfo = { + direction: + this.mobileInputData.rotation + ?.multiply(MOBILE_ROTATION) + .multiplyVec3(vec3.back()) ?? vec3.zero(), + locus: this.mobileInputData.position ?? vec3.zero(), + } + } else { + this.log.d( + "Mobile ray provider could not get raycast info because mobile input data provider was not available." + ) + this.raycastInfo = { + direction: vec3.zero(), + locus: vec3.zero(), + } + } + + return this.raycastInfo + } + + /** @inheritdoc */ + isAvailable(): boolean { + return this.mobileInputData.isAvailable() + } + + /** @inheritdoc */ + reset(): void {} +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts.meta new file mode 100644 index 00000000..795c9f09 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MobileRayProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f4d97d38-990e-473f-933d-51d2c39961a7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f4d97d38-990e-473f-933d-51d2c39961a7 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! a1a429cd-74cc-4d16-9230-476f5baeeed2 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts new file mode 100644 index 00000000..55808c66 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts @@ -0,0 +1,202 @@ +import TargetProvider, { + InteractableHitInfo, +} from "../../Providers/TargetProvider/TargetProvider" +import BaseInteractor from "./BaseInteractor" +import {TargetingMode} from "./Interactor" +import {RaycastInfo, RayProvider} from "./RayProvider" + +/** + * Configuration of the target provider, particularly how ray direction is calculated + maximum length via rayProvider/maxRayDistance. + * Also allows for definition of when the provider should not update target (e.g. during a trigger) via shouldPreventTargetUpdate. + */ +export type MouseTargetProviderConfig = { + rayProvider: RayProvider + maxRayDistance: number + targetingVolumeMultiplier?: number + shouldPreventTargetUpdate: () => boolean + spherecastRadii: number[] + spherecastDistanceThresholds: number[] +} + +/** + * Target provider for MouseInteractor. Can target all Interactables regardless of their targetingMode. + */ +export default class MouseTargetProvider extends TargetProvider { + readonly targetingMode: TargetingMode = + TargetingMode.Indirect | TargetingMode.Direct | TargetingMode.Poke + + private probe = Physics.createGlobalProbe() + private currentRay: RaycastInfo | null = null + private targetingVolumeMultiplier: number = + this.config.targetingVolumeMultiplier ?? 1 + + private spherecastRadii: number[] = this.config.spherecastRadii + private spherecastDistanceThresholds: number[] = + this.config.spherecastDistanceThresholds + + private _drawDebug = this.interactor.drawDebug + + constructor( + private interactor: BaseInteractor, + private config: MouseTargetProviderConfig + ) { + super() + this._drawDebug = this.interactor.drawDebug + this.probe.debugDrawEnabled = this.interactor.drawDebug + if ( + this.config.spherecastRadii.length !== + this.config.spherecastDistanceThresholds.length + ) { + throw new Error( + "An Interactor's Spherecast Radii and Spherecast Distance Thresholds input arrays are not the same length!" + ) + } + } + + /** + * @inheritdoc + */ + get startPoint(): vec3 { + return this.currentRay?.locus ?? vec3.zero() + } + + /** + * @inheritdoc + */ + get endPoint(): vec3 { + return this.startPoint.add( + this.direction.uniformScale(this.config.maxRayDistance) + ) + } + + /** + * Returns the direction the mouse ray is pointing toward. + */ + get direction(): vec3 { + return this.currentRay?.direction ?? vec3.zero() + } + + /** + * Set if the mouse is should draw a debug gizmo of collider/raycasts in the scene. + */ + set drawDebug(debug: boolean) { + this._drawDebug = debug + + this.probe.debugDrawEnabled = debug + } + + /** + * @returns if the mouse is should draw a debug gizmo of collider/raycasts in the scene. + */ + get drawDebug(): boolean { + return this._drawDebug + } + + /** + * Can be used to reset inner states + * Should be called when the hand is not tracked or targeting is blocked + */ + reset(): void { + this.config.rayProvider.reset() + } + + /** @inheritdoc */ + update(): void { + if (!this.config.rayProvider.isAvailable()) { + this.config.rayProvider.reset() + this.updateTargetedItem(null) + return + } + + this.currentRay = this.config.rayProvider.getRaycastInfo() + if (this.currentRay) { + this.mouseRayCast(this.currentRay) + } + } + + /** @inheritdoc */ + destroy(): void {} + + /** + * Uses a ray cast to detect items in the direct path + * Starts sphere casting if and only if nothing is found with the ray + */ + private mouseRayCast(ray: RaycastInfo) { + this.probe.rayCastAll( + ray.locus, + this.endPoint, + // RaycastHits are automatically sorted from nearest to farthest + (hits: RayCastHit[]) => { + const hitInfo = this.getInteractableHitFromRayCast(hits) + + if (hitInfo) { + this.updateTargetedItem(hitInfo) + return + } + + /* + * If nothing is hit directly by the ray, try sphere cast if ray is sticky or set targeted item to null if not + * Also, reset to default mouse mode + */ + if (this.interactor.sphereCastEnabled) { + this.mouseSphereCast(ray) + } else { + this.updateTargetedItem(null) + } + } + ) + } + + /** + * Does a sphere cast to look for interactables + * Iterates through size options from smallest to largest until something is found/all options are checked + */ + private mouseSphereCast(ray: RaycastInfo, index: number = 0): void { + // Nothing is targeted if no interactables exist, or we've iterated through all sphere options + if (index >= this.spherecastDistanceThresholds.length) { + this.updateTargetedItem(null) + return + } + const offset = this.spherecastDistanceThresholds[index] + const castOrigin = ray.locus.add(ray.direction.uniformScale(offset)) + const castEnd = castOrigin.add( + ray.direction.uniformScale(this.config.maxRayDistance - offset) + ) + + this.probe.sphereCastAll( + this.spherecastRadii[index] * this.targetingVolumeMultiplier, + castOrigin, + castEnd, + (hits: RayCastHit[]) => { + const hitInfo = this.getInteractableHitFromRayCast(hits, offset) + if (hitInfo) { + this.updateTargetedItem(hitInfo) + return + } + + this.mouseSphereCast(ray, index + 1) + } + ) + } + + private updateTargetedItem(hitInfo: InteractableHitInfo | null): void { + /* + * We check if the new target is the same, we always update the hit data with the new + * value + */ + if ( + hitInfo !== null && + this.currentInteractableHitInfo !== null && + this.currentInteractableHitInfo.interactable === hitInfo.interactable + ) { + this.currentInteractableHitInfo.hit = hitInfo.hit + } + + // If we shouldn't update the target, we return early + if (this.config.shouldPreventTargetUpdate()) { + return + } + + this._currentInteractableHitInfo = hitInfo + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts.meta new file mode 100644 index 00000000..1a10157b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/MouseTargetProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 9f61e8cb-8b78-4d79-b68e-a28e8a7b7e37 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 9f61e8cb-8b78-4d79-b68e-a28e8a7b7e37 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 85089add-08ef-484c-b7da-fa2d2b38ecfc + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts new file mode 100644 index 00000000..177e4d8d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts @@ -0,0 +1,209 @@ +import {HandInputData} from "../../Providers/HandInputData/HandInputData" +import {HandType} from "../../Providers/HandInputData/HandType" +import TargetProvider, { + InteractableHitInfo, +} from "../../Providers/TargetProvider/TargetProvider" +import {isDescendantOf} from "../../Utils/SceneObjectUtils" +import {TargetingMode} from "../Interactor/Interactor" +import {WindowMode} from "./raycastAlgorithms/TimeDataContainer" +import {TimedVec3Container} from "./raycastAlgorithms/TimedVec3Container" + +export type PokeTargetProviderConfig = { + handType: HandType + drawDebug: boolean +} + +const POKE_SPHERECAST_RADIUS = 0.7 + +/** + * Hand based poke target provider. Uses a sphere cast from index mid joint + * to index tip + */ +export class PokeTargetProvider extends TargetProvider { + readonly targetingMode: TargetingMode = TargetingMode.Poke + + private handProvider: HandInputData = HandInputData.getInstance() + + private hand = this.handProvider.getHand(this.config.handType) + + private probe = Physics.createGlobalProbe() + + // Used to calculate the average velocity of the fingertip over the past few frames + private endPointHistory = new TimedVec3Container(WindowMode.FRAME, 4) + + private _drawDebug: boolean = this.config.drawDebug + + constructor(protected config: PokeTargetProviderConfig) { + super() + this.probe.debugDrawEnabled = this.config.drawDebug + } + + /** @inheritdoc */ + get startPoint(): vec3 { + // Extend the collider length to the mid joint after a poke has been entered, so we don't lose pokes too easily + return this._currentInteractableHitInfo !== null + ? this.hand.indexKnuckle.position + : this.hand.indexUpperJoint.position + } + + /** @inheritdoc */ + get endPoint(): vec3 { + return this.hand.indexTip.position + } + + get direction() { + return this.startPoint.sub(this.endPoint).normalize() + } + + set drawDebug(debug: boolean) { + this._drawDebug = debug + + this.probe.debugDrawEnabled = debug + } + + get drawDebug(): boolean { + return this._drawDebug + } + + /** @inheritdoc */ + override get currentInteractableHitInfo(): InteractableHitInfo | null { + return this._currentInteractableHitInfo !== null && this.isAvailable() + ? this._currentInteractableHitInfo + : null + } + + /** @inheritdoc */ + update(): void { + if (!this.isAvailable()) { + this._currentInteractableHitInfo = null + this.endPointHistory.clear() + return + } + this.raycastJoints() + } + + private raycastJoints() { + this.probe.sphereCastAll( + POKE_SPHERECAST_RADIUS, + this.startPoint, + this.endPoint, + (hits) => { + this._currentInteractableHitInfo = + this.getInteractableHitFromRayCast(hits) + + this.endPointHistory.pushWithoutDuplicate(getTime(), this.endPoint) + } + ) + } + + private checkAlignment(position: vec3 | null) { + if (position === null) { + return false + } + + const previousAverage = this.endPointHistory.average() + if (previousAverage === null) { + return false + } + + return previousAverage.sub(position).dot(this.direction) > 0 + } + + protected override getInteractableHitFromRayCast( + hits: RayCastHit[] + ): InteractableHitInfo | null { + const hitInfos: InteractableHitInfo[] = [] + for (const hit of hits) { + const interactable = this.interactionManager.getInteractableByCollider( + hit.collider + ) + + if ( + interactable !== null && + (interactable.targetingMode & this.targetingMode) !== 0 + ) { + hit.skipRemaining = false + + hitInfos.push({ + interactable: interactable, + localHitPosition: interactable.sceneObject + .getTransform() + .getInvertedWorldTransform() + .multiplyPoint(hit.position), + hit: { + collider: hit.collider, + distance: hit.distance, + normal: hit.normal, + position: hit.position, + skipRemaining: false, + t: 0, + triangle: hit.triangle, + getTypeName: hit.getTypeName, + isOfType: hit.isOfType, + isSame: hit.isSame, + }, + targetMode: this.targetingMode, + }) + if ( + //Poke Start Event + (this._currentInteractableHitInfo === null && + this.checkAlignment(hit.position)) || + //Poke Update Event + (this._currentInteractableHitInfo && + interactable === this._currentInteractableHitInfo.interactable) + ) { + return this.getNearestDeeplyNestedInteractable(hitInfos) + } + } + } + + return null + } + + private getNearestDeeplyNestedInteractable( + hitInfos: InteractableHitInfo[] + ): InteractableHitInfo | null { + const infos = hitInfos.reverse() + + let targetHitInfo: InteractableHitInfo | null = null + + for (const currentHitInfo of infos) { + if ( + targetHitInfo === null || + isDescendantOf( + currentHitInfo.interactable.sceneObject, + targetHitInfo.interactable.sceneObject + ) + ) { + targetHitInfo = currentHitInfo + } else { + break + } + } + + return targetHitInfo + } + + /** @inheritdoc */ + destroy(): void {} + + /** @returns whether the target provider is triggering or not */ + isTriggering(): boolean { + return this.currentInteractableHitInfo !== null + } + + /** @inheritdoc */ + getInteractionStrength() { + return this.currentInteractableHitInfo !== null ? 1 : 0 + } + + /** @inheritdoc */ + protected isAvailable(): boolean { + return ( + this.hand.indexTip !== null && + this.hand.indexUpperJoint !== null && + this.hand.enabled && + this.hand.isTracked() + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts.meta new file mode 100644 index 00000000..9c6e752c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/PokeTargetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! cce2acca-d032-4558-98ab-9a9d1132fdee + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! cce2acca-d032-4558-98ab-9a9d1132fdee + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d118b0b8-d87c-4ce8-8577-71fa67b95e77 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts new file mode 100644 index 00000000..f87c19cd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts @@ -0,0 +1,27 @@ +/** + * Information to draw a ray + */ +export type RaycastInfo = { + direction: vec3 + locus: vec3 +} + +/** + * Provides ray information in order to do ray casting + */ +export interface RayProvider { + /** + * Returns raycast information of ray + */ + getRaycastInfo(): RaycastInfo + + /** + * Returns whether the ray provider is an usable state or not (for instance, hands are not tracked) + */ + isAvailable(): boolean + + /** + * Reset function that can be called for instance when hands are not tracked to reset inner logics + */ + reset(): void +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts.meta new file mode 100644 index 00000000..3ded5baa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/RayProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 5a5820be-970f-449f-a3f4-935091fdbbf1 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 5a5820be-970f-449f-a3f4-935091fdbbf1 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 88bd5eed-b585-4473-ad12-d11bd310aedf + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts new file mode 100644 index 00000000..8d51b0b5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts @@ -0,0 +1,80 @@ +import WorldCameraFinderProvider from "../../Providers/CameraProvider/WorldCameraFinderProvider" +import {RaycastInfo, RayProvider} from "./RayProvider" + +/** + * Constructs the {@link RaycastInfo} from the cursor position after a touch event has happened. + */ +export class TouchRayProvider implements RayProvider { + private raycastInfo: RaycastInfo | null = null + private cursorPosition: vec2 | null = null + private camera = WorldCameraFinderProvider.getInstance() + + constructor(script: ScriptComponent, maxRayDistance: number) { + script + .createEvent("TouchStartEvent") + .bind(this.onTouchStartEvent.bind(this)) + + script.createEvent("TouchMoveEvent").bind(this.onTouchMoveEvent.bind(this)) + + script.createEvent("TouchEndEvent").bind(this.onTouchEndEvent.bind(this)) + + script.createEvent("HoverEvent").bind(this.onHoverEvent.bind(this)) + + script.createEvent("UpdateEvent").bind(() => { + if (this.cursorPosition === null) { + this.raycastInfo = null + } else { + const locus = this.camera.screenSpaceToWorldSpace( + this.cursorPosition.x, + this.cursorPosition.y, + 0 + ) + this.raycastInfo = { + locus: locus, + direction: this.camera + .screenSpaceToWorldSpace( + this.cursorPosition.x, + this.cursorPosition.y, + maxRayDistance + ) + .sub(locus) + .normalize(), + } + } + }) + } + + /** @inheritdoc */ + getRaycastInfo(): RaycastInfo { + return ( + this.raycastInfo ?? { + direction: vec3.zero(), + locus: vec3.zero(), + } + ) + } + + /** @inheritdoc */ + isAvailable(): boolean { + return this.cursorPosition !== null + } + + /** @inheritdoc */ + reset(): void {} + + private onTouchStartEvent(ev: TouchStartEvent): void { + this.cursorPosition = ev.getTouchPosition() + } + + private onTouchMoveEvent(ev: TouchMoveEvent): void { + this.cursorPosition = ev.getTouchPosition() + } + + private onTouchEndEvent(ev: TouchEndEvent): void { + this.cursorPosition = ev.getTouchPosition() + } + + private onHoverEvent(ev: HoverEvent): void { + this.cursorPosition = ev.getHoverPosition() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts.meta new file mode 100644 index 00000000..075395ab --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/TouchRayProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! d0fa55d4-3b1f-4f67-ab92-0a59924ff498 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d0fa55d4-3b1f-4f67-ab92-0a59924ff498 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c8217ec0-b5ca-432d-8d40-e54fc64a975b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts new file mode 100644 index 00000000..7a4687d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts @@ -0,0 +1,46 @@ +const EPSILON_LENGTH = 1e-6 + +/** + * Represents a rotation around an arbitrary axis. + */ +export default class AxisAngle { + /** + * @param axis - the axis of the rotation + * @param angle - the angle of the rotation + */ + constructor(public axis: vec3, public angle: number) {} + + /** + * @returns a new rotation created from 'this' where the angle is multiplied by the given factor. + * @param factor - the factor to multiply the original rotation's angle with. + */ + multipliedBy(factor: number): AxisAngle { + return new AxisAngle(this.axis, factor * this.angle) + } + + static applyRotation(axisAngle: AxisAngle, vec3: vec3): vec3 { + return quat.angleAxis(axisAngle.angle, axisAngle.axis).multiplyVec3(vec3) + } + + /** + * @returns the rotation between the directions of two vectors in the form of axis & angle + * @param v1 - the direction to rotate from + * @param v2 - the direction to rotate to + */ + static getRotationBetween(v1: vec3, v2: vec3): AxisAngle { + const v1unit = v1.normalize() + const v2unit = v2.normalize() + + const cross = v1unit.cross(v2unit) + const crossLength = cross.length + if (crossLength < EPSILON_LENGTH) { + return new AxisAngle(vec3.right(), 0) + } + + const dot = v1unit.dot(v2unit) + + const axis = cross.normalize() + const angle = Math.atan2(crossLength, dot) + return new AxisAngle(axis, angle) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts.meta new file mode 100644 index 00000000..f268ea0b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/AxisAngle.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 65faf7ad-305a-4083-aa2f-f26df5c86fb2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 65faf7ad-305a-4083-aa2f-f26df5c86fb2 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! f8e7926a-8858-4056-8e5f-2323dd9e01da + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts new file mode 100644 index 00000000..63098196 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts @@ -0,0 +1,117 @@ +import {inverseLerp} from "../../../Utils/mathUtils" +import {IrInteractionTransition} from "./IrInteractionTransition" + +type ContinousIrInteractionTransitionConfig = { + /** + * Maximum rotation around X axis in degrees when the hand is in a low position + */ + maximumRotationXDegrees: number + + /** + * Minimum height difference between neck and hand to control X rotation + */ + minNeckHandDifference: number + + /** + * Maximum height difference between neck and hand to control X rotation + */ + maxNeckHandDifference: number + + /** + * Enable/Disable the counter effect controlled by the gaze pitch + */ + enableGazeControl: boolean + + /** + * Minimum gaze pitch in degrees to control X rotation + */ + minGazePitchDegrees: number + + /** + * Maximum gaze pitch in degrees to control X rotation + */ + maxGazePitchDegrees: number +} + +const ContinousIrInteractionTransitionConfigDefault = { + maximumRotationXDegrees: 25, + minNeckHandDifference: 10, + maxNeckHandDifference: 45, + enableGazeControl: false, + minGazePitchDegrees: 25, + maxGazePitchDegrees: 40, +} + +/** + * Class to implement Directly controlled continuous IR Transition Strategy + */ +export default class ContinuousIrInteractionTransition + implements IrInteractionTransition +{ + /** @inheritdoc */ + computeXRotationInDegrees( + gazePitchInDegrees: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number { + const transformedHandPoint = toWorldFromSituationSpace + .inverse() + .multiplyPoint(handPoint) + + const rotationInDegrees = + this.computeMultiplier(transformedHandPoint, gazePitchInDegrees) * + ContinousIrInteractionTransitionConfigDefault.maximumRotationXDegrees + return rotationInDegrees + } + + /** @inheritdoc */ + computeXRotationInRadians( + gazePitchInRadians: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number { + return ( + MathUtils.DegToRad * + this.computeXRotationInDegrees( + MathUtils.RadToDeg * gazePitchInRadians, + toWorldFromSituationSpace, + handPoint + ) + ) + } + + /** + * Computes the multiplier for the Ir interaction additional rotation in continuous transition mode + * @param handPoint - hand point used for height estimation + * @param gazePitchInDegrees - gaze pitch given in degrees + * @returns multiplier for the Ir interaction interaction rotation + */ + private computeMultiplier( + handPoint: vec3, + gazePitchInDegrees: number + ): number { + const effect = MathUtils.clamp( + inverseLerp( + -ContinousIrInteractionTransitionConfigDefault.minNeckHandDifference, + -ContinousIrInteractionTransitionConfigDefault.maxNeckHandDifference, + handPoint.y + ), + 0, + 1 + ) + + const counterEffect = + ContinousIrInteractionTransitionConfigDefault.enableGazeControl + ? MathUtils.clamp( + inverseLerp( + -ContinousIrInteractionTransitionConfigDefault.minGazePitchDegrees, + -ContinousIrInteractionTransitionConfigDefault.maxGazePitchDegrees, + gazePitchInDegrees + ), + 0, + 1 + ) + : 0 + return MathUtils.clamp(effect - counterEffect, 0, 1) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts.meta new file mode 100644 index 00000000..9d83015f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/ContinousIrInteractionTransition.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 92c11562-1e2a-4b0a-89e2-77fe9f1cf536 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 92c11562-1e2a-4b0a-89e2-77fe9f1cf536 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 792e585d-f849-424e-bfda-f828d3dbd444 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts new file mode 100644 index 00000000..1e78ab7d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts @@ -0,0 +1,33 @@ +/** + * Interface for computing the additional rotation + * on the targeting ray direction to make use of tracking in IR FoV + */ +export interface IrInteractionTransition { + /** + * Computes an extra rotation around the X axis of Situation space + * based on the height of the hand point and the gaze pitch to make use of the ray in IR FoV range + * @param gazePitchInDegrees - gaze pitch given in degrees + * @param toWorldFromSituationSpace - situationSpace-to-world transformation + * @param handPoint - hand point used for height estimation + * @returns the rotation in degrees to be applied on targeting direction around X axis + */ + computeXRotationInDegrees( + gazePitchInDegrees: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number + + /** + * Computes an extra rotation around the X axis of Situation space + * based on the height of the hand point and the gaze pitch to make use of the ray in IR FoV range + * @param gazePitchInRadians - gaze pitch given in radians + * @param toWorldFromSituationSpace - situationSpace-to-world transformation + * @param handPoint - hand point used for height estimation + * @returns the rotation in radians to be applied on targeting direction around X axis + */ + computeXRotationInRadians( + gazePitchInRadians: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts.meta new file mode 100644 index 00000000..bf4eb670 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/IrInteractionTransition.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 6b3c73a6-c97c-4170-a168-e51202c45556 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6b3c73a6-c97c-4170-a168-e51202c45556 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 99e2c8dc-cff6-499c-840d-59eafb909240 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts new file mode 100644 index 00000000..b2b8e2ee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts @@ -0,0 +1,720 @@ +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {Keypoint} from "../../../Providers/HandInputData/Keypoint" +import {inverseLerp} from "../../../Utils/mathUtils" +import NativeLogger from "../../../Utils/NativeLogger" +import {LowPassFilterVec3_v2} from "../../../Utils/OneEuroFilter" +import AxisAngle from "./AxisAngle" +import {WindowMode} from "./TimeDataContainer" +import {TimedVec2Container} from "./TimedVec2Container" +import {TimedScalarContainer} from "./TimeScalarContainer" + +const TAG = "PinchJumpSuppressor" + +/** + * Options for spaces where knuckles are + * transformed from world to be smoothed. + */ +export type KnuckleSmoothingSpace = "DeviceCenter" | "TrackingCamera" + +type PinchJumpSuppressorConfig = { + /** + * The space where knuckles are transformed from world + * to be smoothed. + * Two options are available: device center or tracking camera + * Default: device center + */ + knuckleSmoothingSpace: KnuckleSmoothingSpace + + /** + * Lower bound for normalized pinch intensity + * calculated based on the proximity of fingers + */ + minPinchDistanceCm: number + + /** + * Upper bound for normalized pinch intensity + * calculated based on the proximity of fingers + */ + maxPinchDistanceCm: number + + /** + * Maximum speed value for normalizing the pinch intensity + * calculated based on the relative velocity of fingers + */ + maxPinchSpeedCmPerSec: number + + /** + * Window size (in frame numbers) to aggregate pinch radius measurements + * for calculating relative finger velocity based pinch intensity + */ + pinchDistanceTimeSeriesWindowSizeFrame: number + + /** + * Window size (in seconds) to aggregate measurements + * for calculating average distance of knuckles relative to the smoothing space origin + */ + stableFingerRootsAverageDistanceWindowSizeSec: number + + /** + * Window size (in seconds) to aggregate measurements + * for calculating knuckles' velocity + */ + stableFingerKnuckleVelocityWindowSizeSec: number + + /** + * If true, the smoothed knuckles are transformed back to world to compute their velocity + * after smoothed in the space selected by "knuckleSmoothingSpace". + * If false, the velocity will be calculated in the smoothing space. + */ + transformStableKnucklesBackToWorld: boolean + + /** + * Lower bound for normalized knuckle movement intensity + * calculated based on the knuckles' velocity + */ + minKnuckleSpeedCmPerSec: number + + /** + * Upper bound for normalized knuckle movement intensity + * calculated based on the knuckles' velocity + */ + maxKnuckleSpeedCmPerSec: number + + /** + * Whether to use the combined position+pinch intensity for comparision + * when deciding to leave the active state + */ + useCombinedIntensityAtActiveStateLeave: boolean + + /** + * Threshold to compare intensity indicators to, when deciding to enter the active state + */ + activeStateEnterIntensityThreshold: number + + /** + * Threshold to compare intensity indicators to, when deciding to leave the active state + */ + activeStateLeaveIntensityThreshold: number + + /** + * The interval during which the ray's locus and direction + * is strongly filtered to suppress the jump. + * At the end of this interval, the so-called delta replaces the filter. + */ + suppressionBuildUpInterval: number + + /** + * If gradualDeltaReleaseEnabled is true, this will be the length of the interval + * during which the delta is gradually reduced to zero. + */ + suppressionTearDownInterval: number + + /** + * Activates that part of the logic which replaces the effect + * of a time-limited filter with a displacement (the delta) + * during the interval the pinch is held + */ + pinchJumpSuppressionDeltaEnabled: boolean + + /** + * If true, the delta is removed gradually at the end, not abruptly + */ + gradualDeltaReleaseEnabled: boolean + + /** + * Activates logging in the PinchJumpSuppressor + */ + verbosePinchJumpSuppressor: boolean +} + +const PinchJumpSuppressorConfigDefault: PinchJumpSuppressorConfig = { + knuckleSmoothingSpace: "DeviceCenter", + minPinchDistanceCm: 3.5, + maxPinchDistanceCm: 4, + maxPinchSpeedCmPerSec: 60, + pinchDistanceTimeSeriesWindowSizeFrame: 4, + stableFingerRootsAverageDistanceWindowSizeSec: 0.66, + stableFingerKnuckleVelocityWindowSizeSec: 0.3, + transformStableKnucklesBackToWorld: true, + minKnuckleSpeedCmPerSec: 10.0, + maxKnuckleSpeedCmPerSec: 20.0, + useCombinedIntensityAtActiveStateLeave: false, + activeStateEnterIntensityThreshold: 0.6, + activeStateLeaveIntensityThreshold: 0.2, + suppressionBuildUpInterval: 0.5, + suppressionTearDownInterval: 0.5, + pinchJumpSuppressionDeltaEnabled: true, + gradualDeltaReleaseEnabled: true, + verbosePinchJumpSuppressor: false, +} +/** + * Speed descriptor of a pinch (nearing or opening finger tips) + * Constains a sign indicator and an absolute vlaue + */ +export type PinchSpeedDescriptor = { + /** + * isNegative=true corresponds to a pinch + * that is building up (the fingers are nearing) + */ + isNegative: boolean + absoluteValue: number +} + +export enum DeltaMode { + IDLE, + MEASURE, + APPLY, +} + +export type RayData = { + direction: vec3 + locus: vec3 +} + +export enum SuppressionState { + NOT_ACTIVE, + ACTIVE, +} + +/** + * A major issue with far field targetging is that the ray + * jumps during pinching even if the hand remains still + * (aside from the movement of the fingers performing the pinch). + * + * This class contains the logic to suppress this undesirable jump effect. + * It aims to handle this problem without freezing the ray + * so when the pinch is held out for longer periods, + * the possibility to drag or move the targeted object is still retained. + */ +export class PinchJumpSuppressor { + // Native Logging + private log = new NativeLogger(TAG) + + protected stableFingerRootsAverageDistance = new TimedScalarContainer( + WindowMode.TIME, + PinchJumpSuppressorConfigDefault.stableFingerRootsAverageDistanceWindowSizeSec + ) + protected stableFingerRootsTimeSeries: TimedVec2Container[] = [] + + protected pinchDistance: number | null = null + protected pinchDistanceTimeSeries = new TimedScalarContainer( + WindowMode.FRAME, + PinchJumpSuppressorConfigDefault.pinchDistanceTimeSeriesWindowSizeFrame + ) + protected pinchSpeed: number | null = null + + protected deltaMode = DeltaMode.IDLE + protected deltaMultiplier = 1 + protected directionDelta = new AxisAngle(vec3.zero(), 0) + protected locusDelta = vec3.zero() + + protected directionLowpassFilter = new LowPassFilterVec3_v2(1.0) + protected locusLowpassFilter = new LowPassFilterVec3_v2(1.0) + + private lastActivationTimestampInSecond: number | null = null + private lastDeactivationTimestampInSecond: number | null = null + private suppressionState = SuppressionState.NOT_ACTIVE + + private deltaEnabled: boolean = + PinchJumpSuppressorConfigDefault.pinchJumpSuppressionDeltaEnabled + private gradualDeltaReleaseEnabled: boolean = + PinchJumpSuppressorConfigDefault.gradualDeltaReleaseEnabled + private verboseMode: boolean = + PinchJumpSuppressorConfigDefault.verbosePinchJumpSuppressor + + private minKnuckleSpeedCmPerSec: number = + PinchJumpSuppressorConfigDefault.minKnuckleSpeedCmPerSec + private maxKnuckleSpeedCmPerSec: number = + PinchJumpSuppressorConfigDefault.maxKnuckleSpeedCmPerSec + + private minPinchDistanceCm: number = + PinchJumpSuppressorConfigDefault.minPinchDistanceCm + private maxPinchDistanceCm: number = + PinchJumpSuppressorConfigDefault.maxPinchDistanceCm + + private maxPinchSpeedCmPerSec: number = + PinchJumpSuppressorConfigDefault.maxPinchSpeedCmPerSec + + private useCombinedIntensityAtActiveStateLeave: boolean = + PinchJumpSuppressorConfigDefault.useCombinedIntensityAtActiveStateLeave + private activeStateEnterIntensity: number = + PinchJumpSuppressorConfigDefault.activeStateEnterIntensityThreshold + private activeStateLeaveIntensity: number = + PinchJumpSuppressorConfigDefault.activeStateLeaveIntensityThreshold + + private suppressionBuildUpInterval: number = + PinchJumpSuppressorConfigDefault.suppressionBuildUpInterval + private suppressionTearDownInterval: number = + PinchJumpSuppressorConfigDefault.suppressionTearDownInterval + + private _knuckleSmoothingSpace: KnuckleSmoothingSpace = + PinchJumpSuppressorConfigDefault.knuckleSmoothingSpace + + constructor(protected hand: BaseHand) { + for (let i = 0; i < this.stableKnuckleKeypoints.length; i++) { + const series = new TimedVec2Container( + WindowMode.TIME, + PinchJumpSuppressorConfigDefault.stableFingerKnuckleVelocityWindowSizeSec + ) + this.stableFingerRootsTimeSeries.push(series) + } + } + + /** + * @returns the name of the selected space + * where knuckles are transformed from world to be smoothed. + */ + get knuckleSmoothingSpace(): string { + return this._knuckleSmoothingSpace + } + + /** + * Determines the necessary suppression for the current frame + * @param knuckleSmoothingSpaceFromWorld - smoothingSpace-from-world transformation + */ + updateState(knuckleSmoothingSpaceFromWorld: mat4): void { + this.updatePinchDistance() + this.updateSuppressionState() + const stableKnuckleKeypoints = this.stableKnuckleKeypoints + const knucklesDistance = + this.computeKnucklesDistanceFromSmootingSpaceOrigin( + knuckleSmoothingSpaceFromWorld, + stableKnuckleKeypoints + ) + const maxKnuckleMoveIntensity = this.computeMaxKnuckleMoveIntensity( + knucklesDistance, + knuckleSmoothingSpaceFromWorld, + stableKnuckleKeypoints + ) + this.updateSuppressionParameters(maxKnuckleMoveIntensity) + } + + /** + * Applies suppression to the given ray by returning its modified value. + * @param direction - the direction of the ray to work on + * @param locus - the locus of the ray to work on + * @returns the components of the ray after applying suppression to them. + */ + applySuppression(direction: vec3, locus: vec3): RayData { + let modifiedDirection = this.applyDirectionLowpassFilter(direction) + modifiedDirection = this.applyDirectionDelta(modifiedDirection) + + let modifiedLocus = this.applyLocusLowpassFilter(locus) + modifiedLocus = this.applyLocusDelta(modifiedLocus) + + return { + direction: modifiedDirection, + locus: modifiedLocus, + } + } + + /** + * @returns the position of 4 knuckle landmarks if they are available + */ + private get stableKnuckleKeypoints(): (Keypoint | null)[] { + return [ + this.hand.indexKnuckle, + this.hand.middleKnuckle, + this.hand.ringKnuckle, + this.hand.pinkyKnuckle, + ] + } + + /** + * Calculates average distance of knuckles relative to the smoothing space origin. + * @param knuckleSmoothingSpaceFromWorld - smoothingSpace-from-world transformation + * @param stableKnuckleKeypoints - position of 4 knuckle landmarks, assumed to be stable while pinching + * @returns the calculated distance value + */ + private computeKnucklesDistanceFromSmootingSpaceOrigin( + knuckleSmoothingSpaceFromWorld: mat4, + stableKnuckleKeypoints: (Keypoint | null)[] + ): number | null { + let averageDistance = 0 + let length = 0 + for (const keypoint of stableKnuckleKeypoints) { + if (keypoint === null) { + continue + } + const position = knuckleSmoothingSpaceFromWorld.multiplyPoint( + keypoint.position + ) + averageDistance += position.z + length++ + } + + if (length > 0) { + averageDistance /= length + } + + this.stableFingerRootsAverageDistance.pushData(getTime(), averageDistance) + return this.stableFingerRootsAverageDistance.average() + } + + /** + * Calculates the movement intensity of each knuckles assumed to be stable while pinching + * based on their 2D velocity. Returns the maximum of these intensities. + * @param knucklesDistance - distance of knuckles relative to the smoothing space origin + * @param knuckleSmoothingSpaceFromWorld - smoothingSpace-from-world transformation + * @param stableKnuckleKeypoints - position of 4 knuckle landmarks, assumed to be stable while pinching + * @returns the calculated maximum movement intensity value + */ + private computeMaxKnuckleMoveIntensity( + knucklesDistance: number | null, + knuckleSmoothingSpaceFromWorld: mat4, + stableKnuckleKeypoints: (Keypoint | null)[] + ): number { + let maxKnuckleSpeed = null + if (knucklesDistance) { + for (let i = 0; i < this.stableFingerRootsTimeSeries.length; i++) { + const keyPoint = stableKnuckleKeypoints[i] + const pointInWorld = keyPoint ? keyPoint.position : vec3.zero() + + const pointInSmoothingSpace = + knuckleSmoothingSpaceFromWorld.multiplyPoint(pointInWorld) + const depth = pointInSmoothingSpace.z + const stablePointSmoothingSpace = + depth !== 0 + ? new vec3( + (pointInSmoothingSpace.x / depth) * knucklesDistance, + (pointInSmoothingSpace.y / depth) * knucklesDistance, + knucklesDistance + ) + : new vec3( + pointInSmoothingSpace.x, + pointInSmoothingSpace.y, + knucklesDistance + ) + + const usedStablePoint = + PinchJumpSuppressorConfigDefault.transformStableKnucklesBackToWorld + ? knuckleSmoothingSpaceFromWorld + .inverse() + .multiplyPoint(stablePointSmoothingSpace) + : stablePointSmoothingSpace + + this.stableFingerRootsTimeSeries[i].pushData( + getTime(), + new vec2(usedStablePoint.x, usedStablePoint.y) + ) + const knuckleSpeedCmPerSec = + this.stableFingerRootsTimeSeries[i].aggregateAbsoluteVelocity() + if ( + knuckleSpeedCmPerSec !== null && + (maxKnuckleSpeed === null || knuckleSpeedCmPerSec > maxKnuckleSpeed) + ) { + maxKnuckleSpeed = knuckleSpeedCmPerSec + } + } + } + + let maxKnuckleMoveIntensity = 1 + if (maxKnuckleSpeed !== null) { + maxKnuckleMoveIntensity = MathUtils.clamp( + inverseLerp( + this.minKnuckleSpeedCmPerSec, + this.maxKnuckleSpeedCmPerSec, + maxKnuckleSpeed + ), + 0, + 1 + ) + } + + if (this.verboseMode) { + this.log.d("MaxKnuckleSpeedCmPerSec: " + maxKnuckleSpeed?.toFixed(2)) + this.log.d( + "MaxKnuckleMoveIntensity: " + maxKnuckleMoveIntensity.toFixed(2) + ) + } + return maxKnuckleMoveIntensity + } + + /** + * Gets the intensity of the pinch based on the proximity of fingers + * @returns the normalized position intensity + */ + private getPositionIntensity(): number | null { + if (!this.pinchDistance) { + return null + } + + if (this.verboseMode) { + this.log.d("pinchDistance: " + this.pinchDistance.toFixed(2)) + } + + let normalizedRadius = inverseLerp( + this.minPinchDistanceCm, + this.maxPinchDistanceCm, + this.pinchDistance + ) + normalizedRadius = MathUtils.clamp(normalizedRadius, 0, 1) + return 1 - normalizedRadius + } + + /** + * Gets the intensity of the pinch based on the relative velocity of fingers + * @returns a speed descriptor containing the normalized absolute velocity and its sign + */ + private getPinchSpeedDescriptor(): PinchSpeedDescriptor | null { + if (!this.pinchSpeed) { + return null + } + + const normalizedSpeed = MathUtils.clamp( + Math.abs(this.pinchSpeed) / this.maxPinchSpeedCmPerSec, + 0, + 1 + ) + + if (this.verboseMode) { + this.log.d("pinchSpeed: " + this.pinchSpeed.toFixed(2)) + this.log.d("normalizedSpeed: " + normalizedSpeed.toFixed(2)) + } + + return { + isNegative: this.pinchSpeed < 0, + absoluteValue: normalizedSpeed, + } + } + + /** + * Updates pinch radius which indicates how close fingers are to a pinch + */ + private updatePinchDistance(): void { + if (this.hand.indexTip === null || this.hand.thumbTip === null) { + this.pinchDistance = null + this.pinchSpeed = null + this.pinchDistanceTimeSeries.clear() + return + } + const newPinchDistance = this.hand.indexTip.position.distance( + this.hand.thumbTip.position + ) + + this.pinchDistanceTimeSeries.pushData(getTime(), newPinchDistance) + + if (this.verboseMode) { + this.log.d("newPinchDistance: " + newPinchDistance.toFixed(3)) + const deltaTime = getDeltaTime() + this.log.d("deltaTime: " + deltaTime.toFixed(3)) + } + + this.pinchSpeed = this.pinchDistanceTimeSeries.aggregateSignedVelocity() + this.pinchDistance = newPinchDistance + } + + /** + * Executes the low-pass filter on the given targeting locus by returning its modified value. + * @param locus - the locus to work on + * @returns the modified locus + */ + private applyLocusLowpassFilter(locus: vec3): vec3 { + const filteredLocus = this.locusLowpassFilter?.filter(locus) + if (this.deltaMode === DeltaMode.MEASURE) { + this.locusDelta = filteredLocus.sub(locus) + } + return filteredLocus + } + + /** + * AExecutes the low-pass filter on the given targeting direction by returning its modified value. + * @param direction - the direction to work on + * @returns the modified direction + */ + private applyDirectionLowpassFilter(direction: vec3): vec3 { + const filteredDirection = this.directionLowpassFilter.filter(direction) + if (this.deltaMode === DeltaMode.MEASURE) { + this.directionDelta = AxisAngle.getRotationBetween( + direction, + filteredDirection + ) + + if (this.verboseMode) { + this.log.d( + "directionDelta: " + + this.directionDelta.angle.toFixed(3) + + ", " + + this.directionDelta.axis.toString() + ) + } + } + return filteredDirection + } + + /** + * Adds the stored delta (partially or fully) to the given targeting locus by returning its modified value. + * @param locus - the locus to work on + * @returns the modified locus + */ + private applyLocusDelta(locus: vec3): vec3 { + return this.deltaMode === DeltaMode.APPLY + ? locus.add(this.locusDelta.uniformScale(this.deltaMultiplier)) + : locus + } + + /** + * Adds the stored delta (partially or fully) to the given targeting locus by returning its modified value. + * @param direction - the direction to work on + * @returns the modified direction + */ + private applyDirectionDelta(direction: vec3): vec3 { + return this.deltaMode === DeltaMode.APPLY + ? AxisAngle.applyRotation( + this.directionDelta.multipliedBy(this.deltaMultiplier), + direction + ) + : direction + } + + /** + * Determines the suppression state (active or not active) for the current frame. + */ + private updateSuppressionState(): void { + const previousState = this.suppressionState + + const pinchPositionIntensity = this.getPositionIntensity() + const pinchSpeedDescriptor = this.getPinchSpeedDescriptor() + + if (pinchPositionIntensity === null || pinchSpeedDescriptor === null) { + this.suppressionState = SuppressionState.NOT_ACTIVE + return + } + + if (this.verboseMode && pinchSpeedDescriptor) { + this.log.d("pinchPositionIntensity: " + pinchPositionIntensity.toFixed(2)) + this.log.d( + "pinchSpeedDescriptor: " + + (pinchSpeedDescriptor.isNegative ? "(-)" : "(+)") + + pinchSpeedDescriptor.absoluteValue.toFixed(2) + ) + } + + const combinedPinchIntensity = MathUtils.clamp( + pinchPositionIntensity + pinchSpeedDescriptor.absoluteValue, + 0, + 1 + ) + + if (this.verboseMode) { + this.log.d("combinedPinchIntensity: " + combinedPinchIntensity.toFixed(2)) + } + + let willBeActive + if (previousState === SuppressionState.NOT_ACTIVE) { + willBeActive = + combinedPinchIntensity >= this.activeStateEnterIntensity && + pinchSpeedDescriptor.isNegative + } else { + willBeActive = + (this.useCombinedIntensityAtActiveStateLeave + ? combinedPinchIntensity + : pinchPositionIntensity) >= this.activeStateLeaveIntensity || + pinchSpeedDescriptor.isNegative + } + + this.suppressionState = willBeActive + ? SuppressionState.ACTIVE + : SuppressionState.NOT_ACTIVE + + if (this.verboseMode) { + this.log.d("suppressionState: " + this.suppressionState) + } + + if (this.suppressionState === SuppressionState.ACTIVE) { + if (previousState === SuppressionState.NOT_ACTIVE) { + this.lastActivationTimestampInSecond = getTime() + this.lastDeactivationTimestampInSecond = null + + if (this.verboseMode) { + this.log.d("lastActivationTimestampInSecond was SET") + } + } + } else { + if (previousState === SuppressionState.ACTIVE) { + this.lastDeactivationTimestampInSecond = getTime() + } + this.lastActivationTimestampInSecond = null + + if (this.verboseMode) { + this.log.d("lastActivationTimestampInSecond was RESET") + } + } + + if (this.verboseMode) { + this.log.d( + "lastActivationTimestampInSecond: " + + this.lastActivationTimestampInSecond?.toFixed(2) + ) + this.log.d( + "lastDeactivationTimestampInSecond: " + + this.lastDeactivationTimestampInSecond?.toFixed(2) + ) + } + } + + /** + * Updates the suppression parameters (lowpass filter alpha; delta logic mode and multiplier) for the current frame + * based on the suppression state and the calculated knuckle movement intensity. + * @param knuckleMoveIntensity - the calculated knuckle movement intensity on the current frame + */ + private updateSuppressionParameters(knuckleMoveIntensity: number): void { + let alpha = 1 + if (this.suppressionState === SuppressionState.ACTIVE) { + const timeSinceLastActivation = + getTime() - (this.lastActivationTimestampInSecond ?? getTime()) + const suppressionBuildUpIntervalHasElapsed = + timeSinceLastActivation >= this.suppressionBuildUpInterval + + if (this.deltaEnabled) { + this.deltaMode = suppressionBuildUpIntervalHasElapsed + ? DeltaMode.APPLY + : DeltaMode.MEASURE + this.deltaMultiplier = 1 + } + + const alphaBase = suppressionBuildUpIntervalHasElapsed + ? 1 + : knuckleMoveIntensity + alpha = Math.min(Math.pow(alphaBase, 4), 1) + + if (this.verboseMode) { + this.log.d( + "timeSinceLastActivation: " + timeSinceLastActivation.toFixed(2) + ) + this.log.d( + "suppressionBuildUpIntervalHasElapsed: " + + suppressionBuildUpIntervalHasElapsed + ) + this.log.d("alphaBase: " + alphaBase.toFixed(2)) + } + } else if ( + this.deltaEnabled && + this.lastDeactivationTimestampInSecond !== null + ) { + const timeSinceLastDeactivation = + getTime() - this.lastDeactivationTimestampInSecond + + if ( + this.gradualDeltaReleaseEnabled && + timeSinceLastDeactivation < this.suppressionTearDownInterval + ) { + const interpolationFactor = + timeSinceLastDeactivation / this.suppressionTearDownInterval + + this.deltaMode = DeltaMode.APPLY + this.deltaMultiplier = 1 - interpolationFactor + } else { + this.deltaMode = DeltaMode.IDLE + this.deltaMultiplier = 1 + } + } + + if (this.verboseMode) { + this.log.d("alpha: " + alpha.toFixed(2)) + } + + this.directionLowpassFilter.setAlpha(alpha) + this.locusLowpassFilter.setAlpha(alpha) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts.meta new file mode 100644 index 00000000..293cd342 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/PinchJumpSuppressor.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f24b961f-6187-4354-8e51-58a1b481430d + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f24b961f-6187-4354-8e51-58a1b481430d + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! a3f629c0-c396-4074-b904-5f25ebb3dee6 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts new file mode 100644 index 00000000..617e9df0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts @@ -0,0 +1,658 @@ +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {HandType} from "../../../Providers/HandInputData/HandType" +import {interpolateVec3} from "../../../Utils/mathUtils" +import {validate} from "../../../Utils/validate" +import {RaycastInfo} from "../RayProvider" +import ContinuousIrInteractionTransition from "./ContinousIrInteractionTransition" +import {IrInteractionTransition} from "./IrInteractionTransition" +import {PinchJumpSuppressor} from "./PinchJumpSuppressor" +import RaycastBase, {RayAlgorithmData} from "./RaycastBase" +import RgbIrTransitionJumpSuppressor from "./RgbIrTransitionJumpSuppressor" +import SwitchIrInteractionTransition from "./SwitchIrInteractionTransition" + +const TAG = "RaycastAnchorHead" + +const farDirectionStartPointEnum = Object.freeze({ + CERVICAL_LINK: "CervicalLink", + EPAULET: "Epaulet", +}) + +const highLowTargetingInputEnum = Object.freeze({ + HAND_PITCH: "HandPitch", + GAZE_PITCH: "GazePitch", +}) + +const situationSpaceUpEnum = Object.freeze({ + WORLD_UP: "WorldUp", + DEVICE_UP: "DeviceUp", +}) + +const situationSpaceForwardEnum = Object.freeze({ + WORLD_FORWARD: "WorldForward", + DEVICE_FORWARD: "DeviceForward", +}) + +//Linear Transition Mode if true, Switch Transition Mode if false +export type IrInteractionTransitionMode = "Continuous" | "Switch" + +export type RaycastAnchorHeadConfig = { + /** + * Enable/Disable IR interaction rotation on targeting direction + */ + allowIrInteractionRotation: boolean + + /** + * Switches between strategies for Ir interaction transition + * Options: + * - Continuous: Directly controlled continuous IR Transition Mode + * - Switch: Switch-like IR Transition Mode + * Default: Continuous + */ + irInteractionTransitionMode: IrInteractionTransitionMode + + /** + * Amplification value for the wrist based direction component + */ + wristAmplificationForAnchorHead: number + + /** + * Selects the start point for the far direction component + * This can be one of the following: + * - CervicalLink + * - Epaulet + */ + farDirectionStartPoint: string + + /** + * Offset of the Cervical Link point in device space + * relative the device center + */ + cervicalLinkOffsetInDeviceSpace: vec3 + + /** + * Offset of the epaulet point in situation space (composed by using the selected up and forward vectors) + * relative to the Cervical Link point + */ + epauletOffsetInSituationSpace: vec3 + + /** + * Selects the up vector of the space in which the epaulet is defined relative to the Cervical Link. + * This can be either the up vector of the world coordinate system ("WorldUp") + * or the up vector of the device ("DeviceUp") + */ + situationSpaceUp: string + + /** + * Selects the forward vector of the space in which the epaulet is defined relative to the Cervical Link. + * This can be either the forward vector of the world coordinate system ("WorldForward") + * or the forward vector of the device ("DeviceForward") + */ + situationSpaceForward: string + + /** + * The used start point for the far direction component + * can be adjusted between the computed Cervical Link (at 0) and the epaulet points (at 1) + */ + epauletWeight: number + + /** + * additional rotation of ray around X axis, in degrees + */ + extraXRotationDeg: number + + /** + * additional rotation of ray around Y axis, in degrees (for right hand) + */ + extraYRotationDeg: number + + /** + * Whether to ease targeting to high and low targets, or not + */ + facilitateHighLowTargeting: boolean + + /** + * The source of input to control targeting height. Options: + * - HandPitch + * - GazePitch + */ + highLowTargetingInput: string + + /** + * Cervical Link--Hip transition threshold-pair's high end (for hand-pitch, in degrees) + */ + handPitchUpperThresholdPairHighDeg: number + + /** + * Cervical Link--Hip transition threshold-pair's low end (for hand-pitch, in degrees) + */ + handPitchUpperThresholdPairLowDeg: number + + /** + * Halo--Cervical Link transition threshold-pair's high end (for hand-pitch, in degrees) + */ + handPitchLowerThresholdPairHighDeg: number + + /** + * Halo-Cervical Link transition threshold-pair's low end (for hand-pitch, in degrees) + */ + handPitchLowerThresholdPairLowDeg: number + + /** + * Cervical Link--Hip transition threshold-pair's high end (for gaze-pitch, in degrees) + */ + gazePitchUpperThresholdPairHighDeg: number + + /** + * Cervical Link--Hip transition threshold-pair's low end (for gaze-pitch, in degrees) + */ + gazePitchUpperThresholdPairLowDeg: number + + /** + * Halo--Cervical Link transition threshold-pair's high end (for gaze-pitch, in degrees) + */ + gazePitchLowerThresholdPairHighDeg: number + + /** + * Halo-Cervical Link transition threshold-pair's low end (for gaze-pitch, in degrees) + */ + gazePitchLowerThresholdPairLowDeg: number + + /** + * Halo level's Y offset in situation space, from Cervical Link + */ + haloLevelYOffsetFromCervicalLinkInSituationSpace: number + + /** + * Hip level's Y offset in situation space, from Cervical Link + */ + hipLevelYOffsetFromCervicalLinkInSituationSpace: number + + /** + * Activates suppression logic to overcome pinch jumps + */ + pinchJumpSuppressionEnabled: boolean + + /** + * Activates suppression logic to overcome RGB-IR transition jumps + */ + rgbIrTransitionJumpSuppressorEnabled: boolean +} +const RaycastAnchorHeadConfigDefault: RaycastAnchorHeadConfig = { + allowIrInteractionRotation: true, + irInteractionTransitionMode: "Continuous", //Continuous, Switch + wristAmplificationForAnchorHead: 6.5, + farDirectionStartPoint: "CervicalLink", //CervicalLink, Epaulet + cervicalLinkOffsetInDeviceSpace: new vec3(0, -7.5, 8), + epauletOffsetInSituationSpace: new vec3(17.9, 0, 0), + situationSpaceUp: "WorldUp", //WorldUp, DeviceUp + situationSpaceForward: "DeviceForward", //WorldForward, DeviceForward + epauletWeight: 1, + extraXRotationDeg: 2, + extraYRotationDeg: 3, + facilitateHighLowTargeting: true, + highLowTargetingInput: "GazePitch", //HandPitch, GazePitch + handPitchUpperThresholdPairHighDeg: 90, + handPitchUpperThresholdPairLowDeg: 50, + handPitchLowerThresholdPairHighDeg: 50, + handPitchLowerThresholdPairLowDeg: 10, + gazePitchUpperThresholdPairHighDeg: 90, + gazePitchUpperThresholdPairLowDeg: 15, + gazePitchLowerThresholdPairHighDeg: -20, + gazePitchLowerThresholdPairLowDeg: -90, + haloLevelYOffsetFromCervicalLinkInSituationSpace: 64.3, + hipLevelYOffsetFromCervicalLinkInSituationSpace: -64.3, + pinchJumpSuppressionEnabled: true, + rgbIrTransitionJumpSuppressorEnabled: true, +} + +/** + * RaycastAnchorHead uses the Cervical Link location in device space to stabilize the ray, making it more tolerant to head movements. + */ +export default class RaycastAnchorHead extends RaycastBase { + private config: RaycastAnchorHeadConfig = RaycastAnchorHeadConfigDefault + + private pinchJumpSuppressor: PinchJumpSuppressor | null + private rgbIrTransitionJumpSuppressor: RgbIrTransitionJumpSuppressor | null + + private extraXRotationRad = MathUtils.DegToRad * this.config.extraXRotationDeg + private extraYRotationRad = MathUtils.DegToRad * this.config.extraYRotationDeg + + private irInteractionTransitionStrategy = + this.config.allowIrInteractionRotation === true + ? this.createIrInteractionTransitionStrategy() + : undefined + + constructor(hand: BaseHand) { + super(hand) + this.pinchJumpSuppressor = this.config.pinchJumpSuppressionEnabled + ? new PinchJumpSuppressor(hand) + : null + + this.rgbIrTransitionJumpSuppressor = this.config + .rgbIrTransitionJumpSuppressorEnabled + ? new RgbIrTransitionJumpSuppressor(hand) + : null + } + + private createIrInteractionTransitionStrategy(): IrInteractionTransition { + const irInteractionTransitionMode = this.config.irInteractionTransitionMode + + switch (irInteractionTransitionMode) { + case "Continuous": { + return new ContinuousIrInteractionTransition() + } + case "Switch": { + return new SwitchIrInteractionTransition() + } + default: { + throw new Error( + `${TAG}: No matching IrInteractionTransitionStrategy found, could not create strategy` + ) + } + } + } + + /** + * Computes the transform between world and Situation space + */ + private createTransformToWorldFromSituationBasedSpace( + up: vec3, + forward: vec3, + cervicalLinkPos: vec3 + ): mat4 { + up = up.normalize() + vec3.orthonormalize(up, forward) + const right = up.cross(forward).normalize() + + const rotation = mat4.makeBasis(right, up, forward) + const translation = mat4.fromTranslation(cervicalLinkPos) + return translation.mult(rotation) + } + + /** + * Computes the Cervical Link position in world + */ + private computeCervicalLink( + deviceCenterToWorld: mat4, + deviceCenterInDeviceSpace: vec3 + ): vec3 { + const cervicalLinkInDeviceSpace = deviceCenterInDeviceSpace.add( + this.config.cervicalLinkOffsetInDeviceSpace + ) + return deviceCenterToWorld.multiplyPoint(cervicalLinkInDeviceSpace) + } + + /** + * Computes 'situation space' -> world space transformation. + * 'Situation space' can be defined by using + * the up vector of the world or the device and + * the forward vector of the world or the device. + * The center of this space is the user's Cervical Link. + * The returned epaulet point is transformed to world. + * + * Recommended using: world's up and device's forward + * This assures that the user's body rotates with the device around the Y axis + * but won't be affected by head (device) rotation around its X and Z axes + */ + private computeTrasformToWorldFromSituationBasedSpace( + deviceCenterToWorld: mat4, + cervicalLinkInWorld: vec3 + ) { + let up = vec3.zero() + if (this.config.situationSpaceUp === situationSpaceUpEnum.WORLD_UP) { + up = vec3.up() + } else { + const deviceUpwardInWorld = deviceCenterToWorld.multiplyDirection( + vec3.up() + ) + up = deviceUpwardInWorld + } + + let forward = vec3.zero() + if ( + this.config.situationSpaceForward === + situationSpaceForwardEnum.WORLD_FORWARD + ) { + forward = vec3.forward() + } else { + const deviceForwardInWorld = deviceCenterToWorld.multiplyDirection( + vec3.forward() + ) + forward = deviceForwardInWorld + } + + const toWorldFromSituationSpace = + this.createTransformToWorldFromSituationBasedSpace( + up, + forward, + cervicalLinkInWorld + ) + + return toWorldFromSituationSpace + } + + /** + * Computes the Epaulet position (point above shoulder) in world + */ + private computeEpaulet(toWorldFromSituationSpace: mat4): vec3 { + const cervicalLinkInSituation = vec3.zero() + const epauletOffsetInSituationSpace = new vec3( + this.hand.handType === "left" + ? -this.config.epauletOffsetInSituationSpace.x + : this.config.epauletOffsetInSituationSpace.x, + this.config.epauletOffsetInSituationSpace.y, + this.config.epauletOffsetInSituationSpace.z + ) + const epauletInSituation = cervicalLinkInSituation.add( + epauletOffsetInSituationSpace + ) + return toWorldFromSituationSpace.multiplyPoint(epauletInSituation) + } + + private applyXRotation( + vector: vec3, + angleRad: number, + toWorldFromSituationSpace: mat4 + ): vec3 { + const vector4d = new vec4(vector.x, vector.y, vector.z, 1) + + const situSpaceRight = toWorldFromSituationSpace.multiplyDirection( + vec3.right() + ) + + const rotQuat = quat.angleAxis(angleRad, situSpaceRight) + const rotMat = mat4.compose(vec3.zero(), rotQuat, vec3.one()) + const vectorRotated4d = rotMat.multiplyVector(vector4d) + return new vec3(vectorRotated4d.x, vectorRotated4d.y, vectorRotated4d.z) + } + + private applyYRotation( + vector: vec3, + angleRad: number, + handType: HandType + ): vec3 { + const vector4d = new vec4(vector.x, vector.y, vector.z, 1) + + const sign = handType === "left" ? -1 : 1 + + const rotQuat = quat.angleAxis(sign * angleRad, vec3.up()) + const rotMat = mat4.compose(vec3.zero(), rotQuat, vec3.one()) + const vectorRotated4d = rotMat.multiplyVector(vector4d) + return new vec3(vectorRotated4d.x, vectorRotated4d.y, vectorRotated4d.z) + } + + private determineHandPitchInRadians( + wrist: vec3 | null, + index: vec3 | null, + middle: vec3 | null + ): number { + if (!wrist || !index || !middle) { + return 0 + } + const wristToIndex = index.sub(wrist) + const wristToMiddle = middle.sub(wrist) + const forward = wristToIndex.add(wristToMiddle) + const forwardHoriz = Math.sqrt( + forward.x * forward.x + forward.z * forward.z + ) + return Math.atan2(forward.y, forwardHoriz) + } + + private determineGazePitchInRadians( + rayAlgorithmData: RayAlgorithmData + ): number { + const forward = rayAlgorithmData.deviceCenterToWorld.multiplyDirection( + vec3.back() + ) + const forwardHoriz = Math.sqrt( + forward.x * forward.x + forward.z * forward.z + ) + return Math.atan2(forward.y, forwardHoriz) + } + + private determineLowHighRatio( + pitchRad: number, + lowThresholdRad: number, + highThresholdRad: number + ): number { + return MathUtils.clamp( + MathUtils.remap(pitchRad, lowThresholdRad, highThresholdRad, 0, 1), + 0, + 1 + ) + } + + private interpolateFarDirectionStartPoint( + handPitch: number, + lowThreshold: number, + highThreshold: number, + pointA: vec3, + pointB: vec3 + ): vec3 { + const lowHighRatio = this.determineLowHighRatio( + handPitch, + lowThreshold, + highThreshold + ) + return interpolateVec3(pointA, pointB, lowHighRatio) + } + + private applyTargetingHeightControl( + farDirectionStartPoint: vec3, + rayAlgorithmData: RayAlgorithmData, + toWorldFromSituationSpace: mat4 + ): vec3 { + const hipOffsetFromCervicalLinkInSituationSpace = new vec3( + 0, + this.config.hipLevelYOffsetFromCervicalLinkInSituationSpace, + 0 + ) + const haloOffsetFromCervicalLinkInSituationSpace = new vec3( + 0, + this.config.haloLevelYOffsetFromCervicalLinkInSituationSpace, + 0 + ) + + const hipOffsetFromCervicalLinkInWorld = + toWorldFromSituationSpace.multiplyDirection( + hipOffsetFromCervicalLinkInSituationSpace + ) + const haloOffsetFromCervicalLinkInWorld = + toWorldFromSituationSpace.multiplyDirection( + haloOffsetFromCervicalLinkInSituationSpace + ) + + const farDirectionStartPointHipLevel = farDirectionStartPoint.add( + hipOffsetFromCervicalLinkInWorld + ) + const farDirectionStartPointHaloLevel = farDirectionStartPoint.add( + haloOffsetFromCervicalLinkInWorld + ) + + let pitchRad = 0 + let upperThresholdPairHighRad = 0 + let upperThresholdPairLowRad = 0 + let lowerThresholdPairHighRad = 0 + let lowerThresholdPairLowRad = 0 + if ( + this.config.highLowTargetingInput === highLowTargetingInputEnum.HAND_PITCH + ) { + pitchRad = this.determineHandPitchInRadians( + rayAlgorithmData.wrist, + rayAlgorithmData.index, + rayAlgorithmData.mid + ) + upperThresholdPairHighRad = + MathUtils.RadToDeg * this.config.handPitchUpperThresholdPairHighDeg + upperThresholdPairLowRad = + MathUtils.RadToDeg * this.config.handPitchUpperThresholdPairLowDeg + + lowerThresholdPairHighRad = + MathUtils.RadToDeg * this.config.handPitchLowerThresholdPairHighDeg + + lowerThresholdPairLowRad = + MathUtils.RadToDeg * this.config.handPitchLowerThresholdPairLowDeg + } else if ( + this.config.highLowTargetingInput === highLowTargetingInputEnum.GAZE_PITCH + ) { + pitchRad = this.determineGazePitchInRadians(rayAlgorithmData) + upperThresholdPairHighRad = + MathUtils.RadToDeg * this.config.gazePitchUpperThresholdPairHighDeg + + upperThresholdPairLowRad = + MathUtils.RadToDeg * this.config.gazePitchUpperThresholdPairLowDeg + + lowerThresholdPairHighRad = + MathUtils.RadToDeg * this.config.gazePitchLowerThresholdPairHighDeg + + lowerThresholdPairLowRad = + MathUtils.RadToDeg * this.config.gazePitchLowerThresholdPairLowDeg + } + + const midThresholdRad = + (upperThresholdPairLowRad + lowerThresholdPairHighRad) / 2 + + let farDirectionStartPointUpdated = vec3.zero() + if (pitchRad > midThresholdRad) { + farDirectionStartPointUpdated = this.interpolateFarDirectionStartPoint( + pitchRad, + upperThresholdPairLowRad, + upperThresholdPairHighRad, + farDirectionStartPoint, + farDirectionStartPointHipLevel + ) + } else { + farDirectionStartPointUpdated = this.interpolateFarDirectionStartPoint( + pitchRad, + lowerThresholdPairLowRad, + lowerThresholdPairHighRad, + farDirectionStartPointHaloLevel, + farDirectionStartPoint + ) + } + + return farDirectionStartPointUpdated + } + + override reset(): void { + if (this.rgbIrTransitionJumpSuppressor) { + this.rgbIrTransitionJumpSuppressor.reset() + } + } + + getRay(): RaycastInfo | null { + const data = this.getRayAlgorithmData() + + if (!data.thumb || !data.index || !data.mid || !data.wrist) { + return null + } + + validate(this.directionOneEuroFilter) + validate(this.locusOneEuroFilter) + + let locus = this.calculateInteractionLocus(data.thumb, data.index) + const castAnchor = this.calculateCastAnchor(data.thumb, data.mid) + + const deviceCenterInDeviceSpace = vec3.zero() + + const cervicalLinkInWorld = this.computeCervicalLink( + data.deviceCenterToWorld, + deviceCenterInDeviceSpace + ) + + const toWorldFromSituationSpace = + this.computeTrasformToWorldFromSituationBasedSpace( + data.deviceCenterToWorld, + cervicalLinkInWorld + ) + + let farDirectionStartPoint = vec3.zero() + if ( + this.config.farDirectionStartPoint === + farDirectionStartPointEnum.CERVICAL_LINK + ) { + farDirectionStartPoint = cervicalLinkInWorld + } else if ( + this.config.farDirectionStartPoint === farDirectionStartPointEnum.EPAULET + ) { + const epauletInWorld = this.computeEpaulet(toWorldFromSituationSpace) + farDirectionStartPoint = epauletInWorld + .uniformScale(this.config.epauletWeight) + .add( + cervicalLinkInWorld.uniformScale( + Math.max(1 - this.config.epauletWeight, 0) + ) + ) + } + + if (this.config.facilitateHighLowTargeting) { + farDirectionStartPoint = this.applyTargetingHeightControl( + farDirectionStartPoint, + data, + toWorldFromSituationSpace + ) + } + + const farTargetingRay = castAnchor.sub(farDirectionStartPoint) + const wristTargetingRay = castAnchor.sub(data.wrist) + + const closeTargetingRay = wristTargetingRay + + let targetingRay = farTargetingRay.add( + closeTargetingRay.uniformScale( + this.config.wristAmplificationForAnchorHead + ) + ) + + if (this.rgbIrTransitionJumpSuppressor) { + this.rgbIrTransitionJumpSuppressor.update(targetingRay, locus) + targetingRay = + this.rgbIrTransitionJumpSuppressor.applyDirectionDelta(targetingRay) + locus = this.rgbIrTransitionJumpSuppressor.applyLocusDelta(locus) + } + + let smoothTargetingRay = this.directionOneEuroFilter.filter( + targetingRay, + getTime() + ) + + let filteredLocus = this.locusOneEuroFilter.filter(locus, getTime()) + + if (this.pinchJumpSuppressor) { + this.pinchJumpSuppressor.updateState( + this.pinchJumpSuppressor.knuckleSmoothingSpace === "DeviceCenter" + ? data.deviceCenterToWorld.inverse() + : data.cameraToWorld.inverse() + ) + const rayData = this.pinchJumpSuppressor.applySuppression( + smoothTargetingRay, + filteredLocus + ) + smoothTargetingRay = rayData.direction + filteredLocus = rayData.locus + } + + const irInteractionXRotationInRadians = + this.irInteractionTransitionStrategy?.computeXRotationInRadians( + this.determineGazePitchInRadians(data), + toWorldFromSituationSpace, + filteredLocus + ) ?? 0 + + let normalizedDirection = smoothTargetingRay.normalize() + normalizedDirection = this.applyYRotation( + this.applyXRotation( + normalizedDirection, + this.extraXRotationRad + irInteractionXRotationInRadians, + toWorldFromSituationSpace + ).normalize(), + this.extraYRotationRad, + this.hand.handType + ).normalize() + + return { + locus: filteredLocus, + direction: normalizedDirection, + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts.meta new file mode 100644 index 00000000..f12b2d3b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorHead.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 8b93a379-a3a3-490c-b2e0-c348ed6fc3da + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 8b93a379-a3a3-490c-b2e0-c348ed6fc3da + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 04c99466-51f7-4968-b808-f994c127086d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts new file mode 100644 index 00000000..d9314d3b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts @@ -0,0 +1,130 @@ +import {inverseLerp, transformPoint} from "../../../Utils/mathUtils" +import {RaycastInfo} from "../RayProvider" +import RaycastBase, {RayAlgorithmData} from "./RaycastBase" + +//location of the elbow joint, should be tuned eventually +const ELBOW_LOCATION = new vec3(10, -10, -5) +//elbow joint radius, larger values = more sensitive motion & increased unwanted movement +const ELBOW_RADIUS = 10 +//at 1 the joint is a half sphere, other vals create elliptical joints +const ELBOW_RADIUS_HORIZONTAL_FACTOR = 1 +//the distance the hand can travel across and move the elbow joint +const ELBOW_TRACKED_RADIUS = 30 +const ELBOW_RADIUS_HORIZONTAL = ELBOW_RADIUS * ELBOW_RADIUS_HORIZONTAL_FACTOR +const ELBOW_TRACKED_RADIUS_HORIZONTAL = + ELBOW_TRACKED_RADIUS * ELBOW_RADIUS_HORIZONTAL_FACTOR +//how much more the wrist affects the targeting ray vs shoulder position +const WRIST_AMPLIFICATION = 2.5 +//how much the elbow joint is offset from the shoulder +const ELBOW_Z_OFFSET_SCALE = 0.5 + +const TAG = "RaycastAnchorVariableShoulder" +/** + * RayCastAnchorVariableShoulder + */ +export default class RaycastAnchorVariableShoulder extends RaycastBase { + /** + * Composes the vertical head transform given the camera's position + */ + private getVerticalHeadTransform(): mat4 { + const levelRotation: quat = quat.lookAt(this.camera.back(), vec3.up()) + return mat4.compose( + this.camera.getWorldPosition(), + levelRotation, + this.camera.getLocalScale() + ) + } + + private estimateShoulderPosition(handPosition: vec3): vec3 { + const vertHeadTransformInvHand = this.getVerticalHeadTransform() + .inverse() + .multiplyPoint(handPosition) + + const handElevationHeadset = vertHeadTransformInvHand.y + const handLateralHeadset = vertHeadTransformInvHand.x + + // Calculates an approximate elbow joint to determine shoulder location + const elevationIntervalElbow = MathUtils.clamp( + inverseLerp( + ELBOW_LOCATION.y + ELBOW_TRACKED_RADIUS, + ELBOW_LOCATION.y - ELBOW_TRACKED_RADIUS, + handElevationHeadset + ), + 0, + 1 + ) + + const lateralIntervalElbow = MathUtils.clamp( + inverseLerp( + ELBOW_LOCATION.x + ELBOW_TRACKED_RADIUS_HORIZONTAL, + ELBOW_LOCATION.x - ELBOW_TRACKED_RADIUS_HORIZONTAL, + handLateralHeadset + ), + 0, + 1 + ) + + const lerpInvY = Math.abs(1 - elevationIntervalElbow ** 2) + const lerpInvX = Math.abs(1 - lateralIntervalElbow ** 2) + + const variableElbowOffset = ELBOW_LOCATION.add( + new vec3( + Math.cos(lerpInvX * Math.PI * -1) * ELBOW_RADIUS_HORIZONTAL, + Math.cos(lerpInvY * Math.PI * -1) * ELBOW_RADIUS, + Math.sin(lerpInvX * Math.PI * -1) * ELBOW_RADIUS + + Math.sin(lerpInvY * Math.PI * -1) * ELBOW_Z_OFFSET_SCALE + ) + ) + return transformPoint(this.camera.getTransform(), variableElbowOffset) + } + + getRay(): RaycastInfo | null { + const data = this.getRayAlgorithmData() + + if (!this.isValid(data)) { + return null + } + + if ( + this.directionOneEuroFilter === null || + this.shoulderOneEuroFilter === null || + this.locusOneEuroFilter === null + ) { + return null + } + + const locus = this.calculateInteractionLocus(data.thumb!, data.index!) + const castAnchor = this.calculateCastAnchor(data.thumb!, data.mid!) + + const estimatedShoulder = this.estimateShoulderPosition(data.index!) + const shoulder = this.shoulderOneEuroFilter.filter( + estimatedShoulder, + getTime() + ) + + const shoulderTargetingRay = castAnchor.sub(shoulder) + const wristTargetingRay = castAnchor.sub(data.wrist!) + const targetingRay = shoulderTargetingRay.add( + wristTargetingRay.uniformScale(WRIST_AMPLIFICATION) + ) + + const smoothTargetingRay = this.directionOneEuroFilter.filter( + targetingRay, + getTime() + ) + + return { + locus: this.locusOneEuroFilter.filter(locus, getTime()), + direction: smoothTargetingRay.normalize(), + } + } + + isValid(data: RayAlgorithmData): boolean { + return ( + data.thumb !== null && + data.index !== null && + data.mid !== null && + data.wrist !== null + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts.meta new file mode 100644 index 00000000..70e32ff8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastAnchorVariableShoulder.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 610437c8-d307-4f47-ad42-87108a850597 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 610437c8-d307-4f47-ad42-87108a850597 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d87d2ca9-0ba8-44dd-9dd4-e306e2e577de + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts new file mode 100644 index 00000000..a787b34b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts @@ -0,0 +1,329 @@ +import WorldCameraFinderProvider from "../../../Providers/CameraProvider/WorldCameraFinderProvider" +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {HandInputData} from "../../../Providers/HandInputData/HandInputData" +import {Keypoint} from "../../../Providers/HandInputData/Keypoint" +import NativeLogger from "../../../Utils/NativeLogger" +import { + OneEuroFilter, + OneEuroFilterConfig, + OneEuroFilterVec3, +} from "../../../Utils/OneEuroFilter" +import {validate} from "../../../Utils/validate" +import {RaycastInfo} from "../RayProvider" + +const smoothedThumbScale: number = 0.4 +const smoothedMidScale: number = 0.6 + +const locusIndexKnuckleScale: number = 0.6 +const locusThumbKnuckleScale: number = 0.4 + +const defaultOneEuroFrequency: number = 60 +const defaultOneEuroDCutoff: number = 0.16 + +const knuckleSmoothingEnabled: boolean = false +const knuckleOneEuroMinCutoff: number = 1 +const knuckleOneEuroBeta: number = 0.0001 + +const wristSmoothingEnabled: boolean = false +const wristOneEuroMinCutoff: number = 3.5 +const wristOneEuroBeta: number = 0.0001 + +const directionSmoothingEnabled: boolean = true +const directionOneEuroMinCutoff: number = 0.5 +const directionOneEuroBeta: number = 0.2 + +const locusSmoothingEnabled: boolean = true +const locusOneEuroMinCutoff: number = 0.5 +const locusOneEuroBeta: number = 0.2 + +const shoulderSmoothingEnabled: boolean = true +const shoulderOneEuroMinCutoff: number = 0.1 +const shoulderOneEuroBeta: number = 0.0001 + +const zSmoothingEnabled: boolean = false +const zOneEuroDCutoff: number = 0.16 +const zOneEuroMinCutoff: number = 0.001 +const zOneEuroBeta: number = 0.2 + +const TAG = "RaycastBase" + +export const RIGHT_HAND = "right" +export const LEFT_HAND = "left" + +const DEFAULT_ONE_EURO_PARAMS = { + frequency: defaultOneEuroFrequency, + dcutoff: defaultOneEuroDCutoff, +} + +const KNUCKLE_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + ...DEFAULT_ONE_EURO_PARAMS, + minCutoff: knuckleOneEuroMinCutoff, + beta: knuckleOneEuroBeta, +} + +const WRIST_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + ...DEFAULT_ONE_EURO_PARAMS, + minCutoff: wristOneEuroMinCutoff, + beta: wristOneEuroBeta, +} + +const DIRECTION_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + ...DEFAULT_ONE_EURO_PARAMS, + minCutoff: directionOneEuroMinCutoff, + beta: directionOneEuroBeta, +} + +const LOCUS_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + ...DEFAULT_ONE_EURO_PARAMS, + minCutoff: locusOneEuroMinCutoff, + beta: locusOneEuroBeta, +} + +const SHOULDER_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + ...DEFAULT_ONE_EURO_PARAMS, + minCutoff: shoulderOneEuroMinCutoff, + beta: shoulderOneEuroBeta, +} + +const Z_ONE_EURO_FILTER_CONFIG: OneEuroFilterConfig = { + frequency: DEFAULT_ONE_EURO_PARAMS.frequency, + dcutoff: zOneEuroDCutoff, + minCutoff: zOneEuroMinCutoff, + beta: zOneEuroBeta, +} + +const SMOOTHED_THUMB_SCALE = smoothedThumbScale +const SMOOTHED_MID_SCALE = smoothedMidScale + +const LOCUS_INDEX_KNUCKLE_SCALE = locusIndexKnuckleScale +const LOCUS_THUMB_KNUCKLE_SCALE = locusThumbKnuckleScale + +export type RayAlgorithmData = { + thumb: vec3 | null + index: vec3 | null + mid: vec3 | null + wrist: vec3 | null + deviceCenterToWorld: mat4 + cameraToWorld: mat4 +} + +/** + * Abstract base class for raycast calculation algorithms + * Includes smoothing + */ +export default abstract class RaycastBase { + // Native Logging + private log = new NativeLogger(TAG) + + protected camera: WorldCameraFinderProvider = + WorldCameraFinderProvider.getInstance() + + protected handProvider: HandInputData = HandInputData.getInstance() + + protected knuckleOneEuroFilter = knuckleSmoothingEnabled + ? new OneEuroFilterVec3(KNUCKLE_ONE_EURO_FILTER_CONFIG) + : null + protected wristOneEuroFilter = wristSmoothingEnabled + ? new OneEuroFilterVec3(WRIST_ONE_EURO_FILTER_CONFIG) + : null + + /** + * Direction and locus filters can be dynamically adjusted together with the same magnitude, if pinch stabilization smoothing is turned on. + */ + protected directionOneEuroFilter = directionSmoothingEnabled + ? new OneEuroFilterVec3(DIRECTION_ONE_EURO_FILTER_CONFIG) + : null + protected locusOneEuroFilter = locusSmoothingEnabled + ? new OneEuroFilterVec3(LOCUS_ONE_EURO_FILTER_CONFIG) + : null + + protected shoulderOneEuroFilter = shoulderSmoothingEnabled + ? new OneEuroFilterVec3(SHOULDER_ONE_EURO_FILTER_CONFIG) + : null + + protected handZOneEuroFilter = zSmoothingEnabled + ? new OneEuroFilter(Z_ONE_EURO_FILTER_CONFIG) + : null + + constructor(protected hand: BaseHand) { + this.hand.onHandLost.add(() => { + if (this.knuckleOneEuroFilter) this.knuckleOneEuroFilter.reset() + + if (this.wristOneEuroFilter) this.wristOneEuroFilter.reset() + + if (this.directionOneEuroFilter) this.directionOneEuroFilter.reset() + + if (this.locusOneEuroFilter) this.locusOneEuroFilter.reset() + + if (this.shoulderOneEuroFilter) this.shoulderOneEuroFilter.reset() + + if (this.handZOneEuroFilter) this.handZOneEuroFilter.reset() + }) + } + + /** + * Calculates anchor for the raycast, used for calculating both wrist and shoulder targeting + * Can toggle whether or not smoothing should be used for the raycast anchor in the Script UI. + */ + calculateCastAnchor(thumbKnuckle: vec3, middleKnuckle: vec3): vec3 { + let middleFingerThumbOffset: vec3 = middleKnuckle.sub(thumbKnuckle) + let rootMiddleFinger: vec3 = this.knuckleOneEuroFilter + ? thumbKnuckle.add( + this.knuckleOneEuroFilter.filter(middleFingerThumbOffset, getTime()) + ) + : thumbKnuckle.add(middleFingerThumbOffset) + return rootMiddleFinger + .uniformScale(SMOOTHED_MID_SCALE) + .add(thumbKnuckle.uniformScale(SMOOTHED_THUMB_SCALE)) + } + + private get stubbedKeypoints(): (Keypoint | null)[] { + return [ + this.hand.indexKnuckle, + this.hand.middleKnuckle, + this.hand.ringKnuckle, + this.hand.pinkyKnuckle, + this.hand.thumbBaseJoint, + this.hand.wrist, + ] + } + + /** + * Filters the palm landmark if pre-filtering is selected & returns its position in world space + * This is used to help mitigate the increased jitter for Matador wrist landmarks + */ + protected getWrist(): vec3 | null { + if (this.hand.wrist === null) return null + return ( + this.wristOneEuroFilter?.filter(this.hand.wrist.position, getTime()) ?? + null + ) + } + + /** + * Calculates the interaction locus, where the ray cursor base is placed. + */ + protected calculateInteractionLocus( + thumbKnuckle: vec3, + indexKnuckle: vec3 + ): vec3 { + return indexKnuckle + .uniformScale(LOCUS_INDEX_KNUCKLE_SCALE) + .add(thumbKnuckle.uniformScale(LOCUS_THUMB_KNUCKLE_SCALE)) + } + + /** + * Calculates the measured and filtered average Z value of stab hand landmarks + */ + protected filterHandZAverage(cameraToWorld: mat4) { + validate(this.handZOneEuroFilter) + + let zAverage = 0 + let length = 0 + for (const keypoint of this.stubbedKeypoints) { + if (keypoint === null) { + continue + } + let position = keypoint.position + if (cameraToWorld !== undefined) { + position = cameraToWorld.inverse().multiplyPoint(position) + } + zAverage += position.z + length++ + } + + if (length > 0) { + zAverage /= length + } + const filteredZAverage = this.handZOneEuroFilter.filter(zAverage, getTime()) + return {zAverage: zAverage, filteredZAverage: filteredZAverage} + } + + /** + * Calculates corrected hand landmark positions using the measured and smoothed average Z values of stub + */ + protected getCorrectedHandLandmarkPosition( + cameraToWorld: mat4, + avgZ: number, + filteredAvgZ: number, + worldPos: vec3 | null + ): vec3 | null { + if (worldPos === null) { + return null + } + + if (cameraToWorld === undefined) { + return vec3.zero() + } + + const cameraPos = cameraToWorld.inverse().multiplyPoint(worldPos) + const newZ = cameraPos.z - avgZ + filteredAvgZ + const newCameraPos = new vec3( + (cameraPos.x / cameraPos.z) * newZ, + (cameraPos.y / cameraPos.z) * newZ, + newZ + ) + return cameraToWorld.multiplyPoint(newCameraPos) + } + + /** + * Gets the corrected landmark positions and the device center to world transformation + */ + protected getRayAlgorithmData(): RayAlgorithmData { + // Get joints from hands api + const thumb = this.hand.thumbBaseJoint?.position ?? null + const index = this.hand.indexKnuckle?.position ?? null + const mid = this.hand.middleKnuckle?.position ?? null + const wrist = this.hand.wrist?.position ?? null + const deviceCenterToWorld = this.camera.getWorldTransform() + + let cameraToDeviceCenter = mat4.identity() + try { + cameraToDeviceCenter = global.deviceInfoSystem.getTrackingCamera().pose + } catch (e) { + this.log.e("Exception during accessing the tracking camera device: " + e) + } + const cameraToWorld = deviceCenterToWorld.mult(cameraToDeviceCenter) + + if (this.handZOneEuroFilter === null) { + return { + thumb: thumb, + index: index, + mid: mid, + wrist: wrist, + deviceCenterToWorld: deviceCenterToWorld, + cameraToWorld: cameraToWorld, + } + } + + const handZAverage = this.filterHandZAverage(cameraToWorld) + const getCorrectedPosition = (position: vec3 | null) => { + return this.getCorrectedHandLandmarkPosition( + cameraToWorld, + handZAverage.zAverage, + handZAverage.filteredZAverage, + position + ) + } + + return { + thumb: getCorrectedPosition(thumb), + index: getCorrectedPosition(index), + mid: getCorrectedPosition(mid), + wrist: getCorrectedPosition(wrist), + deviceCenterToWorld: deviceCenterToWorld, + cameraToWorld: cameraToWorld, + } + } + + /** + * Update locus, direction, and camera position (or null if required hand landmarks are not tracked). + */ + abstract getRay(): RaycastInfo | null + + /** + * Can be used to reset inner states + * Should be called when the hand is not tracked or targeting is blocked + */ + reset(): void {} +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts.meta new file mode 100644 index 00000000..8a03346e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastBase.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 9c6c6c17-012f-4bce-8446-75b48e098644 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 9c6c6c17-012f-4bce-8446-75b48e098644 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 24d8ad30-7c81-48ec-9c26-7ad462fc082e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts new file mode 100644 index 00000000..d15b9f44 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts @@ -0,0 +1,45 @@ +import {validate} from "../../../Utils/validate" +import {RaycastInfo} from "../RayProvider" +import RaycastBase from "./RaycastBase" + +const SHOULDER_POSITION_RELATIVE_TO_CAMERA = new vec3(15, -20, 0) + +/** + * Raycast Legacy uses the algorithm previously used for Hermosa ray casting. + * Meant for use with single-camera tracking, to unblock anything requiring more stable targeting until stereo tracking is available + */ +export default class RaycastLegacySingleCamera extends RaycastBase { + /** + * Calculates a simple ray direction anchor based on camera position only. + * @returns ray direction anchor + */ + private calculateRayDirectionAnchor(): vec3 { + return this.camera + .getWorldTransform() + .multiplyPoint(SHOULDER_POSITION_RELATIVE_TO_CAMERA) + } + + getRay(): RaycastInfo | null { + if (this.hand.middleKnuckle === null) { + return null + } else { + // Find the ray direction + let targetingRay = this.hand.middleKnuckle.position.sub( + this.calculateRayDirectionAnchor() + ) + + validate(this.locusOneEuroFilter) + validate(this.directionOneEuroFilter) + + return { + locus: this.locusOneEuroFilter.filter( + this.hand.middleKnuckle.position, + getTime() + ), + direction: this.directionOneEuroFilter + .filter(targetingRay, getTime()) + .normalize(), + } + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts.meta new file mode 100644 index 00000000..d72c1499 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastLegacySingleCamera.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! e1f0bf90-85a3-49a4-8a73-b18532bf37e4 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e1f0bf90-85a3-49a4-8a73-b18532bf37e4 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 12bd42c2-33b5-45c5-83e3-f4ed2c3dc3a2 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts new file mode 100644 index 00000000..f47b0969 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts @@ -0,0 +1,33 @@ +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {RaycastInfo} from "../RayProvider" +import RaycastBase from "./RaycastBase" + +const TAG = "RaycastProxy" + +/** + * RaycastProxy forwards the TargetingData received from LensCore's Gesture Module. + */ +export default class RaycastProxy extends RaycastBase { + constructor(hand: BaseHand) { + super(hand) + } + + /** + * Forwards the TargetingData received from LensCore's Gesture Module. + * + * @returns RaycastInfo (locus and direction of the ray) filled with + * the data received from LensCore's Gesture Module. + * If no data has been received (e.g.: couldn't subscribe because the API is not yet present in LensCore), it can return null. + */ + getRay(): RaycastInfo | null { + const targetingData = this.hand.targetingData + if (targetingData !== null) { + return { + locus: targetingData.targetingLocusInWorld, + direction: targetingData.targetingDirectionInWorld, + } + } else { + return null + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts.meta new file mode 100644 index 00000000..c916e211 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RaycastProxy.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 22a6830f-97f8-4948-87a0-b818db12d64b + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 22a6830f-97f8-4948-87a0-b818db12d64b + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! a2ee7d4b-64fb-4582-9662-c6cd5e6ab3ca + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts new file mode 100644 index 00000000..1f865e44 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts @@ -0,0 +1,507 @@ +import {BaseHand} from "../../../Providers/HandInputData/BaseHand" +import {Keypoint} from "../../../Providers/HandInputData/Keypoint" +import NativeLogger from "../../../Utils/NativeLogger" +import AxisAngle from "./AxisAngle" +import {WindowMode} from "./TimeDataContainer" +import {TimedScalarContainer} from "./TimeScalarContainer" + +const TAG = "RgbIrTransitionJumpSuppressor" +const DEFAULT_DECAY_DURATION_SEC = 3 + +type RgbIrTransitionJumpSuppressorConfig = { + /* + * Defines the threshold value for the relative + * change of the bone lengths on successive frames. + * Above this value, the change is considered to be because of the handover + */ + boneRatioChangeLimit: number + + /* + * Window size in frame count for smoothing the bone lengths + */ + boneLengthAverageWindowFrames: number + + /* + * Maximum capacity for storing the applied deltas. If set below 1, this is ignored. + */ + maxCapacity: number + + /* + * Duration in seconds for decaying the deltas + */ + decayDurationSec: number + + /* + * Unpaired delta will be decayed after this time given in seconds. + * If negative, unpaired deltas won't be decayed + */ + maxTimespentWithoutDecaying: number + + /* + * If true, all deltas will start to decay immediately + */ + enableDecayImmediately: boolean + + /* + * If true, the logic only register and apply deltas + * if the direction of the detected handover is pointing to + * the opposite model/camera type then the previous detection + */ + registerOnlySignedPairs: boolean +} + +export type HandOverDetection = { + isHandOver: boolean + sign: number +} + +export type ModifiedValues = { + currentDirection: vec3 + previousDirection: vec3 + currentLocus: vec3 + previousLocus: vec3 +} + +export type DeltaConfig = { + direction: AxisAngle + locus: vec3 + sign: number + multiplier: number +} + +const RgbIrTransitionJumpSuppressorConfigDefault: RgbIrTransitionJumpSuppressorConfig = + { + boneRatioChangeLimit: 0.1, + boneLengthAverageWindowFrames: 5, + maxCapacity: 50, + decayDurationSec: 3, + maxTimespentWithoutDecaying: -1, + enableDecayImmediately: false, + registerOnlySignedPairs: true, + } + +export class Delta { + static nextId = 0 + readonly id = Delta.nextId++ + private decayDurationSec: number + private _canDecay = + RgbIrTransitionJumpSuppressorConfigDefault.enableDecayImmediately + private decayStartTime: number | undefined = undefined + private decayStopTime: number | undefined = undefined + private creationTime = getTime() + + private constructor(private config: DeltaConfig) { + this.decayDurationSec = + RgbIrTransitionJumpSuppressorConfigDefault.decayDurationSec > 0 + ? RgbIrTransitionJumpSuppressorConfigDefault.decayDurationSec + : DEFAULT_DECAY_DURATION_SEC + } + + /** + * Helper method to create a new delta object instance + * @param detection - handover detection object to get sign (handover direction) metadata from it + * @param modifiedValues - targeting directin and locus (origin) on the previous and current frame to measure delta between them + * @returns the created delta instance + */ + static createDelta( + detection: HandOverDetection, + modifiedValues: ModifiedValues + ): Delta { + return new Delta({ + direction: AxisAngle.getRotationBetween( + modifiedValues.currentDirection, + modifiedValues.previousDirection + ), + locus: modifiedValues.previousLocus.sub(modifiedValues.currentLocus), + sign: detection.sign, + multiplier: 1, + }) + } + + /** + * @returns the direction of the detected handover when the delta is measured + * 1: from UL to HLMT + * -1: from HLMT to UL + */ + get sign(): number { + return this.config.sign + } + + /** + * @returns if the delta can be decayed + */ + get canDecay(): boolean { + return this._canDecay + } + + /** + * Sets if the delta can be decayed + */ + set canDecay(value: boolean) { + if (this._canDecay === false && value === true) { + this.decayStartTime = getTime() + } + this._canDecay = value + } + + /** + * Steps the decay + */ + decay(): void { + if (this.canDecay === false) { + return + } + this.config.multiplier -= getDeltaTime() / this.decayDurationSec + if (this.decayStopTime === undefined && this.config.multiplier <= 0) { + this.decayStopTime = getTime() + } + } + + /** + * @returns the current duration of the decaying in seconds + * Returns zero seconds if the decaying hasn't been started. + * Stops increasing after the delta is completely decayed. + */ + decayDuration(): number { + if (this.decayStartTime === undefined) { + return 0 + } else if (this.decayStopTime === undefined) { + return getTime() - this.decayStartTime + } else { + return this.decayStopTime - this.decayStartTime + } + } + + /** + * @returns the elapsed time in seconds since the delta object was created + */ + timeSinceCreated(): number { + return getTime() - this.creationTime + } + + isValid(): boolean { + return this.config.multiplier > 0 + } + + /** + * Applies the delta on the targeting direction to suppress jumps because of the handover + * @param direction - targeting direction + * @returns targeting direction with the delta applied on it + */ + applyDirectionDelta(direction: vec3): vec3 { + if (!this.isValid()) { + return direction + } + + return AxisAngle.applyRotation( + this.config.direction.multipliedBy(this.config.multiplier), + direction + ) + } + + /** + * Applies the delta on the targeting locus to suppress jumps because of the handover + * @param locus - targeting locus + * @returns targeting locus with the delta applied on it + */ + applyLocusDelta(locus: vec3): vec3 { + if (!this.isValid()) { + return locus + } + + return locus.add(this.config.locus.uniformScale(this.config.multiplier)) + } +} + +export type Bone = { + begin: Keypoint + end: Keypoint + smoothedLength: TimedScalarContainer + currentLength: number | undefined +} + +/* + * Because of the hand tracking differences between + * the Ul and HLMT models running on the different camera types (IR - UL, RGB - HLMT) + * there is a clearly visible jump in the targeting direction and origin (locus) point + * which interfere with user's interaction intentions and results in bad user experience. + * This class implements a logic to suppress the targeting jumps on IR-RGB hand tracking handover. + */ +export default class RgbIrTransitionJumpSuppressor { + // Native Logging + private log = new NativeLogger(TAG) + + private bones: Bone[] = [] + private deltas: Delta[] = [] + private previousLocus: vec3 | undefined = undefined + private previousDirection: vec3 | undefined = undefined + + constructor(private hand: BaseHand) { + /* + * These two bones seemed the best for differentiating the different models + * (largest change in relative length on successive frames when the handover happens) + */ + const jointPairs = [ + [this.hand.indexKnuckle, this.hand.indexMidJoint], + [this.hand.pinkyUpperJoint, this.hand.pinkyTip], + ] + + for (const pair of jointPairs) { + const begin = pair[0] + const end = pair[1] + if (begin === null || end === null) { + throw new Error("Bone joints should not be null") + } + this.bones.push({ + begin: begin, + end: end, + smoothedLength: new TimedScalarContainer( + WindowMode.FRAME, + RgbIrTransitionJumpSuppressorConfigDefault.boneLengthAverageWindowFrames + ), + currentLength: undefined, + }) + } + } + + private isHandOverToRegister(sign: number): boolean { + const acceptBasedOnSign = + this.deltas.length === 0 || + this.deltas[this.deltas.length - 1].sign !== sign || + RgbIrTransitionJumpSuppressorConfigDefault.registerOnlySignedPairs === + false + const withinCapacity = + RgbIrTransitionJumpSuppressorConfigDefault.maxCapacity < 1 || + this.deltas.length < + RgbIrTransitionJumpSuppressorConfigDefault.maxCapacity + + if (acceptBasedOnSign && withinCapacity) { + return true + } + this.log.d( + "Handover is not registered either because of wrong transition parity or delta capacity overflow" + ) + this.log.d(`Parity check: ${acceptBasedOnSign}`) + this.log.d(`Capacity check: ${withinCapacity}`) + return false + } + + private detectHandOver(): HandOverDetection { + let registerAsHandOver = false + let sign = 0 + + let avgRatio = 0 + let count = 0 + this.log.v("Change of relative bone lengths:") + for (const bone of this.bones) { + const currentLength = bone.begin.position.distance(bone.end.position) + if (currentLength <= 0) { + this.log.e("Bone length should be a positive value") + continue + } + bone.currentLength = currentLength + + const previousLength = bone.smoothedLength.average() + if (previousLength !== null) { + if (previousLength <= 0) { + this.log.e("Bone length should be a positive value") + continue + } + const ratio = bone.currentLength / previousLength + this.log.v( + `${bone.begin.getAttachmentPoint().name} - ${ + bone.end.getAttachmentPoint().name + }: ${((ratio - 1) * 100).toFixed(1)} %` + ) + avgRatio += ratio + count++ + } + } + + this.log.v("------------------") + + if (count > 0) { + avgRatio /= count + } else { + avgRatio = 1 + } + + const ratioDifference = avgRatio - 1 + if ( + Math.abs(ratioDifference) >= + RgbIrTransitionJumpSuppressorConfigDefault.boneRatioChangeLimit + ) { + sign = Math.sign(ratioDifference) + registerAsHandOver = this.isHandOverToRegister(sign) + for (const bone of this.bones) { + bone.smoothedLength.clear() + } + + this.log.d( + `Model swich detected: ${sign === 1 ? "HLMT" : "UL"}, diff: ${( + ratioDifference * 100 + ).toFixed(1)} %, Register: ${registerAsHandOver}` + ) + } + + for (const bone of this.bones) { + if (bone.currentLength === undefined) { + this.log.e("Bone length should be defined at this point") + continue + } + bone.smoothedLength.pushData(getTime(), bone.currentLength) + } + + return { + isHandOver: registerAsHandOver, + sign: sign, + } + } + + private decayAndRemoveInvalidDeltas(): void { + const newDeltas = [] + for (const delta of this.deltas) { + delta.decay() + if (delta.isValid()) { + newDeltas.push(delta) + } + } + this.deltas = newDeltas + } + + private computeModifiedValues( + currentDirection: vec3, + previousDirection: vec3, + currentLocus: vec3, + previousLocus: vec3 + ): ModifiedValues { + let modifiedCurrentDirection = currentDirection + let modifiedPreviousDirection = previousDirection + let modifiedCurrentLocus = currentLocus + let modifiedPreviousLocus = previousLocus + for (const delta of this.deltas) { + modifiedCurrentDirection = delta.applyDirectionDelta( + modifiedCurrentDirection + ) + modifiedPreviousDirection = delta.applyDirectionDelta( + modifiedPreviousDirection + ) + modifiedCurrentLocus = delta.applyLocusDelta(modifiedCurrentLocus) + modifiedPreviousLocus = delta.applyLocusDelta(modifiedPreviousLocus) + } + + return { + currentDirection: modifiedCurrentDirection, + previousDirection: modifiedPreviousDirection, + currentLocus: modifiedCurrentLocus, + previousLocus: modifiedPreviousLocus, + } + } + + private startDecayOldLastDelta(maxTime: number): void { + if (this.deltas.length > 0) { + const lastDelta = this.deltas[this.deltas.length - 1] + const timeSinceCreated = lastDelta.timeSinceCreated() + if (timeSinceCreated > maxTime) { + lastDelta.canDecay = true + } + } + } + + private storeDelta(delta: Delta) { + this.deltas.push(delta) + + if (this.deltas.length % 2 === 0) { + this.deltas[this.deltas.length - 1].canDecay = true + this.deltas[this.deltas.length - 2].canDecay = true + } + } + + /** + * Resets the state of the suppressor + * Should be called when the hand is not tracked or targeting is blocked + */ + reset(): void { + this.previousLocus = undefined + this.previousDirection = undefined + this.deltas = [] + } + + /** + * Update the suppressor state by detecting handover and computing, storing deltas + * @param currentDirection - targeting direction on the current frame + * @param currentLocus - targeting locus on the current frame + */ + update(currentDirection: vec3, currentLocus: vec3): void { + const detection = this.detectHandOver() + + this.decayAndRemoveInvalidDeltas() + + if ( + RgbIrTransitionJumpSuppressorConfigDefault.maxTimespentWithoutDecaying > 0 + ) { + this.startDecayOldLastDelta( + RgbIrTransitionJumpSuppressorConfigDefault.maxTimespentWithoutDecaying + ) + } + + if ( + detection.isHandOver === true && + this.previousDirection !== undefined && + this.previousLocus !== undefined + ) { + const delta = Delta.createDelta( + detection, + this.computeModifiedValues( + currentDirection, + this.previousDirection, + currentLocus, + this.previousLocus + ) + ) + this.storeDelta(delta) + + this.log.d(`Delta registered, deltas size: ${this.deltas.length}`) + for (const delta of this.deltas) { + this.log.d( + `decay: ${delta.canDecay}, id: ${delta.id}, to model: ${ + delta.sign === 1 ? "HLMT" : "UL" + }, isValid: ${delta.isValid()}` + ) + } + } else if (detection.isHandOver === true) { + this.log.d( + `Cannot register because previous data is undefined: ${this.previousDirection}, ${this.previousLocus}` + ) + } + + this.previousLocus = currentLocus + this.previousDirection = currentDirection + } + + /** + * Applies the stored deltas on the targeting direction to suppress jumps because of the handover + * @param currentDirection - targeting direction on the current frame + * @returns targeting direction with deltas applied on it + */ + applyDirectionDelta(currentDirection: vec3): vec3 { + let direction = currentDirection + for (const delta of this.deltas) { + direction = delta.applyDirectionDelta(direction) + } + return direction + } + + /** + * Applies the stored deltas on the targeting locus to suppress jumps because of the handover + * @param currentLocus - targeting locus on the current frame + * @returns targeting locus with deltas applied on it + */ + applyLocusDelta(currentLocus: vec3): vec3 { + let locus = currentLocus + for (const delta of this.deltas) { + locus = delta.applyLocusDelta(locus) + } + return locus + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts.meta new file mode 100644 index 00000000..9317eab1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/RgbIrTransitionJumpSuppressor.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! ef9851c5-44b2-4181-958b-10a50445e54f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ef9851c5-44b2-4181-958b-10a50445e54f + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! 323558e9-4a65-4ec7-859e-fa412bc2190b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts new file mode 100644 index 00000000..e0a1238c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts @@ -0,0 +1,189 @@ +import {IrInteractionTransition} from "./IrInteractionTransition" + +export type SwitchIrInteractionTransitionConfig = { + /** + * Rotation applied around X axis in degrees when the ray is in IR FoV mode + */ + rotationXDegrees: number + + /** + * Height difference between neck and hand - above this value, switch to IR mode + */ + neckHandHeightDifferenceToIr: number + + /** + * Height difference between neck and hand - under this value, switch to Default mode + */ + neckHandHeightDifferenceToDefault: number + + /** + * Gaze pitch in degrees - below this value, switch to IR mode + */ + gazePitchDegreesToIr: number + + /** + * Gaze pitch in degrees - above this value, switch to Default mode + */ + gazePitchDegreesToDefault: number + + /** + * Duration time in seconds for the transition between modes when the mode is switched + */ + transitionSeconds: number + + /** + * Debounce time in seconds to switch to IR mode + */ + debounceToIrSeconds: number + + /** + * Debounce time in seconds to switch to Default mode + */ + debounceToDefaultSeconds: number +} + +const SwitchIrInteractionTransitionConfigDefault = { + rotationXDegrees: 35, + neckHandHeightDifferenceToIr: 35, + neckHandHeightDifferenceToDefault: 30, + gazePitchDegreesToIr: 25, + gazePitchDegreesToDefault: 25, + transitionSeconds: 0.2, + debounceToIrSeconds: 0.2, + debounceToDefaultSeconds: 0.1, +} + +/** + * Class to implement Switch-like IR Transition Strategy + */ +export default class SwitchIrInteractionTransition + implements IrInteractionTransition +{ + private inIrMode = false + private irModeSaturationProgress = 0 + private debounceProgress = 0 + + private config: SwitchIrInteractionTransitionConfig = + SwitchIrInteractionTransitionConfigDefault + + private transitionSeconds = + this.config.transitionSeconds > 0 ? this.config.transitionSeconds : 0.2 + private debounceToIrSeconds = + this.config.debounceToIrSeconds > 0 ? this.config.debounceToIrSeconds : 0.2 + private debounceToDefaultSeconds = + this.config.debounceToDefaultSeconds > 0 + ? this.config.debounceToDefaultSeconds + : 0.1 + + /** @inheritdoc */ + computeXRotationInDegrees( + gazePitchInDegrees: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number { + const transformedHandPoint = toWorldFromSituationSpace + .inverse() + .multiplyPoint(handPoint) + + const rotationInDegrees = + this.computeMultiplier(transformedHandPoint, gazePitchInDegrees) * + this.config.rotationXDegrees + return rotationInDegrees + } + + /** @inheritdoc */ + computeXRotationInRadians( + gazePitchInRadians: number, + toWorldFromSituationSpace: mat4, + handPoint: vec3 + ): number { + return ( + MathUtils.DegToRad * + this.computeXRotationInDegrees( + MathUtils.RadToDeg * gazePitchInRadians, + toWorldFromSituationSpace, + handPoint + ) + ) + } + + /** + * Computes the multiplier for the Ir interaction additional rotation in switch transition mode + * @param handPoint - hand point used for height estimation + * @param gazePitchInDegrees - gaze pitch given in degrees + * @returns multiplier for the Ir interaction interaction rotation + */ + private computeMultiplier( + handPoint: vec3, + gazePitchInDegrees: number + ): number { + if (this.inIrMode === false) { + this.switchTransitionStrategyInDefaultMode(handPoint, gazePitchInDegrees) + } else { + this.switchTransitionStrategyInIrMode(handPoint, gazePitchInDegrees) + } + return this.irModeSaturationProgress + } + + /** + * Steps the switch transition strategy while in default mode + * @param handPoint - hand point used for height estimation + * @param gazePitchInDegrees - gaze pitch given in degrees + */ + private switchTransitionStrategyInDefaultMode( + handPoint: vec3, + gazePitchInDegrees: number + ): void { + if ( + handPoint.y < -this.config.neckHandHeightDifferenceToIr && + gazePitchInDegrees > -this.config.gazePitchDegreesToIr + ) { + this.debounceProgress += getDeltaTime() / this.debounceToIrSeconds + this.debounceProgress = MathUtils.clamp(this.debounceProgress, 0, 1) + if (this.debounceProgress === 1) { + this.inIrMode = true + this.debounceProgress = 0 + } + } else { + this.irModeSaturationProgress -= getDeltaTime() / this.transitionSeconds + this.irModeSaturationProgress = MathUtils.clamp( + this.irModeSaturationProgress, + 0, + 1 + ) + this.debounceProgress -= getDeltaTime() / this.debounceToIrSeconds + this.debounceProgress = MathUtils.clamp(this.debounceProgress, 0, 1) + } + } + + /** + * Steps the switch transition strategy while in IR mode + * @param handPoint - hand point used for height estimation + * @param gazePitchInDegrees - gaze pitch given in degrees + */ + private switchTransitionStrategyInIrMode( + handPoint: vec3, + gazePitchInDegrees: number + ): void { + if ( + handPoint.y >= -this.config.neckHandHeightDifferenceToDefault || + gazePitchInDegrees <= -this.config.gazePitchDegreesToDefault + ) { + this.debounceProgress += getDeltaTime() / this.debounceToDefaultSeconds + this.debounceProgress = MathUtils.clamp(this.debounceProgress, 0, 1) + if (this.debounceProgress === 1) { + this.inIrMode = false + this.debounceProgress = 0 + } + } else { + this.irModeSaturationProgress += getDeltaTime() / this.transitionSeconds + this.irModeSaturationProgress = MathUtils.clamp( + this.irModeSaturationProgress, + 0, + 1 + ) + this.debounceProgress -= getDeltaTime() / this.debounceToDefaultSeconds + this.debounceProgress = MathUtils.clamp(this.debounceProgress, 0, 1) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts.meta new file mode 100644 index 00000000..69f6be2f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/SwitchIrInteractionTransition.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 96153d69-efc8-404b-91a2-e6293ddd6741 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 96153d69-efc8-404b-91a2-e6293ddd6741 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 875adf9a-61c2-4e6b-a202-0f403f6a0680 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts new file mode 100644 index 00000000..7e4be836 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts @@ -0,0 +1,153 @@ +import NativeLogger from "../../../Utils/NativeLogger" +import {SampleOps} from "../../../Utils/SampleOps" + +const TAG = "TimedDataContainer" + +/** + * Custom data with timestamp + */ +export class TimedData { + constructor(public timestamp: number, public data: T) {} +} + +/** + * Window modes for TimedDataContainer + * TIME - data window slides based on timestamps and the given window size in time units (seconds) + * FRAME = data window slides based on element (data frame) number + */ +export enum WindowMode { + TIME, + FRAME, +} + +/** + * Manages custom data within a time or frame based window + */ +export class TimedDataContainer { + // Native Logging + private log = new NativeLogger(TAG) + + protected data: TimedData[] = [] + + constructor( + private _windowMode: WindowMode, + private _windowSize: number, + private sampleOps: SampleOps + ) {} + + /** + * State variable to check if warning notification has already been logged + * in case a timestamp is pushed with data value + * different than the previous for the same timestamp. + * This notification will be logged only once per a lens start avoiding + * excessive frame by frame log spam. + */ + private notifiedRepeatedTimestampPush = false + + /** + * @returns the size of the container, + * number of contained elements + */ + get size(): number { + return this.data.length + } + + /** + * @returns the currently set window size of the container, + * time interval or frame number depending on the windowMode + */ + get windowSize(): number { + return this._windowSize + } + + /** + * @returns the currently set window mode of the container + */ + get windowMode(): number { + return this._windowMode + } + + /** + * sets the window size in time unit or frame number + * depending on the windowMode + * @param windowSize - time unit or frame number + */ + setWindowSize(windowSize: number): void { + this._windowSize = windowSize + } + + /** + * clears the data array + */ + clear(): void { + this.data = [] + } + + /** + * Updates the container by removing the outdated elements + * from the front of the data array. + * In FRAME windowMode, only the last windowSize elements are kept + * In TIME mode, the elements older than windowSize + * are removed from the frint of the array (relative to the current timestamp parameter) + * @param timestamp - current timestamp + */ + updateQueue(timestamp: number): void { + if (timestamp < 0) { + throw new Error("Timestamps should not be negative") + } + if (this._windowMode === WindowMode.TIME) { + const begin = timestamp - this._windowSize + while (this.data.length > 0 && this.data[0].timestamp < begin) { + this.data.shift() + } + } else { + while (this.data.length > this._windowSize) { + this.data.shift() + } + } + } + + /** + * adds new data to the container with timestamp + * updates the data array + * @param timestamp - timestamp of the data + * @param data - custom data + */ + pushData(timestamp: number, data: T): void { + if (timestamp < 0) { + throw new Error("Timestamps should not be negative") + } + + if (this.data.length > 0) { + const backData = this.data[this.data.length - 1] + if (timestamp < backData.timestamp) { + throw new Error("Timestamps should be monotonic") + } + if (timestamp === backData.timestamp) { + if (!this.notifiedRepeatedTimestampPush && data !== backData.data) { + this.log.w("Data arrived with repeated timestamp and different data") + this.notifiedRepeatedTimestampPush = true + } + return + } + } + + this.data.push(new TimedData(timestamp, data)) + this.updateQueue(timestamp) + } + + /** + * @returns the average of the contained elements, + * or null if no data contained + */ + average(): T | null { + if (this.data.length === 0) { + return null + } + let sum = this.sampleOps.zero() + for (let i = 0; i < this.data.length; i++) { + sum = this.sampleOps.add(sum, this.data[i].data) + } + return this.sampleOps.uniformScale(sum, 1 / this.data.length) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts.meta new file mode 100644 index 00000000..2e960a1a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeDataContainer.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 176ad728-4084-4eba-b18c-ab90d427b0ee + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 176ad728-4084-4eba-b18c-ab90d427b0ee + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 9500ac9d-68e0-4f46-873d-1719d3243582 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts new file mode 100644 index 00000000..5238dfce --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts @@ -0,0 +1,50 @@ +import {ScalarSampleOps} from "../../../Utils/SampleOps" +import {TimedDataContainer, WindowMode} from "./TimeDataContainer" + +/** + * Scalar specialization of TimedDataContainer + */ +export class TimedScalarContainer extends TimedDataContainer { + constructor(windowMode: WindowMode, windowSize: number) { + super(windowMode, windowSize, new ScalarSampleOps()) + } + + /** + * @returns the velocity aggregated, using signed delta values between the data points + * + * Tries to overcome the velocity measurement problem caused by data duplications + * because of the different render and tracking frame rates: + * Assuming closely even render frame rate, and frequent data duplications on every second frame, + * calculates the delta between the current data and the one before the previous data + * Averages these cross computed velocity values. + * Requires at least 4 data elements to return valid velocity, othervise returns null + * + * ti - ith time point + * di - ith data + * + * t0 t2 t4 + * ____ ____ + * / \ / \ + * -|--|--|--|--|- + * d0 d0 d1 d1 d2 + * \___/ + * t1 t3 + */ + aggregateSignedVelocity(): number | null { + if (this.data.length < 4) { + return null + } + + let velocitySum = 0 + let count = 0 + for (let i = 2; i < this.data.length; i++) { + const delta = this.data[i].data - this.data[i - 2].data + const deltaTime = this.data[i].timestamp - this.data[i - 2].timestamp + const velocity = delta / deltaTime + velocitySum += velocity + count++ + } + + return velocitySum / count + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts.meta new file mode 100644 index 00000000..063cd4f1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimeScalarContainer.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! aacedc6f-a394-4a45-88aa-7eb2efae09a6 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! aacedc6f-a394-4a45-88aa-7eb2efae09a6 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 7627e864-b285-481a-9e51-a571047ffb6a + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts new file mode 100644 index 00000000..0808b0b1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts @@ -0,0 +1,50 @@ +import {Vec2SampleOps} from "../../../Utils/SampleOps" +import {TimedDataContainer, WindowMode} from "./TimeDataContainer" + +/** + * Vec2 specialization of TimedDataContainer + */ +export class TimedVec2Container extends TimedDataContainer { + constructor(windowMode: WindowMode, windowSize: number) { + super(windowMode, windowSize, new Vec2SampleOps()) + } + + /** + * @returns the velocity aggregated, using absolute distance between the vectors as delta values between the data points + * + * Tries to overcome the velocity measurement problem caused by data duplications + * because of the different render and tracking frame rates: + * Assuming closely even render frame rate, and frequent data duplications on every second frame, + * calculates the delta between the current data and the one before the previous data + * Averages these cross computed velocity values. + * Requires at least 4 data elements to return valid velocity, othervise returns null + * + * ti - ith time point + * di - ith data + * + * t0 t2 t4 + * ____ ____ + * / \ / \ + * -|--|--|--|--|- + * d0 d0 d1 d1 d2 + * \___/ + * t1 t3 + */ + aggregateAbsoluteVelocity(): number | null { + if (this.data.length < 4) { + return null + } + + let velocitySum = 0 + let count = 0 + for (let i = 2; i < this.data.length; i++) { + const delta = this.data[i].data.distance(this.data[i - 2].data) + const deltaTime = this.data[i].timestamp - this.data[i - 2].timestamp + const velocity = delta / deltaTime + velocitySum += velocity + count++ + } + + return velocitySum / count + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts.meta new file mode 100644 index 00000000..0f4a7100 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec2Container.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 48eaf375-139c-41f4-bf7a-9517dab0fb3c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 48eaf375-139c-41f4-bf7a-9517dab0fb3c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 9798701e-5b65-408c-801d-b7222dab5e24 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts new file mode 100644 index 00000000..c9ed6ad0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts @@ -0,0 +1,59 @@ +import {Vec3SampleOps} from "../../../Utils/SampleOps" +import {TimedDataContainer, WindowMode} from "./TimeDataContainer" + +/** + * Vec3 specialization of TimedDataContainer + */ +export class TimedVec3Container extends TimedDataContainer { + constructor(windowMode: WindowMode, windowSize: number) { + super(windowMode, windowSize, new Vec3SampleOps()) + } + + /** + * @returns the velocity aggregated, using absolute distance between the vectors as delta values between the data points + * + * Tries to overcome the velocity measurement problem caused by data duplications + * because of the different render and tracking frame rates: + * Assuming closely even render frame rate, and frequent data duplications on every second frame, + * calculates the delta between the current data and the one before the previous data + * Averages these cross computed velocity values. + * Requires at least 4 data elements to return valid velocity, othervise returns null + * + * ti - ith time point + * di - ith data + * + * t0 t2 t4 + * ____ ____ + * / \ / \ + * -|--|--|--|--|- + * d0 d0 d1 d1 d2 + * \___/ + * t1 t3 + */ + aggregateAbsoluteVelocity(): number | null { + if (this.data.length < 4) { + return null + } + + let velocitySum = 0 + let count = 0 + for (let i = 2; i < this.data.length; i++) { + const delta = this.data[i].data.distance(this.data[i - 2].data) + const deltaTime = this.data[i].timestamp - this.data[i - 2].timestamp + const velocity = delta / deltaTime + velocitySum += velocity + count++ + } + + return velocitySum / count + } + + pushWithoutDuplicate(timestamp: number, data: vec3): void { + if ( + this.data.length === 0 || + this.data[this.data.length - 1].data !== data + ) { + this.pushData(timestamp, data) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts.meta new file mode 100644 index 00000000..9748d9d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/Interactor/raycastAlgorithms/TimedVec3Container.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 82abc3e8-e087-4f6f-bb4a-a27f0929ab96 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 82abc3e8-e087-4f6f-bb4a-a27f0929ab96 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 3fd3322f-1928-4583-92ea-bd6099651a08 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts new file mode 100644 index 00000000..d858b334 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts @@ -0,0 +1,19 @@ +const TAG = "LogLevelConfiguration" + +/** + * This class provides configuration for log levels within the application. It allows setting different log levels for various components and modules, enabling fine-grained control over logging output. + */ +@component +export abstract class LogLevelConfiguration extends BaseScriptComponent { + @input("int") + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Error", 3), + new ComboBoxItem("Warning", 4), + new ComboBoxItem("Info", 6), + new ComboBoxItem("Debug", 7), + new ComboBoxItem("Verbose", 8), + ]), + ) + protected logLevelFilter: number = 8 +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts.meta new file mode 100644 index 00000000..16cc3edf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/LogLevelConfiguration.ts.meta @@ -0,0 +1,38 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! ee347a85-5797-4c6b-879a-2fad7ec50406 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ee347a85-5797-4c6b-879a-2fad7ec50406 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! e0d5dcb4-edd8-4164-a081-20bdda7354f7 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + logLevelFilter: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - logLevelFilter: 8 + ScriptTypes: + - + {} + InputLines: + - '// @input int logLevelFilter = 8 {"widget":"combobox", "values":[{"label":"Error", "value":3}, {"label":"Warning", "value":4}, {"label":"Info", "value":6}, {"label":"Debug", "value":7}, {"label":"Verbose", "value":8}]}' diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts new file mode 100644 index 00000000..c5dc691a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts @@ -0,0 +1,35 @@ +import SIKLogLevelProvider from "../../Providers/InteractionConfigurationProvider/SIKLogLevelProvider" +import {InteractionManager} from "../InteractionManager/InteractionManager" +import {LogLevelConfiguration} from "./LogLevelConfiguration" + +const TAG = "SIKLogLevelConfiguration" + +/** + * Allows the user to select the log level filter for SIK types from a lens studio component. + */ +@component +export class SIKLogLevelConfiguration extends LogLevelConfiguration { + // TODO: Should we rename this back to Configuration? Or keep the debug logic in InteractionManager (which isn't a component)? + private SIKLogLevelProvider = SIKLogLevelProvider.getInstance() + private interactionManager = InteractionManager.getInstance() + + @input + private _debugModeEnabled: boolean = false + + onAwake() { + this.SIKLogLevelProvider.logLevel = this.logLevelFilter + this.createEvent("OnStartEvent").bind(() => { + this.debugModeEnabled = this._debugModeEnabled + }) + } + + set debugModeEnabled(enabled: boolean) { + this._debugModeEnabled = enabled + + this.interactionManager.debugModeEnabled = enabled + } + + get debugModeEnabled(): boolean { + return this._debugModeEnabled + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts.meta new file mode 100644 index 00000000..990ec46d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/LogLevelConfiguration/SIKLogLevelConfiguration.ts.meta @@ -0,0 +1,41 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 2b8d966e-34f9-4307-af42-f12f2f418ba7 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _debugModeEnabled: false + logLevelFilter: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - logLevelFilter: 8 + _debugModeEnabled: false + ScriptTypes: + - + {} + InputLines: + - '// @input int logLevelFilter = 8 {"widget":"combobox", "values":[{"label":"Error", "value":3}, {"label":"Warning", "value":4}, {"label":"Info", "value":6}, {"label":"Debug", "value":7}, {"label":"Verbose", "value":8}]}' + - // @input bool _debugModeEnabled diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts new file mode 100644 index 00000000..0e1a59bb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts @@ -0,0 +1,410 @@ +import {InteractableManipulation} from "../../Components/Interaction/InteractableManipulation/InteractableManipulation" +import {MobileInputData} from "../../Providers/MobileInputData/MobileInputData" +import {InteractableHitInfo} from "../../Providers/TargetProvider/TargetProvider" +import NativeLogger from "../../Utils/NativeLogger" +import {validate} from "../../Utils/validate" +import BaseInteractor from "../Interactor/BaseInteractor" +import {DragProvider} from "../Interactor/DragProvider" +import IndirectTargetProvider from "../Interactor/IndirectTargetProvider" +import { + DragType, + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "../Interactor/Interactor" +import {MobileRayProvider} from "../Interactor/MobileRayProvider" + +const TAG = "MobileInteractor" + +// These thresholds are not for deciding when to invoke onDragStart, but rather to tell the MobileInteractor when to switch what type of drag to track. +const INITIAL_TOUCHPAD_SWITCH_THRESHOLD = 0.05 // Screen position units mapped from the phone's touch surface +const OVERRIDE_TOUCHPAD_SWITCH_THRESHOLD = 0.1 // Screen position units mapped from the phone's touch surface + +const INITIAL_SIX_DOF_SWITCH_THRESHOLD = 3 // World units in c +const OVERRIDE_SIX_DOF_SWITCH_THRESHOLD = 20 // World units in c +const MANIPULATE_SIX_DOF_SWITCH_THRESHOLD = 2 // World units in c + +/** + * Interactor for the Mobile Controller + */ +@component +export class MobileInteractor extends BaseInteractor { + @ui.group_start("Mobile Interactor") + @input + @hint( + "Initialize Mobile Input Data Provider with Position and Rotation Filtering" + ) + initializePositionAndRotationFilter: boolean = true + @input + private _touchpadScrollSpeed: number = 250 + @input + private touchpadDragThreshold: number = 0.05 + @ui.group_end + private indirectTargetProvider: IndirectTargetProvider | undefined + private rayProvider: MobileRayProvider | undefined + private _dragType: DragType | null = null + private isManipulating = false + + // Native Logging + private log = new NativeLogger(TAG) + + private mobileInputData: MobileInputData = MobileInputData.getInstance() + + private touchpadStartPosition: vec2 | null = null + private touchpadCurrentPosition: vec2 | null = null + private sixDofStartPosition: vec3 | null = null + private sixDofCurrentPosition: vec3 | null = null + + private sixDofDragProvider = new DragProvider(this.indirectDragThreshold) + private touchpadDragProvider = new DragProvider(this.touchpadDragThreshold) + + onAwake(): void { + this.inputType = InteractorInputType.Mobile + this.mobileInputData.filterPositionAndRotation = + this.initializePositionAndRotationFilter + + this.defineSceneEvents() + this.defineTouchEvents() + + this.rayProvider = new MobileRayProvider() + + this.indirectTargetProvider = new IndirectTargetProvider( + this as BaseInteractor, + { + maxRayDistance: this.maxRaycastDistance, + rayProvider: this.rayProvider, + targetingVolumeMultiplier: this.indirectTargetingVolumeMultiplier, + shouldPreventTargetUpdate: () => { + return this.preventTargetUpdate() + }, + spherecastRadii: this.spherecastRadii, + spherecastDistanceThresholds: this.spherecastDistanceThresholds, + } + ) + } + + get touchpadScrollSpeed(): number { + return this._touchpadScrollSpeed + } + + get startPoint(): vec3 | null { + return this.indirectTargetProvider?.startPoint ?? null + } + + get endPoint(): vec3 | null { + return this.indirectTargetProvider?.endPoint ?? null + } + + get direction(): vec3 | null { + return this.indirectTargetProvider?.direction ?? null + } + + get orientation(): quat | null { + return this.mobileInputData.rotation + } + + get distanceToTarget(): number | null { + return ( + this.indirectTargetProvider?.currentInteractableHitInfo?.hit.distance ?? + null + ) + } + + get targetHitPosition(): vec3 | null { + return ( + this.indirectTargetProvider?.currentInteractableHitInfo?.hit.position ?? + null + ) + } + + get targetHitInfo(): InteractableHitInfo | null { + return this.indirectTargetProvider?.currentInteractableHitInfo ?? null + } + + get activeTargetingMode(): TargetingMode { + return this.indirectTargetProvider?.targetingMode ?? TargetingMode.None + } + + get maxRaycastDistance(): number { + return this._maxRaycastDistance + } + + get interactionStrength(): number | null { + return this.touchpadStartPosition !== null ? 1 : 0 + } + + /** + * Set if the Interactor is should draw a debug gizmo of collider/raycasts in the scene. + */ + set drawDebug(debug: boolean) { + validate(this.indirectTargetProvider) + this._drawDebug = debug + + this.indirectTargetProvider.drawDebug = debug + } + + /** + * @returns if the Interactor is currently drawing a debug gizmo of collider/raycasts in the scene. + */ + get drawDebug(): boolean { + return this._drawDebug + } + + /** + * @returns the current drag vector of the phone's SixDof position in world space. + */ + get sixDofDragVector(): vec3 | null { + return this.sixDofDragProvider.currentDragVector + } + + /** + * @returns the current drag vector of the phone's touchpad in normalized screen space (with bottom-left corner representing [0,0]). + */ + get touchpadDragVector(): vec3 | null { + return this.touchpadDragProvider.currentDragVector + } + + override updateState(): void { + super.updateState() + + if (!this.mobileInputData.isAvailable()) { + return + } + + validate(this.indirectTargetProvider) + + this.indirectTargetProvider.update() + this.currentInteractable = + this.indirectTargetProvider.currentInteractableHitInfo?.interactable ?? + null + this.currentTrigger = + this.touchpadStartPosition !== null + ? InteractorTriggerType.Select + : InteractorTriggerType.None + + if ((this.currentTrigger & InteractorTriggerType.Select) !== 0) { + if (this.sixDofStartPosition === null) { + this.sixDofStartPosition = this.sixDofSwitchPosition + } + this.sixDofCurrentPosition = this.sixDofSwitchPosition + } else { + this.sixDofCurrentPosition = this.sixDofStartPosition = null + } + + this.updateDragType() + this.updateDragVector() + } + + /** @inheritdoc */ + isTargeting(): boolean { + return this.mobileInputData.isAvailable() + } + + /** @inheritdoc */ + isActive(): boolean { + return this.mobileInputData.isAvailable() + } + + protected clearCurrentHitInfo(): void { + validate(this.indirectTargetProvider) + this.indirectTargetProvider.clearCurrentInteractableHitInfo() + } + + private defineSceneEvents(): void { + this.createEvent("OnDestroyEvent").bind(() => { + this.release() + }) + } + + private defineTouchEvents(): void { + this.createEvent("TouchStartEvent").bind((...args) => + this.onTouchStartEvent(...args) + ) + + this.createEvent("TouchMoveEvent").bind((...args) => + this.onTouchMoveEvent(...args) + ) + + this.createEvent("TouchEndEvent").bind((...args) => this.onTouchEndEvent()) + } + + private onTouchStartEvent(ev: TouchStartEvent): void { + this.touchpadCurrentPosition = this.touchpadStartPosition = + ev.getTouchPosition() + if (this.currentInteractable !== null) { + this.isManipulating = + this.currentInteractable.sceneObject.getComponent( + InteractableManipulation.getTypeName() + ) !== null + } + if (!global.deviceInfoSystem.isEditor) { + this.log.v("Mobile Interactor On Touch Start Event") + } + } + + private onTouchMoveEvent(ev: TouchMoveEvent): void { + this.touchpadCurrentPosition = ev.getTouchPosition() + } + + private onTouchEndEvent(): void { + this.touchpadStartPosition = this.touchpadCurrentPosition = null + this.dragType = null + this.dragProvider.clear() + this.isManipulating = false + if (!global.deviceInfoSystem.isEditor) { + this.log.v("Mobile Interactor On Touch End Event") + } + } + + private preventTargetUpdate(): boolean { + // If there's no current touch there's no trigger happening + if (!this.touchpadStartPosition) { + return false + } + + return true + } + + private updateDragType() { + if (this.currentTrigger === InteractorTriggerType.None) { + return + } + + if ( + this.dragType !== DragType.Touchpad && + this.touchpadStartPosition !== null && + this.touchpadCurrentPosition !== null && + this.touchpadCurrentPosition?.sub(this.touchpadStartPosition).length > + this.touchpadSwitchThreshold + ) { + this.dragType = DragType.Touchpad + return + } + + if ( + this.dragType !== DragType.SixDof && + this.sixDofStartPosition !== null && + this.sixDofCurrentPosition !== null && + this.sixDofCurrentPosition?.sub(this.sixDofStartPosition).length > + this.sixDofSwitchThreshold + ) { + this.dragType = DragType.SixDof + return + } + } + + protected override clearDragProviders(): void { + this.touchpadDragProvider.clear() + this.sixDofDragProvider.clear() + this.planecastDragProvider.clear() + } + + protected override updateDragVector(): void { + if ((this.currentTrigger & InteractorTriggerType.Select) !== 0) { + const touchpadDragVector = this.touchpadDragProvider.getDragVector( + this.getTouchpadDragPoint(), + this.currentInteractable?.enableInstantDrag ?? null + ) + const sixDofDragVector = this.sixDofDragProvider.getDragVector( + this.getSixDofDragPoint(), + this.currentInteractable?.enableInstantDrag ?? null + ) + + this.currentDragVector = this.dragProvider.currentDragVector + + this.planecastDragProvider.getDragVector( + this.planecastPoint, + this.currentInteractable?.enableInstantDrag ?? null + ) + } else { + this.currentDragVector = null + this.clearDragProviders() + } + } + + protected override getDragPoint(): vec3 | null { + if (this.dragType === DragType.SixDof) { + return this.getSixDofDragPoint() + } else if (this.dragType === DragType.Touchpad) { + return this.getTouchpadDragPoint() + } + return null + } + + private getSixDofDragPoint(): vec3 | null { + return this.endPoint + } + + private getTouchpadDragPoint(): vec3 | null { + if (this.touchpadCurrentPosition !== null) { + return new vec3( + // Remap the touchpad space such that the bottom-left corner is [0,0] rather than the top-left corner. + this.touchpadCurrentPosition.x, + 1 - this.touchpadCurrentPosition.y, + 0 + ).uniformScale(this.touchpadScrollSpeed) + } + return null + } + + /** + * At the beginning of interaction, the switch threshold should be lower to immediately start tracking the user's desired type of drag. + * However if the user is already dragging via Touchpad, switching to drag via 6DoF should be more difficult to avoid accidental drag interruptions. + * In the case of manipulation, we use a threshold for the startPosition of the ray instead as a design choice. + */ + private get sixDofSwitchThreshold(): number { + if (this.isManipulating) { + return MANIPULATE_SIX_DOF_SWITCH_THRESHOLD + } + + if (this.dragType === DragType.Touchpad) { + return OVERRIDE_SIX_DOF_SWITCH_THRESHOLD + } + + return INITIAL_SIX_DOF_SWITCH_THRESHOLD + } + + /** + * At the beginning of interaction, the switch threshold should be lower to immediately start tracking the user's desired type of drag. + * However if the user is already dragging via 6Dof, switching to drag via Touchpad should be more difficult to avoid accidental drag interruptions. + */ + private get touchpadSwitchThreshold(): number { + if (this.dragType === DragType.SixDof) { + return OVERRIDE_TOUCHPAD_SWITCH_THRESHOLD + } + + return INITIAL_TOUCHPAD_SWITCH_THRESHOLD + } + + /** + * If we are manipulating, we use the location of the phone as the start point. + * Otherwise, we use the endpoint of the raycast. + */ + get sixDofSwitchPosition(): vec3 | null { + return this.isManipulating ? this.startPoint : this.endPoint + } + + override get dragType(): DragType | null { + return this._dragType + } + + private override set dragType(type: DragType | null) { + if (type === this.dragType) { + return + } + + this._dragType = type + + switch (type) { + case DragType.SixDof: + this.dragProvider = this.sixDofDragProvider + // Reset the start position of Touchpad to accurately track when the user wants to switch to using Touchpad drag. + this.touchpadStartPosition = this.touchpadCurrentPosition + break + case DragType.Touchpad: + this.dragProvider = this.touchpadDragProvider + // Reset the start position of 6DoF to accurately track when the user wants to switch to using 6DoF drag. + this.sixDofStartPosition = this.sixDofCurrentPosition + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts.meta new file mode 100644 index 00000000..4fb6d976 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MobileInteractor/MobileInteractor.ts.meta @@ -0,0 +1,82 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3a81eaa4-9bd9-40b8-b925-8ce6ced39d84 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _drawDebug: false + _maxRaycastDistance: false + _touchpadScrollSpeed: false + indirectDragThreshold: false + indirectTargetingVolumeMultiplier: false + initializePositionAndRotationFilter: false + sphereCastEnabled: false + spherecastDistanceThresholds: false + spherecastRadii: false + touchpadDragThreshold: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - sphereCastEnabled: false + indirectTargetingVolumeMultiplier: ! 1.000000 + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectDragThreshold: ! 3.000000 + touchpadDragThreshold: 0.050000 + _touchpadScrollSpeed: ! 250.000000 + initializePositionAndRotationFilter: true + _drawDebug: false + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Interactor"}' + - // @input bool _drawDebug + - '// @ui {"widget":"group_start", "label":"Spherecast Configuration"}' + - // @input bool sphereCastEnabled + - '// @input number[] spherecastRadii = "{0.5, 2.0, 4.0}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @input number[] spherecastDistanceThresholds = "{0, 12, 30}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Targeting Configuration"}' + - // @input float _maxRaycastDistance = 500 + - // @input float indirectTargetingVolumeMultiplier = 1 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Indirect Drag Provider"}' + - // @input float indirectDragThreshold = 3 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Mobile Interactor"}' + - '// @input bool initializePositionAndRotationFilter = true {"hint":"Initialize Mobile Input Data Provider with Position and Rotation Filtering"}' + - // @input float _touchpadScrollSpeed = 250 + - // @input float touchpadDragThreshold = 0.05 + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts new file mode 100644 index 00000000..313f2b00 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts @@ -0,0 +1,189 @@ +import {InteractableHitInfo} from "../../Providers/TargetProvider/TargetProvider" +import BaseInteractor from "../Interactor/BaseInteractor" +import { + InteractorInputType, + InteractorTriggerType, + TargetingMode, +} from "../Interactor/Interactor" +import MouseTargetProvider from "../Interactor/MouseTargetProvider" +import {TouchRayProvider} from "../Interactor/TouchRayProvider" + +const TARGETING_VOLUME_MULTIPLIER = 1 + +/** + * {@link Interactor} implementation used for touch bases interactions + * to interact with {@link Interactable} components with the mouse cursor + * in preview window of Lens Studio + * + * There are no events for mouse hover in Lens Studio so this class uses some technics to + * achieve both hover and trigger events. + */ +@component +export class MouseInteractor extends BaseInteractor { + @ui.group_start("MouseInteractor") + @input + @hint( + "Sets the return value of MouseInteractor.activeTargetingMode for cases where non-indirect targeting needs to be tested specifically. Useful whenever your code has checks for interactor.activeTargetingMode === TargetingMode.X." + ) + @widget( + new ComboBoxWidget([ + new ComboBoxItem("Direct", 1), + new ComboBoxItem("Indirect", 2), + new ComboBoxItem("All", 3), + new ComboBoxItem("Poke", 4), + ]) + ) + private mouseTargetingMode: number = 2 + @ui.group_end + private isDown = false + + private touchRayProvider!: TouchRayProvider + private mouseTargetProvider!: MouseTargetProvider + + onAwake() { + this.defineSceneEvents() + this.defineTouchEvents() + this.inputType = InteractorInputType.Mouse + + this.touchRayProvider = new TouchRayProvider(this, this.maxRaycastDistance) + this.mouseTargetProvider = new MouseTargetProvider(this as BaseInteractor, { + rayProvider: this.touchRayProvider, + maxRayDistance: this.maxRaycastDistance, + targetingVolumeMultiplier: TARGETING_VOLUME_MULTIPLIER, + shouldPreventTargetUpdate: () => { + return this.currentInteractable !== null && this.isDown + }, + spherecastRadii: this.spherecastRadii, + spherecastDistanceThresholds: this.spherecastDistanceThresholds, + }) + } + + constructor() { + super() + + if (!global.deviceInfoSystem.isEditor()) { + this.interactionManager.deregisterInteractor(this) + this.enabled = false + } + } + + get startPoint(): vec3 | null { + return this.mouseTargetProvider.startPoint + } + + get endPoint(): vec3 | null { + return this.mouseTargetProvider.endPoint + } + + get direction(): vec3 | null { + return this.mouseTargetProvider.direction + } + + get distanceToTarget(): number | null { + return ( + this.mouseTargetProvider.currentInteractableHitInfo?.hit.distance ?? null + ) + } + + get targetHitPosition(): vec3 | null { + return ( + this.mouseTargetProvider.currentInteractableHitInfo?.hit.position ?? null + ) + } + + get targetHitInfo(): InteractableHitInfo | null { + return this.mouseTargetProvider.currentInteractableHitInfo ?? null + } + + get activeTargetingMode(): TargetingMode { + return this.mouseTargetingMode + } + + get maxRaycastDistance(): number { + return this._maxRaycastDistance + } + + get orientation(): quat | null { + return quat.quatIdentity() + } + + get interactionStrength(): number | null { + return this.currentTrigger === InteractorTriggerType.Select ? 1 : 0.5 + } + + /** + * Set if the Interactor is should draw a debug gizmo of collider/raycasts in the scene. + */ + set drawDebug(debug: boolean) { + this._drawDebug = debug + + this.mouseTargetProvider.drawDebug = debug + } + + /** + * @returns if the Interactor is currently drawing a debug gizmo of collider/raycasts in the scene. + */ + get drawDebug(): boolean { + return this._drawDebug + } + + isActive(): boolean { + return this.enabled + } + + isTargeting(): boolean { + return ( + this.touchRayProvider !== undefined && this.touchRayProvider.isAvailable() + ) + } + + override updateState(): void { + super.updateState() + + if (!this.isActive()) { + return + } + + this.mouseTargetProvider.update() + + this.currentInteractable = + this.mouseTargetProvider.currentInteractableHitInfo?.interactable ?? null + + this.currentTrigger = this.isDown + ? InteractorTriggerType.Select + : InteractorTriggerType.None + + this.updateDragVector() + } + + protected clearCurrentHitInfo(): void { + this.mouseTargetProvider.clearCurrentInteractableHitInfo() + } + + private defineSceneEvents(): void { + this.createEvent("OnEnableEvent").bind(() => { + this.enabled = true + }) + + this.createEvent("OnDisableEvent").bind(() => { + this.enabled = false + }) + } + + private defineTouchEvents(): void { + this.createEvent("TouchStartEvent").bind((...args) => + this.onTouchStartEvent(...args) + ) + + this.createEvent("TouchEndEvent").bind((...args) => + this.onTouchEndEvent(...args) + ) + } + private onTouchStartEvent(ev: TouchStartEvent): void { + this.isDown = true + } + + private onTouchEndEvent(ev: TouchEndEvent): void { + this.isDown = false + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts.meta new file mode 100644 index 00000000..39a16503 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Core/MouseInteractor/MouseInteractor.ts.meta @@ -0,0 +1,76 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 98041818-04ed-4d32-9681-c9da213fa6b4 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + _drawDebug: false + _maxRaycastDistance: false + indirectDragThreshold: false + indirectTargetingVolumeMultiplier: false + mouseTargetingMode: false + sphereCastEnabled: false + spherecastDistanceThresholds: false + spherecastRadii: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + _drawDebug: false + mouseTargetingMode: ! 2.000000 + ScriptTypes: + - + {} + InputLines: + - '// @ui {"widget":"group_start", "label":"Interactor"}' + - // @input bool _drawDebug + - '// @ui {"widget":"group_start", "label":"Spherecast Configuration"}' + - // @input bool sphereCastEnabled + - '// @input number[] spherecastRadii = "{0.5, 2.0, 4.0}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @input number[] spherecastDistanceThresholds = "{0, 12, 30}" {"showIf":"sphereCastEnabled", "showIfValue":true}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Targeting Configuration"}' + - // @input float _maxRaycastDistance = 500 + - // @input float indirectTargetingVolumeMultiplier = 1 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"Indirect Drag Provider"}' + - // @input float indirectDragThreshold = 3 + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_end"}' + - '// @ui {"widget":"group_start", "label":"MouseInteractor"}' + - '// @input float mouseTargetingMode = 2 {"hint":"Sets the return value of MouseInteractor.activeTargetingMode for cases where non-indirect targeting needs to be tested specifically. Useful whenever your code has checks for interactor.activeTargetingMode === TargetingMode.X.", "widget":"combobox", "values":[{"label":"Direct", "value":1}, {"label":"Indirect", "value":2}, {"label":"All", "value":3}, {"label":"Poke", "value":4}]}' + - '// @ui {"widget":"group_end"}' + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts new file mode 100644 index 00000000..0fe58701 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts @@ -0,0 +1,30 @@ +/** + * A decorator function to make a class a singleton. + * + * @param constructor + */ +export function Singleton any>( + constructor: T +): T { + let _instance: InstanceType | null = null + + const newConstructor: any = function (...args: any[]) { + if (!_instance) { + _instance = new constructor(...args) + } + return _instance + } + + // Copy prototype so instanceof operator still works + newConstructor.prototype = constructor.prototype + + // Add the static `getInstance` method to the decorated class + newConstructor.getInstance = function () { + if (!_instance) { + _instance = new constructor() + } + return _instance! + } + + return newConstructor +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts.meta new file mode 100644 index 00000000..99d659ee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Decorators/Singleton.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 4577124a-02c0-40dd-abb6-711348a8fa3f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4577124a-02c0-40dd-abb6-711348a8fa3f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3810dc44-d475-4aa4-986a-31c3185bea52 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat new file mode 100644 index 00000000..52658b0f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 83edd8a7-293d-429b-8a77-faecdbb6c3f6 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: cc6a2658-c9c4-4200-955e-ea150374967c + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat.meta new file mode 100644 index 00000000..28aa8d01 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernBodyTube_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 5e3a10ef-8cca-453d-826a-a8c8e8e6f53c + ImporterName: MaterialImporter + PrimaryAsset: ! 5e3a10ef-8cca-453d-826a-a8c8e8e6f53c + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat new file mode 100644 index 00000000..80279b30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 4b9d60db-ad31-45e2-a721-35b9c12acb46 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: e5a16836-90b9-4686-894b-671a6e6c915e + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat.meta new file mode 100644 index 00000000..f0984356 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernFins_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! d87d9ccc-b812-4ed4-b736-0d6b370151fc + ImporterName: MaterialImporter + PrimaryAsset: ! d87d9ccc-b812-4ed4-b736-0d6b370151fc + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat new file mode 100644 index 00000000..361ef2b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 5a43ba0a-7f09-4ccd-ba1d-e83432931aa3 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 95f5ad88-bc78-42bc-8f9d-4772aa6fdaa0 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat.meta new file mode 100644 index 00000000..ae96af51 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/ModernNoseCone_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 350d011f-f256-477d-a8d3-32c2f075d507 + ImporterName: MaterialImporter + PrimaryAsset: ! 350d011f-f256-477d-a8d3-32c2f075d507 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat new file mode 100644 index 00000000..8d194071 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 879b6940-f953-4737-970c-6187a71eda0c +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: df3b9a95-4d7e-47b1-855a-3d47e21e26bc + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat.meta new file mode 100644 index 00000000..ae152317 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekBodyTube_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 744d0ebf-a38c-4ea1-86f5-7e6d5aeea8c0 + ImporterName: MaterialImporter + PrimaryAsset: ! 744d0ebf-a38c-4ea1-86f5-7e6d5aeea8c0 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat new file mode 100644 index 00000000..b62097af --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! fdbeb9f7-8e48-4684-ad9d-960554b6d954 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 2f896f95-a856-47d7-b5a0-5bd4e75787a6 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat.meta new file mode 100644 index 00000000..2ce9dc71 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekFins_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 8e124aaf-dd81-4f54-b216-064a0ce92c6f + ImporterName: MaterialImporter + PrimaryAsset: ! 8e124aaf-dd81-4f54-b216-064a0ce92c6f + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat new file mode 100644 index 00000000..6780ac0b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6cb9ca6c-d6d7-4f3c-a413-2d75c5e89795 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 0311aabc-2091-4424-a8e6-788f16414f71 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat.meta new file mode 100644 index 00000000..ed8a385d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SleekNoseCone_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 31e11660-d89a-4744-a17f-4fe8c63d9ac2 + ImporterName: MaterialImporter + PrimaryAsset: ! 31e11660-d89a-4744-a17f-4fe8c63d9ac2 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat new file mode 100644 index 00000000..01da5487 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b6ca3432-4c05-4460-9666-a001a6f7c9fd +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: a177cbf2-7a2b-4bff-b9c9-8acc82442799 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat.meta new file mode 100644 index 00000000..e0b8df79 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeBodyTube_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! bbbccf8e-d1a1-4580-8348-cc52637c5249 + ImporterName: MaterialImporter + PrimaryAsset: ! bbbccf8e-d1a1-4580-8348-cc52637c5249 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat new file mode 100644 index 00000000..d81b7578 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! e6fda1fc-691f-406d-9a1a-788682971f3c +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 30a613c8-8cfb-4744-8335-7059c3835e14 + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat.meta new file mode 100644 index 00000000..cbc4b801 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeFins_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 9228366b-7f28-4dcb-b005-ced91bac69fa + ImporterName: MaterialImporter + PrimaryAsset: ! 9228366b-7f28-4dcb-b005-ced91bac69fa + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat new file mode 100644 index 00000000..c4ee65fc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 1e73fe0b-4ea2-4faf-b4da-fcb4553470f3 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: false + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: a6dc5752-3f7b-4566-b621-26facc3ef93e + sampler: + filteringMode: Bilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: ClampToEdge + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! c4329789-0e5d-4149-a72a-f94c1c89157c + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat.meta new file mode 100644 index 00000000..3a3b11d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Icons/SpaceAgeNoseCone_icon.mat.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + Material: ! 9f7bb172-544f-4eac-9bc1-cd471590c2d5 + ImporterName: MaterialImporter + PrimaryAsset: ! 9f7bb172-544f-4eac-9bc1-cd471590c2d5 + PackageType: NotAPackage + AssetDataMap: + Material: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat new file mode 100644 index 00000000..53ec8dd2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat @@ -0,0 +1,54 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 1fcf936e-878c-40f7-98e2-ff8877b67107 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 60085123-337c-4c07-a3bf-740172bd8632 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 3a248df4-730c-4a39-b4bd-b285a57eda14 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat.meta new file mode 100644 index 00000000..a8ecf1cb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Meteor.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 57e56f6b-0632-4d36-829e-5265b4e158ec + ImporterName: MaterialImporter + PrimaryAsset: ! 57e56f6b-0632-4d36-829e-5265b4e158ec + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat new file mode 100644 index 00000000..a17c40dc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat @@ -0,0 +1,243 @@ +- ! + PackagePath: "" + PassesInfo: + - ! fd5eac5d-b16f-4140-b812-7be8188fedba +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N012: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Exponent_N024: + typeIdx: 1 + value: 1.500000 + Port_Input0_N001: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Input1_N001: + typeIdx: 5 + value: {x: 0.890196, y: 0.698039, z: 0.388235, w: 1.000000} + Port_Input1_N010: + typeIdx: 1 + value: 0.500000 + Port_Input2_N026: + typeIdx: 5 + value: {x: 0.501961, y: 0.501961, z: 0.501961, w: 0.501961} + Port_Intensity_N024: + typeIdx: 1 + value: 10.000000 + Port_Normal_N024: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.100000} + Port_Position10_N005: + typeIdx: 1 + value: 0.380000 + Port_Position10_N019: + typeIdx: 1 + value: 0.270000 + Port_Position11_N005: + typeIdx: 1 + value: 0.390000 + Port_Position11_N019: + typeIdx: 1 + value: 0.330000 + Port_Position12_N005: + typeIdx: 1 + value: 0.450000 + Port_Position12_N019: + typeIdx: 1 + value: 0.390000 + Port_Position13_N005: + typeIdx: 1 + value: 0.490000 + Port_Position13_N019: + typeIdx: 1 + value: 0.420000 + Port_Position14_N005: + typeIdx: 1 + value: 0.500000 + Port_Position14_N019: + typeIdx: 1 + value: 0.470000 + Port_Position1_N005: + typeIdx: 1 + value: 0.080000 + Port_Position1_N019: + typeIdx: 1 + value: 0.080000 + Port_Position2_N005: + typeIdx: 1 + value: 0.120000 + Port_Position2_N019: + typeIdx: 1 + value: 0.120000 + Port_Position3_N005: + typeIdx: 1 + value: 0.140000 + Port_Position3_N019: + typeIdx: 1 + value: 0.140000 + Port_Position4_N005: + typeIdx: 1 + value: 0.150000 + Port_Position4_N019: + typeIdx: 1 + value: 0.150000 + Port_Position5_N005: + typeIdx: 1 + value: 0.160000 + Port_Position5_N019: + typeIdx: 1 + value: 0.160000 + Port_Position6_N005: + typeIdx: 1 + value: 0.120000 + Port_Position6_N019: + typeIdx: 1 + value: 0.120000 + Port_Position7_N005: + typeIdx: 1 + value: 0.220000 + Port_Position7_N019: + typeIdx: 1 + value: 0.220000 + Port_Position8_N005: + typeIdx: 1 + value: 0.240000 + Port_Position8_N019: + typeIdx: 1 + value: 0.240000 + Port_Position9_N005: + typeIdx: 1 + value: 0.280000 + Port_Position9_N019: + typeIdx: 1 + value: 0.250000 + Port_Rotation_N002: + typeIdx: 1 + value: -90.000000 + Port_Rotation_N012: + typeIdx: 1 + value: 90.000000 + Port_Value0_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value0_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value10_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value10_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value11_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value11_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value12_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value12_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value13_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value13_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value14_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value14_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value15_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value15_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value1_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value1_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value2_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value2_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value3_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value3_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value4_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value4_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value5_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value5_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value6_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value6_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value7_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value7_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value8_N005: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value8_N019: + typeIdx: 5 + value: {x: 0.898039, y: 0.403922, z: 0.000000, w: 1.000000} + Port_Value9_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + Port_Value9_N019: + typeIdx: 5 + value: {x: 1.000000, y: 0.666667, z: 0.203922, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Pass: ! c77ab7db-4342-48e5-aa2f-62bb7705b911 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat.meta new file mode 100644 index 00000000..082d9cfd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! b4b364af-ee41-4c86-a1ba-a055da762816 + ImporterName: MaterialImporter + PrimaryAsset: ! b4b364af-ee41-4c86-a1ba-a055da762816 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat new file mode 100644 index 00000000..4cdeef82 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat @@ -0,0 +1,168 @@ +- ! + PackagePath: "" + PassesInfo: + - ! e67c783e-8fb4-4621-961d-a3a4868efad2 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N001: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Position10_N002: + typeIdx: 1 + value: 0.360000 + Port_Position11_N002: + typeIdx: 1 + value: 0.370000 + Port_Position12_N002: + typeIdx: 1 + value: 0.410000 + Port_Position13_N002: + typeIdx: 1 + value: 0.450000 + Port_Position14_N002: + typeIdx: 1 + value: 0.510000 + Port_Position1_N000: + typeIdx: 1 + value: 0.130000 + Port_Position1_N002: + typeIdx: 1 + value: 0.060000 + Port_Position2_N000: + typeIdx: 1 + value: 0.180000 + Port_Position2_N002: + typeIdx: 1 + value: 0.080000 + Port_Position3_N000: + typeIdx: 1 + value: 0.170000 + Port_Position3_N002: + typeIdx: 1 + value: 0.090000 + Port_Position4_N000: + typeIdx: 1 + value: 0.240000 + Port_Position4_N002: + typeIdx: 1 + value: 0.100000 + Port_Position5_N000: + typeIdx: 1 + value: 0.330000 + Port_Position5_N002: + typeIdx: 1 + value: 0.160000 + Port_Position6_N000: + typeIdx: 1 + value: 0.470000 + Port_Position6_N002: + typeIdx: 1 + value: 0.180000 + Port_Position7_N002: + typeIdx: 1 + value: 0.190000 + Port_Position8_N002: + typeIdx: 1 + value: 0.300000 + Port_Position9_N002: + typeIdx: 1 + value: 0.350000 + Port_Rotation_N001: + typeIdx: 1 + value: -90.000000 + Port_Value0_N000: + typeIdx: 5 + value: {x: 0.666667, y: 0.345098, z: 0.145098, w: 1.000000} + Port_Value0_N002: + typeIdx: 1 + value: 0.000000 + Port_Value10_N002: + typeIdx: 1 + value: 0.000000 + Port_Value11_N002: + typeIdx: 1 + value: 0.000000 + Port_Value12_N002: + typeIdx: 1 + value: 1.000000 + Port_Value13_N002: + typeIdx: 1 + value: 1.000000 + Port_Value14_N002: + typeIdx: 1 + value: 0.000000 + Port_Value15_N002: + typeIdx: 1 + value: 1.000000 + Port_Value1_N000: + typeIdx: 5 + value: {x: 0.968627, y: 0.733333, z: 0.329412, w: 1.000000} + Port_Value1_N002: + typeIdx: 1 + value: 1.000000 + Port_Value2_N000: + typeIdx: 5 + value: {x: 0.988235, y: 0.627451, z: 0.000000, w: 1.000000} + Port_Value2_N002: + typeIdx: 1 + value: 1.000000 + Port_Value3_N000: + typeIdx: 5 + value: {x: 0.713726, y: 0.419608, z: 0.003922, w: 1.000000} + Port_Value3_N002: + typeIdx: 1 + value: 0.000000 + Port_Value4_N000: + typeIdx: 5 + value: {x: 0.988235, y: 0.627451, z: 0.000000, w: 1.000000} + Port_Value4_N002: + typeIdx: 1 + value: 1.000000 + Port_Value5_N000: + typeIdx: 5 + value: {x: 0.988235, y: 0.858824, z: 0.470588, w: 1.000000} + Port_Value5_N002: + typeIdx: 1 + value: 1.000000 + Port_Value6_N000: + typeIdx: 5 + value: {x: 0.988235, y: 0.686275, z: 0.341176, w: 1.000000} + Port_Value6_N002: + typeIdx: 1 + value: 0.000000 + Port_Value7_N000: + typeIdx: 5 + value: {x: 0.666667, y: 0.345098, z: 0.145098, w: 0.000000} + Port_Value7_N002: + typeIdx: 1 + value: 1.000000 + Port_Value8_N002: + typeIdx: 1 + value: 1.000000 + Port_Value9_N002: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Pass: ! 53b176a1-1797-414e-a644-318f89b62222 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat.meta new file mode 100644 index 00000000..e10511b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Planet_rings.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 7f82b210-b438-4633-853e-6f804c2638bb + ImporterName: MaterialImporter + PrimaryAsset: ! 7f82b210-b438-4633-853e-6f804c2638bb + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat new file mode 100644 index 00000000..421dd15a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat @@ -0,0 +1,108 @@ +- ! + PackagePath: "" + PassesInfo: + - ! f1fc3c98-b329-4c7b-b53f-c07f9449213c +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.223529, y: 0.223529, z: 0.223529, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: fd087204-9411-4134-a7ae-fc7d4cb32a14 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.372549, y: 0.372549, z: 0.372549, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.498039, y: 0.498039, z: 0.498039, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.710000 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.270000 + Pass: ! 3eba1ac9-5348-410d-8dfd-89f67dfd02d6 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat.meta new file mode 100644 index 00000000..9c484f96 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Platform.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ab483a45-8677-4f11-8cd0-5c5d4a239a94 + ImporterName: MaterialImporter + PrimaryAsset: ! ab483a45-8677-4f11-8cd0-5c5d4a239a94 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat new file mode 100644 index 00000000..b2662875 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 00940ebc-7612-4455-b8fb-6a4b74b93fb3 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.533333, z: 0.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.000000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat.meta new file mode 100644 index 00000000..bc30c83d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_fire.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! b752c41e-b2db-4e93-b562-23d05e916d79 + ImporterName: MaterialImporter + PrimaryAsset: ! b752c41e-b2db-4e93-b562-23d05e916d79 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat new file mode 100644 index 00000000..d72c045a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat @@ -0,0 +1,167 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 456ae609-20e9-4a1d-822a-6252ae6a55b4 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_27_DROPLIST_ITEM 0 + - NODE_29_DROPLIST_ITEM 0 + - Tweak_N37 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N025: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N047: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Import_N031: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Import_N038: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Import_N058: + typeIdx: 3 + value: {x: 0.000000, y: 0.650000} + Port_Import_N060: + typeIdx: 3 + value: {x: 0.000000, y: -0.500000} + Port_Input0_N066: + typeIdx: 1 + value: 0.000000 + Port_Input1_N029: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Input1_N065: + typeIdx: 1 + value: 0.000000 + Port_Input1_N066: + typeIdx: 1 + value: 1.000000 + Port_Input2_N065: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N033: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N033: + typeIdx: 1 + value: 1.000000 + Port_RangeMinA_N033: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N033: + typeIdx: 1 + value: -1.000000 + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Scale_N025: + typeIdx: 3 + value: {x: 5.000000, y: 5.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.541176, y: 0.705882, z: 0.929412, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.541176, y: 0.705882, z: 0.929412, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.541176, y: 0.705882, z: 0.929412, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: a003dca6-fa76-4dc4-b33e-4a38fc750db9 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.550000 + Pass: ! f092ba3c-de20-41ce-90c7-0bda1f84a95e + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat.meta new file mode 100644 index 00000000..dcb3e124 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 50159f70-05fb-4662-a5c4-ed01c233c88d + ImporterName: MaterialImporter + PrimaryAsset: ! 50159f70-05fb-4662-a5c4-ed01c233c88d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat new file mode 100644 index 00000000..cb649640 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat @@ -0,0 +1,124 @@ +- ! + PackagePath: "" + PassesInfo: + - ! aaa64fd9-9827-4d40-8f6c-8b2b12677adf +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_27_DROPLIST_ITEM 0 + - NODE_29_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N025: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Scale_N025: + typeIdx: 3 + value: {x: 5.000000, y: 5.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.290196, y: 0.560784, z: 1.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.290196, y: 0.560784, z: 1.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.290196, y: 0.560784, z: 1.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: a003dca6-fa76-4dc4-b33e-4a38fc750db9 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.550000 + Pass: ! f092ba3c-de20-41ce-90c7-0bda1f84a95e + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat.meta new file mode 100644 index 00000000..52f9d9fd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_glass_satellite.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 5d1d6397-ae85-4e5f-ab2c-6cce45791d26 + ImporterName: MaterialImporter + PrimaryAsset: ! 5d1d6397-ae85-4e5f-ab2c-6cce45791d26 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat new file mode 100644 index 00000000..56fe7b46 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 400c584f-ec5e-4cfb-bcbb-593f393e54ba +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.529412, y: 0.529412, z: 0.529412, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.529412, y: 0.529412, z: 0.529412, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.529412, y: 0.529412, z: 0.529412, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.200000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat.meta new file mode 100644 index 00000000..e7dc76d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_grey.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 9e34582c-f54f-4423-a72e-5f521a8f816a + ImporterName: MaterialImporter + PrimaryAsset: ! 9e34582c-f54f-4423-a72e-5f521a8f816a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat new file mode 100644 index 00000000..09964085 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8c05ad01-10a1-4976-8354-d28a3a38545e +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.352941, y: 0.352941, z: 0.352941, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.584314, y: 0.584314, z: 0.584314, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.439216, y: 0.439216, z: 0.439216, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.710000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 1.000000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat.meta new file mode 100644 index 00000000..40b1fca0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 7630d75e-c089-474f-917b-7571a900f1e2 + ImporterName: MaterialImporter + PrimaryAsset: ! 7630d75e-c089-474f-917b-7571a900f1e2 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat new file mode 100644 index 00000000..39b78cf9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 1de6221a-9822-4338-9645-62f6d2018a4b +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.015686, z: 0.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 1.000000, y: 0.015686, z: 0.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.790000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat.meta new file mode 100644 index 00000000..8a3e5d70 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_metal_red.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ac5e049b-c43a-415b-8e44-5f8798debb0c + ImporterName: MaterialImporter + PrimaryAsset: ! ac5e049b-c43a-415b-8e44-5f8798debb0c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat new file mode 100644 index 00000000..a6466fcb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! c288d07a-5235-4f18-9ea0-62952c564952 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.015686, z: 0.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.015686, z: 0.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.470588, y: 0.000000, z: 0.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.610000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat.meta new file mode 100644 index 00000000..aa3fc8ac --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_01.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! f38add9d-489d-422d-ad03-73c42eddec40 + ImporterName: MaterialImporter + PrimaryAsset: ! f38add9d-489d-422d-ad03-73c42eddec40 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat new file mode 100644 index 00000000..17b0e2be --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 2f66695a-842a-4d46-a3fd-ef65943c4cf0 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.101961, y: 0.196109, z: 0.565972, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.035294, y: 0.276722, z: 0.564736, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.023529, y: 0.771084, z: 0.884565, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.520000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat.meta new file mode 100644 index 00000000..297203bf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_02.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! cfd24310-2219-4548-a8a6-1cffadc84712 + ImporterName: MaterialImporter + PrimaryAsset: ! cfd24310-2219-4548-a8a6-1cffadc84712 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat new file mode 100644 index 00000000..34f002c6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 7691beb4-e569-4ced-98fe-3d6b7195cac5 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.882353, y: 0.242863, z: 0.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.470000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.600000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat.meta new file mode 100644 index 00000000..ea6d9d4f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + ImporterName: MaterialImporter + PrimaryAsset: ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat new file mode 100644 index 00000000..da45ae58 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat @@ -0,0 +1,159 @@ +- ! + PackagePath: "" + PassesInfo: + - ! eb03e661-80c3-4f47-add7-36cfb082afaf +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - Tweak_N37 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N060: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Offset_N062: + typeIdx: 3 + value: {x: -0.050000, y: 0.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + Tweak_N25: + typeIdx: 9 + value: + id: f9cdd2df-a667-4be8-a3ca-a5b07c103b0e + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N25BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N25Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N25Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N25UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N64: + typeIdx: 1 + value: 1.420000 + Tweak_N66: + typeIdx: 1 + value: 2.130000 + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 1.000000, y: 0.988235, z: 0.000000, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.470000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.600000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat.meta new file mode 100644 index 00000000..4a4498b9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_plastic_03_logo.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! b5c1eccd-f8f6-45b8-9b78-3129cf89d0a2 + ImporterName: MaterialImporter + PrimaryAsset: ! b5c1eccd-f8f6-45b8-9b78-3129cf89d0a2 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat new file mode 100644 index 00000000..e8e30083 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 5677017c-ccf6-47df-a341-d2ded393f928 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.710000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: -0.150000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat.meta new file mode 100644 index 00000000..855b880c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + ImporterName: MaterialImporter + PrimaryAsset: ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat new file mode 100644 index 00000000..fbab466c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat @@ -0,0 +1,159 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6e39a140-f3af-49b9-a2c8-f399d24ec6ad +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - Tweak_N37 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N060: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Offset_N062: + typeIdx: 3 + value: {x: -0.050000, y: 0.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + Tweak_N25: + typeIdx: 9 + value: + id: 4ce82aa3-8e78-4e2c-b693-4224248bba87 + sampler: + filteringMode: Trilinear + wrapModeU: ClampToEdge + wrapModeV: ClampToEdge + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N25BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N25Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N25Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N25UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N64: + typeIdx: 1 + value: 2.080000 + Tweak_N66: + typeIdx: 1 + value: 1.900000 + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 1.000000, y: 0.964706, z: 0.933333, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.710000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: -0.150000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat.meta new file mode 100644 index 00000000..a12eb1f5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Rocket_white_logo.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 7fe04302-2264-4d1f-8d8f-92cbeaf46a51 + ImporterName: MaterialImporter + PrimaryAsset: ! 7fe04302-2264-4d1f-8d8f-92cbeaf46a51 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat new file mode 100644 index 00000000..a3ecebbd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 604c3a68-980a-4e1a-8905-090d9d3548af +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N003: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N013: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Rotation_N003: + typeIdx: 1 + value: 90.000000 + Port_Value2_N053: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N2: + typeIdx: 5 + value: {x: 0.078431, y: 0.176471, z: 0.572549, w: 1.000000} + Tweak_N6: + typeIdx: 9 + value: + id: 09760f3a-f73e-482b-a710-aeee74246f02 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N6BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N6Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N6UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N8: + typeIdx: 5 + value: {x: 0.078431, y: 0.176471, z: 0.572549, w: 1.000000} + Tweak_N9: + typeIdx: 5 + value: {x: 0.078431, y: 0.176471, z: 0.572549, w: 1.000000} + colorRatio: + typeIdx: 1 + value: 0.270000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + planet_refl_map: + typeIdx: 9 + value: + id: ac2798fc-6df2-44d0-8d4e-871d24cccc4d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + planet_refl_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + planet_refl_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + planet_refl_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + reflIntensity: + typeIdx: 1 + value: 0.490000 + Pass: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + RTCaster: false + RTReceiver: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat.meta new file mode 100644 index 00000000..820e38c5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Materials/Objects/SIK_Satellite_blue.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 09db06bf-3b9e-41dd-b6a0-a7da122ffade + ImporterName: MaterialImporter + PrimaryAsset: ! 09db06bf-3b9e-41dd-b6a0-a7da122ffade + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx new file mode 100644 index 00000000..15124177 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34d5d501702f820221cdf49ddd1f6ae37a77ca779d13d1e520ee2de6a0413bc2 +size 34108 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx.meta new file mode 100644 index 00000000..b4df00a5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/Bases.fbx.meta @@ -0,0 +1,190 @@ +- ! + ImportedAssetIds: + .hidden/Lightbake.001: ! 207bfbbd-e402-46f2-ae52-284f33453580 + .hidden/white: ! 320ace7d-8386-4873-899c-e9d9aad90e7d + Materials/Lightbake.001: ! 23811c3a-1bdb-4936-a76c-95ecf6af2238 + Materials/Lightbake.001|Lightbake.001|GraphPassInfo: ! 7fbc0d19-6558-42d8-b453-b7e40d89c5c4 + Meshes/Circular: ! e7bb3308-12a7-4fa8-93b1-14b414b79f5a + Meshes/Cubic_01: ! 5c4facb7-b6bc-44b0-9a87-60357c267787 + Meshes/Hexagon_01: ! 77876113-6295-4e1f-8432-ae02f8f4c0bd + Scene: ! fc6400ab-da4a-4a59-b7a8-12fdc27c0ee1 + _3DSceneImportRoot_0|: ! 1f40283b-7a57-4cc8-85e4-8ed26c479b88 + _3DSceneImportRoot_0|_Circular_2|: ! 29515ae1-635c-4c8c-a23c-ca6c8bf06f1d + _3DSceneImportRoot_0|_Circular_2|_RenderMeshVisual_0|: ! c401d9a7-87b9-48bd-b0a1-ca2232982975 + _3DSceneImportRoot_0|_Cubic_01_1|: ! ec53a26e-befd-4078-a9f3-d060b8d2e25f + _3DSceneImportRoot_0|_Cubic_01_1|_RenderMeshVisual_0|: ! f434af13-ea27-4b68-b972-311b3f1698f4 + _3DSceneImportRoot_0|_Hexagon_01_0|: ! ec51aecd-f34c-4faf-b718-2973f5d496e6 + _3DSceneImportRoot_0|_Hexagon_01_0|_RenderMeshVisual_0|: ! 26f04bda-9517-4535-84c0-48e8c65a32f8 + ImporterName: FbxImporter + PrimaryAsset: ! fc6400ab-da4a-4a59-b7a8-12fdc27c0ee1 + PackageType: LegacyPackage + PackagePolicy: CanBeUnpacked + AssetDataMap: + Scene: ! 02b4419f-46fc-4a73-8207-b7941db0c8db + DependentFiles: + [] + ImporterSettings: ! + UseLegacyImporter: false + WithMaterials: true + NamingConvention: ByCategory + AnimationCurveOptimization: true + CustomAnimationSamplingRate: 30.000000 + ImportVertexColor: true + ImportTangentsAndBinormals: true + RegenerateTangentsAndBinormals: false + RegenerateNormalsForSkinnedMeshes: true + ImportBlendShapeAnimation: true + ImportVertexAnimation: true + GeneratePivots: true + TriangulateNURBS: true + UseLegacyFbxLoader: false + PersistentIdGenerationAlgorithm: Legacy + CompressionSettings: ! + Presets: + None Compression: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtensionMappings: + mesh: None Compression + Overrides: + {} + ExtraData: + {} +- ! + SourceRemaps: + - 1f40283b-7a57-4cc8-85e4-8ed26c479b88: 3435bba3-9017-42aa-a9db-452defe0ece9 + - 26f04bda-9517-4535-84c0-48e8c65a32f8: 4bbd1b06-ed9d-4bfb-9306-75cdc611c26b + - 29515ae1-635c-4c8c-a23c-ca6c8bf06f1d: eca65803-44ed-41e8-b8ad-4406b9f5fdd1 + - c401d9a7-87b9-48bd-b0a1-ca2232982975: 0b78386f-20e0-494c-81e1-f54f51ce8c9a + - ec51aecd-f34c-4faf-b718-2973f5d496e6: 2846c39a-ce8f-4609-883a-78b8550fe917 + - ec53a26e-befd-4078-a9f3-d060b8d2e25f: 256830c8-3590-41f5-9817-1b29040fda5a + - f434af13-ea27-4b68-b972-311b3f1698f4: 31f004b6-648c-4802-82a8-8ce1e080d833 + SourceState: ! 3cd6a850-30c3-4201-903a-d414c6441ff3 +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 23811c3a-1bdb-4936-a76c-95ecf6af2238 + Mesh: ! e7bb3308-12a7-4fa8-93b1-14b414b79f5a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Cubic_01 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 31f004b6-648c-4802-82a8-8ce1e080d833 +- ! + PrefabRemaps: + [] + Name: Hexagon_01 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4bbd1b06-ed9d-4bfb-9306-75cdc611c26b +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 23811c3a-1bdb-4936-a76c-95ecf6af2238 + Mesh: ! 5c4facb7-b6bc-44b0-9a87-60357c267787 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Bases + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2846c39a-ce8f-4609-883a-78b8550fe917 + - ! 256830c8-3590-41f5-9817-1b29040fda5a + - ! eca65803-44ed-41e8-b8ad-4406b9f5fdd1 + Components: + [] +- ! + PackagePath: "" + objects: + - ! 3435bba3-9017-42aa-a9db-452defe0ece9 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 23811c3a-1bdb-4936-a76c-95ecf6af2238 + Mesh: ! 77876113-6295-4e1f-8432-ae02f8f4c0bd + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Circular + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0b78386f-20e0-494c-81e1-f54f51ce8c9a diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx new file mode 100644 index 00000000..eb095f1e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f57676d0c8f0a6a09a876581642f5b67bc0a1c55a2ae44c6894ffc3fd4d88e31 +size 803660 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx.meta new file mode 100644 index 00000000..57190a9a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Meshes/SIK_Rockets.fbx.meta @@ -0,0 +1,945 @@ +- ! + ImportedAssetIds: + Meshes/Meteor: ! 9ab42643-fa56-4906-8dc6-c9cb4b53034f + Meshes/Planet: ! eb9c4a4a-8795-4ce9-9f28-3fa5870debeb + Meshes/Planet1: ! 7ba378bf-39c6-4345-acbf-9e09fff8deaa + Meshes/Rocket_01_bottom: ! b705f36d-9e18-4fda-b94f-067b9ab34ee0 + Meshes/Rocket_01_bottom1: ! 0bd54fec-e05b-4bcb-9c1e-eec19e3d3063 + Meshes/Rocket_01_bottom2: ! 88f899e7-9590-4dee-964f-ce40a022f07a + Meshes/Rocket_01_bottom3: ! 7b07b906-5237-4aba-bd64-8ca9d8e1c9fc + Meshes/Rocket_01_middle: ! 146f6e8f-d5d8-4f37-a364-f5fd53e7ffd4 + Meshes/Rocket_01_middle1: ! e833bcb6-6e61-4630-a40f-854c64276405 + Meshes/Rocket_01_middle2: ! 06a41d56-e716-4015-b950-8778506335af + Meshes/Rocket_01_top: ! 3dae7dac-7880-46bf-89ee-c5b255a34762 + Meshes/Rocket_01_top1: ! 1b2f6a59-990e-4833-baac-c0cbe117c66d + Meshes/Rocket_02_bottom: ! d939f3b0-8db9-4798-9298-7f08066b3614 + Meshes/Rocket_02_middle: ! 60984803-0479-49fb-8ace-87319126e843 + Meshes/Rocket_02_top: ! 86d6eeb7-1007-4ff6-958f-5bbfa5bab327 + Meshes/Rocket_03_bottom: ! 6df66694-4b1b-4e96-a8a0-0d6e2723bd7e + Meshes/Rocket_03_bottom1: ! a47982fc-9d96-484f-aa08-39c865a8b2be + Meshes/Rocket_03_bottom2: ! 62f26ce0-c005-4d10-9699-e72cffedf047 + Meshes/Rocket_03_bottom3: ! 0ff4db03-95f6-4b2d-9ea6-5439799edf59 + Meshes/Rocket_03_bottom4: ! 4d3be133-9482-45ce-a384-fddf87f4ac0b + Meshes/Rocket_03_middle: ! 7fbd5be2-a226-4326-b016-577f61c9a2b8 + Meshes/Rocket_03_top: ! 1c95cf09-b15f-4723-9825-f1661a5148f2 + Meshes/Rocket_03_top1: ! 94f8a9c7-d77e-47af-8528-0a63dc9a861e + Meshes/Rocket_03_top2: ! 7009f208-56d4-42c2-bc1e-c77857d5553c + Meshes/Satellite: ! 18828ccb-4865-4bf5-b7c5-fdec9ae7650e + Meshes/Satellite1: ! dfb8556d-a943-41b2-a69f-1a525c358172 + Meshes/Satellite2: ! d5389096-6ff6-4687-a39d-88838ca6ce61 + Meshes/Satellite3: ! 41ed7fd3-6772-4318-9758-7be2e92a7d59 + Scene: ! be15cf62-da40-4035-a7ff-fe43fd2082d8 + _3DSceneImportRoot_0|: ! 3dbf7af0-e736-465d-aa58-360cda287ca3 + _3DSceneImportRoot_0|_Meteor_0|: ! d6b2cacd-6acc-4f9c-b1cb-29036b713207 + _3DSceneImportRoot_0|_Meteor_0|_RenderMeshVisual_0|: ! 67d27210-b8b3-4d55-aa41-89e03596c2ba + _3DSceneImportRoot_0|_Planet_11|: ! 51e4d7d3-0b6c-45ed-b3cf-8b0889b91d42 + _3DSceneImportRoot_0|_Planet_11|_RenderMeshVisual_0|: ! a22fef0b-a66f-4b47-930e-2695a65d2014 + _3DSceneImportRoot_0|_Planet_11|_RenderMeshVisual_1|: ! a28b3010-8906-4fc7-b15a-eb2616d32331 + _3DSceneImportRoot_0|_Rocket_01_bottom_8|: ! 57356883-01b7-4a3b-87b8-564ad04f0802 + _3DSceneImportRoot_0|_Rocket_01_bottom_8|_RenderMeshVisual_0|: ! 59854f3d-602f-41f0-b822-620883d7107c + _3DSceneImportRoot_0|_Rocket_01_bottom_8|_RenderMeshVisual_1|: ! 924c2710-902d-47f0-a3db-0e2163fcd23c + _3DSceneImportRoot_0|_Rocket_01_bottom_8|_RenderMeshVisual_2|: ! e8444479-0c8d-4a48-99f2-99ad1d044674 + _3DSceneImportRoot_0|_Rocket_01_bottom_8|_RenderMeshVisual_3|: ! 8eaa543a-a5c2-4088-9c77-56a7ab596789 + _3DSceneImportRoot_0|_Rocket_01_middle_7|: ! f703209b-efed-46fe-a501-00fc192f2c4b + _3DSceneImportRoot_0|_Rocket_01_middle_7|_RenderMeshVisual_0|: ! 67496b2d-219e-4ac6-b0b3-15011c089160 + _3DSceneImportRoot_0|_Rocket_01_middle_7|_RenderMeshVisual_1|: ! 95aff8e1-edab-44a6-93c1-63fc7733b35b + _3DSceneImportRoot_0|_Rocket_01_middle_7|_RenderMeshVisual_2|: ! a089e947-01e6-486a-aaa7-43f03152b6d4 + _3DSceneImportRoot_0|_Rocket_01_top_9|: ! 879107ea-c632-4916-9971-463c06c86428 + _3DSceneImportRoot_0|_Rocket_01_top_9|_RenderMeshVisual_0|: ! 21b0bbc5-aab5-47fb-8f75-f060d9b71de8 + _3DSceneImportRoot_0|_Rocket_01_top_9|_RenderMeshVisual_1|: ! 5162cfba-6d7b-457d-87e4-37ec2ec55599 + _3DSceneImportRoot_0|_Rocket_02_bottom_4|: ! 0ee3cfc8-734b-478c-8f5e-8d77abb21e34 + _3DSceneImportRoot_0|_Rocket_02_bottom_4|_RenderMeshVisual_0|: ! 0f1a46c4-480e-4acc-b7bb-84e70d871ee6 + _3DSceneImportRoot_0|_Rocket_02_middle_5|: ! 8a2d5bbf-eddf-46c4-84af-247413ad5c6f + _3DSceneImportRoot_0|_Rocket_02_middle_5|_RenderMeshVisual_0|: ! 904323d2-ddb4-49e1-bc0a-06f50ac28c18 + _3DSceneImportRoot_0|_Rocket_02_top_6|: ! 9f9cd066-8e78-4202-a90b-fd958ec55f49 + _3DSceneImportRoot_0|_Rocket_02_top_6|_RenderMeshVisual_0|: ! 02ed6fe8-aa6d-44c1-93a2-8ab03be182b8 + _3DSceneImportRoot_0|_Rocket_03_bottom_2|: ! 828a3f04-b949-41d2-9d11-f000e7a9391b + _3DSceneImportRoot_0|_Rocket_03_bottom_2|_RenderMeshVisual_0|: ! d795b32d-208d-4a52-8c41-c5d8b022d548 + _3DSceneImportRoot_0|_Rocket_03_bottom_2|_RenderMeshVisual_1|: ! 91d650a5-6af8-4d3a-83fd-0385034c1a80 + _3DSceneImportRoot_0|_Rocket_03_bottom_2|_RenderMeshVisual_2|: ! cb64ed46-703b-4441-b62b-aa96e7441bef + _3DSceneImportRoot_0|_Rocket_03_bottom_2|_RenderMeshVisual_3|: ! 21c7fc78-6819-41fe-8c77-05753762edf6 + _3DSceneImportRoot_0|_Rocket_03_bottom_2|_RenderMeshVisual_4|: ! 2b8f8952-236d-44b9-8d92-a96fa345fbc4 + _3DSceneImportRoot_0|_Rocket_03_middle_3|: ! 858fb21c-1346-4590-9621-d1f1d53b4662 + _3DSceneImportRoot_0|_Rocket_03_middle_3|_RenderMeshVisual_0|: ! 604a6623-ba9f-4f23-b25a-fb0e4e74adf9 + _3DSceneImportRoot_0|_Rocket_03_top_1|: ! 6614f18e-e041-466e-8cfc-bb4deefe3ec0 + _3DSceneImportRoot_0|_Rocket_03_top_1|_RenderMeshVisual_0|: ! 5fd29402-9dd0-4de7-b072-4e253ae50dc0 + _3DSceneImportRoot_0|_Rocket_03_top_1|_RenderMeshVisual_1|: ! a9344fc5-fa94-422e-8c38-17d859173692 + _3DSceneImportRoot_0|_Rocket_03_top_1|_RenderMeshVisual_2|: ! 04444faa-e3e9-4e17-a510-5e290b1dc6ab + _3DSceneImportRoot_0|_Satellite_10|: ! 721a1148-6adc-4c9b-8c22-e2b65181817a + _3DSceneImportRoot_0|_Satellite_10|_RenderMeshVisual_0|: ! 46e9bc77-a71b-44ce-8c03-fdc6b6502581 + _3DSceneImportRoot_0|_Satellite_10|_RenderMeshVisual_1|: ! 7f63c4aa-e873-440b-82c6-2c1a053bd771 + _3DSceneImportRoot_0|_Satellite_10|_RenderMeshVisual_2|: ! 95d1df9a-24d4-4c6b-840d-e9d2d9be856b + _3DSceneImportRoot_0|_Satellite_10|_RenderMeshVisual_3|: ! 32c0d1ff-143a-49ab-8241-70c1e0eb0221 + ImporterName: FbxImporter + PrimaryAsset: ! be15cf62-da40-4035-a7ff-fe43fd2082d8 + PackageType: LegacyPackage + PackagePolicy: CanBeUnpacked + AssetDataMap: + Scene: ! 2536ef34-9dae-47c6-a7e3-febf31a85b31 + DependentFiles: + [] + ImporterSettings: ! + UseLegacyImporter: false + WithMaterials: false + NamingConvention: ByCategory + AnimationCurveOptimization: true + CustomAnimationSamplingRate: 30.000000 + ImportVertexColor: true + ImportTangentsAndBinormals: true + RegenerateTangentsAndBinormals: false + RegenerateNormalsForSkinnedMeshes: false + ImportBlendShapeAnimation: true + ImportVertexAnimation: true + GeneratePivots: true + TriangulateNURBS: true + UseLegacyFbxLoader: false + PersistentIdGenerationAlgorithm: Legacy + CompressionSettings: ! + Presets: + None Compression: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + Performance Compression: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtensionMappings: + mesh: None Compression + jpg: Performance Compression + Overrides: + {} + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_17 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 05e0dba6-c028-4097-8b6c-57a2cbfb9cc4 + Mesh: ! 0bd54fec-e05b-4bcb-9c1e-eec19e3d3063 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: SIK_Rockets + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 92f85e29-20a5-4382-8387-d63a0769ee0f + - ! 3372b332-9e7e-49cf-97f0-fb1cf909276d + - ! 2234d4da-017d-4049-8089-7c43cf5f1950 + - ! eeac80db-518a-45bf-9dfe-5237edc8c532 + - ! ecedabbd-cc6c-4468-a657-a8a4037d6bc2 + - ! 85788fcd-c56c-4dce-8188-35ac689ca3e6 + - ! 9622859b-1cb7-49b5-9319-7bb4983ee19b + - ! 9e38680b-544e-4376-b137-7ce4341ba16f + - ! 95ffd9ce-cbc1-4af7-8118-b3956674aacb + - ! aa757a1c-a887-4cdc-a602-cec273c1eb48 + - ! ca726ab7-404e-4818-8fc0-0778d27bede8 + - ! ae16b9a2-2f91-4ba7-9343-cbfebfe3c70c + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_15 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 23e54b3f-d19f-460b-a175-04aeaaf6a8fd + Mesh: ! 06a41d56-e716-4015-b950-8778506335af + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_23 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 6eff5bc7-5581-4a49-b7c0-75132215b602 + Mesh: ! dfb8556d-a943-41b2-a69f-1a525c358172 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Rocket_03_bottom + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! feae2640-5d34-4eb6-830f-7f600230f3e6 + - ! 6f6fbb06-ebfb-42cb-a6c2-53a0ba83d6e9 + - ! bfa3d898-8d50-4cd2-a9d7-31027b08aa17 + - ! 4a20604f-7423-4379-8e76-d27200882121 + - ! 445934e1-b0fa-422a-8d0b-5e31c8c2d90b +- ! + SourceRemaps: + - 02ed6fe8-aa6d-44c1-93a2-8ab03be182b8: 4d38c146-ef19-406e-91b8-fd4fc86560d0 + - 04444faa-e3e9-4e17-a510-5e290b1dc6ab: cce6c217-2948-4dff-a636-df2a5ea47eac + - 0ee3cfc8-734b-478c-8f5e-8d77abb21e34: ecedabbd-cc6c-4468-a657-a8a4037d6bc2 + - 0f1a46c4-480e-4acc-b7bb-84e70d871ee6: cbe9872a-c8e2-436f-9cf5-fbea58cb0f9f + - 21b0bbc5-aab5-47fb-8f75-f060d9b71de8: c60e4453-bec1-43c6-86ba-dde1dec6f193 + - 21c7fc78-6819-41fe-8c77-05753762edf6: 4a20604f-7423-4379-8e76-d27200882121 + - 2b8f8952-236d-44b9-8d92-a96fa345fbc4: 445934e1-b0fa-422a-8d0b-5e31c8c2d90b + - 32c0d1ff-143a-49ab-8241-70c1e0eb0221: b61b7861-3bdb-4790-a9b9-0488d7c48f29 + - 3dbf7af0-e736-465d-aa58-360cda287ca3: 0544d1d6-f8fc-4f44-aad6-9ab4f8ab1702 + - 46e9bc77-a71b-44ce-8c03-fdc6b6502581: 7e1fe566-0e3f-44b0-b3f8-79732db160e4 + - 5162cfba-6d7b-457d-87e4-37ec2ec55599: f1a0eaad-7591-4b2f-a371-48092df5fa74 + - 51e4d7d3-0b6c-45ed-b3cf-8b0889b91d42: ae16b9a2-2f91-4ba7-9343-cbfebfe3c70c + - 57356883-01b7-4a3b-87b8-564ad04f0802: 95ffd9ce-cbc1-4af7-8118-b3956674aacb + - 59854f3d-602f-41f0-b822-620883d7107c: 31403b7e-9e11-44f6-9a37-e683c410754c + - 5fd29402-9dd0-4de7-b072-4e253ae50dc0: 44442efa-ef72-447c-ab84-9c468c6379f2 + - 604a6623-ba9f-4f23-b25a-fb0e4e74adf9: 3642b691-e478-43ed-b691-e53cc7fca830 + - 6614f18e-e041-466e-8cfc-bb4deefe3ec0: 3372b332-9e7e-49cf-97f0-fb1cf909276d + - 67496b2d-219e-4ac6-b0b3-15011c089160: 56a700ce-8391-437f-8506-4f715e336a4e + - 67d27210-b8b3-4d55-aa41-89e03596c2ba: 6515d2e8-da80-45c0-a9d2-60d15ad236db + - 721a1148-6adc-4c9b-8c22-e2b65181817a: ca726ab7-404e-4818-8fc0-0778d27bede8 + - 7f63c4aa-e873-440b-82c6-2c1a053bd771: 2220a9ae-312a-41a6-aa71-751c484053de + - 828a3f04-b949-41d2-9d11-f000e7a9391b: 2234d4da-017d-4049-8089-7c43cf5f1950 + - 858fb21c-1346-4590-9621-d1f1d53b4662: eeac80db-518a-45bf-9dfe-5237edc8c532 + - 879107ea-c632-4916-9971-463c06c86428: aa757a1c-a887-4cdc-a602-cec273c1eb48 + - 8a2d5bbf-eddf-46c4-84af-247413ad5c6f: 85788fcd-c56c-4dce-8188-35ac689ca3e6 + - 8eaa543a-a5c2-4088-9c77-56a7ab596789: 7a6ab9ea-08ef-4d25-9f86-85cd7c69d1d6 + - 904323d2-ddb4-49e1-bc0a-06f50ac28c18: 77aa6353-fd86-4f2b-ab72-0a22d482a881 + - 91d650a5-6af8-4d3a-83fd-0385034c1a80: 6f6fbb06-ebfb-42cb-a6c2-53a0ba83d6e9 + - 924c2710-902d-47f0-a3db-0e2163fcd23c: 0174d32e-c1ae-46fe-a41d-82305f059d4c + - 95aff8e1-edab-44a6-93c1-63fc7733b35b: 6c2f37ab-ee49-4258-9cd7-9f7466d49c61 + - 95d1df9a-24d4-4c6b-840d-e9d2d9be856b: 3639160b-0aca-4cfc-812c-573463485649 + - 9f9cd066-8e78-4202-a90b-fd958ec55f49: 9622859b-1cb7-49b5-9319-7bb4983ee19b + - a089e947-01e6-486a-aaa7-43f03152b6d4: 213e3af4-4af7-469a-adde-b8c538cdf45a + - a22fef0b-a66f-4b47-930e-2695a65d2014: d0468651-8231-459d-8868-09495f6eb2bc + - a28b3010-8906-4fc7-b15a-eb2616d32331: 81412365-ea21-4e34-96a9-251673a93850 + - a9344fc5-fa94-422e-8c38-17d859173692: de672627-e11b-4878-a1b4-8b9484705fe7 + - be15cf62-da40-4035-a7ff-fe43fd2082d8: 7afd7b4d-3539-453d-8d79-8fbd037156bc + - cb64ed46-703b-4441-b62b-aa96e7441bef: bfa3d898-8d50-4cd2-a9d7-31027b08aa17 + - d6b2cacd-6acc-4f9c-b1cb-29036b713207: 92f85e29-20a5-4382-8387-d63a0769ee0f + - d795b32d-208d-4a52-8c41-c5d8b022d548: feae2640-5d34-4eb6-830f-7f600230f3e6 + - e8444479-0c8d-4a48-99f2-99ad1d044674: e225ba80-c10d-47ab-a63a-b043adbd2a74 + - f703209b-efed-46fe-a501-00fc192f2c4b: 9e38680b-544e-4376-b137-7ce4341ba16f + SourceState: ! 7afd7b4d-3539-453d-8d79-8fbd037156bc +- ! + PrefabRemaps: + [] + Name: component_16 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 6eff5bc7-5581-4a49-b7c0-75132215b602 + Mesh: ! b705f36d-9e18-4fda-b94f-067b9ab34ee0 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Rocket_03_top + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 44442efa-ef72-447c-ab84-9c468c6379f2 + - ! de672627-e11b-4878-a1b4-8b9484705fe7 + - ! cce6c217-2948-4dff-a636-df2a5ea47eac +- ! + PrefabRemaps: + [] + Name: component_24 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! d3359299-a4db-4c03-a7bc-a64d4136a9f3 + Mesh: ! d5389096-6ff6-4687-a39d-88838ca6ce61 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_9 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 93707c6b-a2a2-4e53-b029-d45186d5afa9 + Mesh: ! 7fbd5be2-a226-4326-b016-577f61c9a2b8 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 93707c6b-a2a2-4e53-b029-d45186d5afa9 + Mesh: ! 1c95cf09-b15f-4723-9825-f1661a5148f2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_8 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f170a514-5db3-4b97-9124-d338f81259fc + Mesh: ! 4d3be133-9482-45ce-a384-fddf87f4ac0b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_7 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f85cf635-c156-46d6-83f6-d6404fd2368d + Mesh: ! 0ff4db03-95f6-4b2d-9ea6-5439799edf59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_12 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + [] + Mesh: ! 86d6eeb7-1007-4ff6-958f-5bbfa5bab327 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_13 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 6eff5bc7-5581-4a49-b7c0-75132215b602 + Mesh: ! 146f6e8f-d5d8-4f37-a364-f5fd53e7ffd4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0a997bdd-20c6-419a-aaeb-b04c8dce4392 + Mesh: ! 9ab42643-fa56-4906-8dc6-c9cb4b53034f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_14 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 05e0dba6-c028-4097-8b6c-57a2cbfb9cc4 + Mesh: ! e833bcb6-6e61-4630-a40f-854c64276405 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_5 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0ca86bc0-7069-4166-a0e3-37223fd77d23 + Mesh: ! a47982fc-9d96-484f-aa08-39c865a8b2be + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_11 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + [] + Mesh: ! 60984803-0479-49fb-8ace-87319126e843 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_19 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bffee791-e07f-4cfc-b7df-0c862f647ed8 + Mesh: ! 7b07b906-5237-4aba-bd64-8ca9d8e1c9fc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PackagePath: "" + objects: + - ! 0544d1d6-f8fc-4f44-aad6-9ab4f8ab1702 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_22 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 93707c6b-a2a2-4e53-b029-d45186d5afa9 + Mesh: ! 18828ccb-4865-4bf5-b7c5-fdec9ae7650e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_27 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! a915bbfd-085c-4e00-873b-fdc526aa9d6d + Mesh: ! 7ba378bf-39c6-4345-acbf-9e09fff8deaa + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Rocket_02_middle + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 77aa6353-fd86-4f2b-ab72-0a22d482a881 +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.276116, y: -39.832081, z: 27.427725} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6515d2e8-da80-45c0-a9d2-60d15ad236db +- ! + PrefabRemaps: + [] + Name: Rocket_01_bottom + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 31403b7e-9e11-44f6-9a37-e683c410754c + - ! 0174d32e-c1ae-46fe-a41d-82305f059d4c + - ! e225ba80-c10d-47ab-a63a-b043adbd2a74 + - ! 7a6ab9ea-08ef-4d25-9f86-85cd7c69d1d6 +- ! + PrefabRemaps: + [] + Name: Rocket_02_top + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4d38c146-ef19-406e-91b8-fd4fc86560d0 +- ! + PrefabRemaps: + [] + Name: Rocket_01_middle + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 56a700ce-8391-437f-8506-4f715e336a4e + - ! 6c2f37ab-ee49-4258-9cd7-9f7466d49c61 + - ! 213e3af4-4af7-469a-adde-b8c538cdf45a +- ! + PrefabRemaps: + [] + Name: Rocket_01_top + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c60e4453-bec1-43c6-86ba-dde1dec6f193 + - ! f1a0eaad-7591-4b2f-a371-48092df5fa74 +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.276116, y: -39.832081, z: 27.427725} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d0468651-8231-459d-8868-09495f6eb2bc + - ! 81412365-ea21-4e34-96a9-251673a93850 +- ! + PrefabRemaps: + [] + Name: component_25 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 6a1b6163-f95b-45d0-bf18-4d6ae89adcbf + Mesh: ! 41ed7fd3-6772-4318-9758-7be2e92a7d59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_6 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 45d0e8c4-c422-48f3-b15e-fcd8f6eba7c8 + Mesh: ! 62f26ce0-c005-4d10-9699-e72cffedf047 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_20 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 6eff5bc7-5581-4a49-b7c0-75132215b602 + Mesh: ! 3dae7dac-7880-46bf-89ee-c5b255a34762 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.276116, y: -39.832081, z: 27.427725} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7e1fe566-0e3f-44b0-b3f8-79732db160e4 + - ! 2220a9ae-312a-41a6-aa71-751c484053de + - ! 3639160b-0aca-4cfc-812c-573463485649 + - ! b61b7861-3bdb-4790-a9b9-0488d7c48f29 +- ! + PrefabRemaps: + [] + Name: component_10 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + [] + Mesh: ! d939f3b0-8db9-4798-9298-7f08066b3614 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_3 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f0d53907-2cf0-42a3-bac1-15a502ea5cd2 + Mesh: ! 7009f208-56d4-42c2-bc1e-c77857d5553c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_26 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 51884309-d234-4f1d-bee3-d9bfee58509c + Mesh: ! eb9c4a4a-8795-4ce9-9f28-3fa5870debeb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 2232ee72-5e28-48e9-8b1c-6786afc3b55e + Mesh: ! 94f8a9c7-d77e-47af-8528-0a63dc9a861e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_18 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 79c4f925-18d3-41be-a07a-a6fdd8c4997c + Mesh: ! 88f899e7-9590-4dee-964f-ce40a022f07a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Rocket_02_bottom + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cbe9872a-c8e2-436f-9cf5-fbea58cb0f9f +- ! + PrefabRemaps: + [] + Name: Rocket_03_middle + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 100.000000, y: 100.000000, z: 100.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3642b691-e478-43ed-b691-e53cc7fca830 +- ! + PrefabRemaps: + [] + Name: component_21 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15d19f91-9149-4cd6-9915-290c73dbb461 + Mesh: ! 1b2f6a59-990e-4833-baac-c0cbe117c66d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_4 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 93707c6b-a2a2-4e53-b029-d45186d5afa9 + Mesh: ! 6df66694-4b1b-4e96-a8a0-0d6e2723bd7e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab new file mode 100644 index 00000000..3556de70 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab @@ -0,0 +1,41 @@ +- ! + PackagePath: "" + objects: + - ! 8f6a3f6f-c647-4c0c-b40e-942485ee1324 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7fe04302-2264-4d1f-8d8f-92cbeaf46a51 + Mesh: ! 7fbd5be2-a226-4326-b016-577f61c9a2b8 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Modern Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -1.228443, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7a893ddb-bf57-4471-ba25-a1e88c2f10fd diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab.meta new file mode 100644 index 00000000..40a34b00 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Body Tube.prefab.meta @@ -0,0 +1,62 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! a9931968-3294-457d-b5f4-67213a87aec0 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! a9931968-3294-457d-b5f4-67213a87aec0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 0b82626f-e864-4422-bbe9-c880eb84b2c6 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7fe04302-2264-4d1f-8d8f-92cbeaf46a51 + Mesh: ! 7fbd5be2-a226-4326-b016-577f61c9a2b8 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 7a893ddb-bf57-4471-ba25-a1e88c2f10fd: 0772ec44-08f4-436f-a44d-f5c0ef3c75fd + - 8f6a3f6f-c647-4c0c-b40e-942485ee1324: 9cf844de-671b-4344-ac82-6d109d82dd2a + SourceState: ! e9559767-f6da-4f6c-a34f-8f004b7d7d55 +- ! + PrefabRemaps: + [] + Name: Modern Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 13.478287, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0772ec44-08f4-436f-a44d-f5c0ef3c75fd +- ! + PackagePath: "" + objects: + - ! 9cf844de-671b-4344-ac82-6d109d82dd2a + LazyLoading: false + RetainAssets: true diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab new file mode 100644 index 00000000..214cc632 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab @@ -0,0 +1,654 @@ +- ! + PackagePath: "" + objects: + - ! 6a414e96-11ae-4fe2-a376-cf8e4425e4d0 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 4 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.570652, y: -4.893984, z: 0.131076} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! ec9d0fbf-5f53-416a-8ab2-91a3048acf43 + Components: + [] +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! b0e256ea-d856-487a-8f40-6ba6555a3d89 + Components: + - ! f7fc48d0-d40b-41a2-a264-0b7f4385766c + - ! 7ae8f441-c49f-4852-884c-ff90a24d7e4d +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 6df66694-4b1b-4e96-a8a0-0d6e2723bd7e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b752c41e-b2db-4e93-b562-23d05e916d79 + Mesh: ! 0ff4db03-95f6-4b2d-9ea6-5439799edf59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9e34582c-f54f-4423-a72e-5f521a8f816a + Mesh: ! 4d3be133-9482-45ce-a384-fddf87f4ac0b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 62f26ce0-c005-4d10-9699-e72cffedf047 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.500722, y: -4.893984, z: -0.020199} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! c69c4fd1-9af4-41a9-be84-17a9f10c1ab5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Modern Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a683f797-86cf-4f9a-b9e0-8d750520ce0c + - ! a61e485f-0c00-4181-a5cf-4f9ad3a0e0a1 + - ! b389d894-14d1-4009-9612-ef4d2fff5fb5 + - ! cb664491-f357-4064-b4bd-87bb1e13876f + - ! 8415fe38-925a-4d1f-9190-3d8b564b105c + - ! b79e8875-e5c4-4fcd-8de0-e835ee844b7d + - ! 655f027b-7299-450d-936e-e51eb1786764 + - ! 1d1fbab3-ca08-42c6-8a5e-397bee76e25f + Components: + - ! 3bc37a77-b2d1-4440-999f-436262651c28 + - ! 6a99906b-1e40-46d3-bb24-793658f9fc1b + - ! 52a98b5d-31c3-48ac-ae32-f639447226b0 + - ! 3efddc10-ac21-4d20-8105-ffb48b553ff2 + - ! 4936a38a-8756-4b76-a4c4-f9079b29db7c + - ! ee646eb6-04aa-4666-af60-a50e9a94961a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! a47982fc-9d96-484f-aa08-39c865a8b2be + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.048480, y: -4.893984, z: 6.339403} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! 29cde2ae-a564-461d-80cd-96592dc6c04a + Components: + [] +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.021074, y: -0.043960, z: -0.100001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dc53c6b6-40f1-47da-9cb9-c74dda95b8fe +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.053362, y: -0.069726, z: -0.158992} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 41d7f626-d480-4b6f-8670-9a553454248f +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.784941, z: -6.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 86e929cb-3a4e-42b3-9c92-ab356b888002 +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.784941, z: 6.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f6bf520c-6834-4e5d-91e6-4ff4bd9ca34e +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.006524, y: -0.077701, z: -0.157105} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 81db6b26-56be-4112-8e2a-aba5adc19a67 +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.000000, y: -4.784941, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6f5cc554-34f0-42c2-b890-5467db26e908 +- ! + PrefabRemaps: + [] + Name: engine_exhaust 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.033565, y: -4.893984, z: -6.371538} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! d97db941-6c09-4766-88b2-5067605c214d + Components: + [] +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 975c1f2d-ced5-4011-a48b-af800814a0e9 + Components: + - ! 7c18e549-1212-4df6-830f-46c6ab694d47 + - ! 933c5c0b-13e8-465c-8dd6-96d4e7a37476 +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 4 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.000000, y: -4.784941, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d589a082-14d2-4259-a71c-9b6f421d3d3e +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 9eeeb8e3-2b53-4d5b-9f36-6981f2f76afa + Components: + - ! dbb41444-3acd-4e0d-8775-1dc80123b8e4 + - ! d212dd29-662c-4265-bb9f-06d4338b3d37 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! f963300f-7efd-4b9c-97e5-26cca9b08405 + Components: + - ! 2d181510-55cc-4c35-8ce3-f03ee214e5e0 + - ! d837a9dd-3e8e-45a4-85c9-1b2a3571bdfb +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 8415fe38-925a-4d1f-9190-3d8b564b105c + - ! b79e8875-e5c4-4fcd-8de0-e835ee844b7d + - ! 655f027b-7299-450d-936e-e51eb1786764 + - ! 1d1fbab3-ca08-42c6-8a5e-397bee76e25f + smokes: ! + - ! a683f797-86cf-4f9a-b9e0-8d750520ce0c + - ! a61e485f-0c00-4181-a5cf-4f9ad3a0e0a1 + - ! b389d894-14d1-4009-9612-ef4d2fff5fb5 + - ! cb664491-f357-4064-b4bd-87bb1e13876f + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.029452, y: -0.099991, z: -0.213263} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1378f917-7ea8-4d20-b230-fa882d723f22 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab.meta new file mode 100644 index 00000000..de04edf9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Fins.prefab.meta @@ -0,0 +1,712 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! f1f20f41-b943-4d16-9ec2-8b3047cfe6fc + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! f1f20f41-b943-4d16-9ec2-8b3047cfe6fc + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! d39dc06b-625d-49c4-b1e5-9f1ba3c23950 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: Modern Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3a3946a3-1092-4365-a633-ed5796f04705 + - ! 4651f2f2-0ceb-4b40-973d-f96684f31d8d + - ! c6c79bbc-2530-49bf-8720-6b1cb669bda1 + - ! 3d52f4d6-8617-4a0c-923e-26f54ab9a14e + - ! 6aee9490-2297-4d42-a273-a633b923a0bb + - ! 64104d79-91a2-4bb5-bf9f-9b8f3af35620 + - ! 19fba4f1-7787-488c-b9ef-85f4457877f6 + - ! 3ec3170b-2020-4a6d-921f-1967f0e104fd + Components: + - ! c90d11d2-a1f0-4511-944d-ea55143cb0d5 + - ! 90c727c9-1c72-4238-b0c8-56830d833043 + - ! 193ffe49-fa06-4ffa-a0f7-15cca06d2ab2 + - ! 903abc59-0dca-491d-b14e-df36b9be979d + - ! 1aa6367a-fa37-4b18-953a-f1d09209fe5c + - ! b3b24391-0bbd-4cf8-bef0-4dc6ed8bb0b9 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 62f26ce0-c005-4d10-9699-e72cffedf047 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.500722, y: -4.893984, z: -0.020199} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! 73d7feca-582f-446a-8c9a-424779afe0fb + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9e34582c-f54f-4423-a72e-5f521a8f816a + Mesh: ! 4d3be133-9482-45ce-a384-fddf87f4ac0b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.021074, y: -0.043960, z: -0.100001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 22a4d103-3a26-4ecc-b7a9-9a5093781792 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.784941, z: 6.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ce425b9b-8085-42af-a6da-7557c513603d +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 4 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.000000, y: -4.784941, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 87be2263-f63b-4d9d-8d55-6e0d6b50352b +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: engine_exhaust 4 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.570652, y: -4.893984, z: 0.131076} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! ffee1684-189d-43ca-8d0f-e66c04a244ce + Components: + [] +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.029452, y: -0.099991, z: -0.213263} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 32989093-2dda-4907-a5fb-06474707fb1b +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.784941, z: -6.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3e9f04d0-4118-4e2c-ab41-7b0c4ee2b1c2 +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.033565, y: -4.893984, z: -6.371538} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! d4a5db2a-c4ac-456e-8366-91edd3b63362 + Components: + [] +- ! + PrefabRemaps: + [] + Name: engine_exhaust 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.048480, y: -4.893984, z: 6.339403} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! f4c67535-4a87-4bbc-875d-4b985bcb837e + Components: + [] +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 1bc76175-9401-476b-940d-b637f5ea9901 + Components: + - ! d03666fc-dcf4-4547-b369-dfbb9f2e13c3 + - ! 61ae1ba7-44be-4566-b87b-bf92d20ba4f0 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.053362, y: -0.069726, z: -0.158992} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d2efed71-86a5-4461-b563-b284259ce0bb +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b752c41e-b2db-4e93-b562-23d05e916d79 + Mesh: ! 0ff4db03-95f6-4b2d-9ea6-5439799edf59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! a47982fc-9d96-484f-aa08-39c865a8b2be + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 6aee9490-2297-4d42-a273-a633b923a0bb + - ! 64104d79-91a2-4bb5-bf9f-9b8f3af35620 + - ! 19fba4f1-7787-488c-b9ef-85f4457877f6 + - ! 3ec3170b-2020-4a6d-921f-1967f0e104fd + smokes: ! + - ! 3a3946a3-1092-4365-a633-ed5796f04705 + - ! 4651f2f2-0ceb-4b40-973d-f96684f31d8d + - ! c6c79bbc-2530-49bf-8720-6b1cb669bda1 + - ! 3d52f4d6-8617-4a0c-923e-26f54ab9a14e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.000000, y: -4.784941, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b490c889-6d48-454c-8f92-aa19b37eb607 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 6df66694-4b1b-4e96-a8a0-0d6e2723bd7e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 1378f917-7ea8-4d20-b230-fa882d723f22: 32989093-2dda-4907-a5fb-06474707fb1b + - 1d1fbab3-ca08-42c6-8a5e-397bee76e25f: 3ec3170b-2020-4a6d-921f-1967f0e104fd + - 29cde2ae-a564-461d-80cd-96592dc6c04a: f4c67535-4a87-4bbc-875d-4b985bcb837e + - 2d181510-55cc-4c35-8ce3-f03ee214e5e0: c50b91f1-fb44-44bb-acd7-3eb380f3e03f + - 3bc37a77-b2d1-4440-999f-436262651c28: c90d11d2-a1f0-4511-944d-ea55143cb0d5 + - 3efddc10-ac21-4d20-8105-ffb48b553ff2: 903abc59-0dca-491d-b14e-df36b9be979d + - 41d7f626-d480-4b6f-8670-9a553454248f: d2efed71-86a5-4461-b563-b284259ce0bb + - 4936a38a-8756-4b76-a4c4-f9079b29db7c: 1aa6367a-fa37-4b18-953a-f1d09209fe5c + - 52a98b5d-31c3-48ac-ae32-f639447226b0: 193ffe49-fa06-4ffa-a0f7-15cca06d2ab2 + - 655f027b-7299-450d-936e-e51eb1786764: 19fba4f1-7787-488c-b9ef-85f4457877f6 + - 6a414e96-11ae-4fe2-a376-cf8e4425e4d0: 179da1df-fb2b-428e-afeb-60471d098c23 + - 6a99906b-1e40-46d3-bb24-793658f9fc1b: 90c727c9-1c72-4238-b0c8-56830d833043 + - 6f5cc554-34f0-42c2-b890-5467db26e908: b490c889-6d48-454c-8f92-aa19b37eb607 + - 7ae8f441-c49f-4852-884c-ff90a24d7e4d: 59e65071-a7ac-40fb-8937-dd2c145aee10 + - 7c18e549-1212-4df6-830f-46c6ab694d47: d03666fc-dcf4-4547-b369-dfbb9f2e13c3 + - 81db6b26-56be-4112-8e2a-aba5adc19a67: 259e3c2e-638f-4a55-aec5-26af59137f93 + - 8415fe38-925a-4d1f-9190-3d8b564b105c: 6aee9490-2297-4d42-a273-a633b923a0bb + - 86e929cb-3a4e-42b3-9c92-ab356b888002: 3e9f04d0-4118-4e2c-ab41-7b0c4ee2b1c2 + - 933c5c0b-13e8-465c-8dd6-96d4e7a37476: 61ae1ba7-44be-4566-b87b-bf92d20ba4f0 + - 975c1f2d-ced5-4011-a48b-af800814a0e9: 1bc76175-9401-476b-940d-b637f5ea9901 + - 9eeeb8e3-2b53-4d5b-9f36-6981f2f76afa: 83638d94-76d7-45f8-8691-f15d07476e5f + - a61e485f-0c00-4181-a5cf-4f9ad3a0e0a1: 4651f2f2-0ceb-4b40-973d-f96684f31d8d + - a683f797-86cf-4f9a-b9e0-8d750520ce0c: 3a3946a3-1092-4365-a633-ed5796f04705 + - b0e256ea-d856-487a-8f40-6ba6555a3d89: dc6d7f50-732c-45d6-b98f-59176f9e04e2 + - b389d894-14d1-4009-9612-ef4d2fff5fb5: c6c79bbc-2530-49bf-8720-6b1cb669bda1 + - b79e8875-e5c4-4fcd-8de0-e835ee844b7d: 64104d79-91a2-4bb5-bf9f-9b8f3af35620 + - c69c4fd1-9af4-41a9-be84-17a9f10c1ab5: 73d7feca-582f-446a-8c9a-424779afe0fb + - cb664491-f357-4064-b4bd-87bb1e13876f: 3d52f4d6-8617-4a0c-923e-26f54ab9a14e + - d212dd29-662c-4265-bb9f-06d4338b3d37: 2db00fe1-c2a1-494f-82ba-e4ddb919e7d9 + - d589a082-14d2-4259-a71c-9b6f421d3d3e: 87be2263-f63b-4d9d-8d55-6e0d6b50352b + - d837a9dd-3e8e-45a4-85c9-1b2a3571bdfb: c354111d-6074-49f8-bbfe-2ffbda19ce19 + - d97db941-6c09-4766-88b2-5067605c214d: d4a5db2a-c4ac-456e-8366-91edd3b63362 + - dbb41444-3acd-4e0d-8775-1dc80123b8e4: 1075ac77-31c9-47f4-85ef-4f76615779d5 + - dc53c6b6-40f1-47da-9cb9-c74dda95b8fe: 22a4d103-3a26-4ecc-b7a9-9a5093781792 + - ec9d0fbf-5f53-416a-8ab2-91a3048acf43: ffee1684-189d-43ca-8d0f-e66c04a244ce + - ee646eb6-04aa-4666-af60-a50e9a94961a: b3b24391-0bbd-4cf8-bef0-4dc6ed8bb0b9 + - f6bf520c-6834-4e5d-91e6-4ff4bd9ca34e: ce425b9b-8085-42af-a6da-7557c513603d + - f7fc48d0-d40b-41a2-a264-0b7f4385766c: cab81ac2-57b4-4143-8374-cf95a95650fb + - f963300f-7efd-4b9c-97e5-26cca9b08405: 4201b046-24d0-48a9-b45b-3750f3c7222b + SourceState: ! f8bfd6f9-6bb1-41d5-8053-3a8e53f365d3 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 83638d94-76d7-45f8-8691-f15d07476e5f + Components: + - ! 1075ac77-31c9-47f4-85ef-4f76615779d5 + - ! 2db00fe1-c2a1-494f-82ba-e4ddb919e7d9 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.006524, y: -0.077701, z: -0.157105} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 259e3c2e-638f-4a55-aec5-26af59137f93 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! dc6d7f50-732c-45d6-b98f-59176f9e04e2 + Components: + - ! cab81ac2-57b4-4143-8374-cf95a95650fb + - ! 59e65071-a7ac-40fb-8937-dd2c145aee10 +- ! + PackagePath: "" + objects: + - ! 179da1df-fb2b-428e-afeb-60471d098c23 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 4201b046-24d0-48a9-b45b-3750f3c7222b + Components: + - ! c50b91f1-fb44-44bb-acd7-3eb380f3e03f + - ! c354111d-6074-49f8-bbfe-2ffbda19ce19 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab new file mode 100644 index 00000000..8d498056 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab @@ -0,0 +1,83 @@ +- ! + PackagePath: "" + objects: + - ! 24102825-c166-45d9-beee-41c0d96c6de7 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9e34582c-f54f-4423-a72e-5f521a8f816a + Mesh: ! 94f8a9c7-d77e-47af-8528-0a63dc9a861e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Modern Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 8.794556, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 55421708-14da-4499-b511-7dbf3e0dd864 + - ! 08ddf03f-9737-40dc-be2a-a1ddc894bb8b + - ! e4ccfb16-07b9-46ac-b303-c11f65a2485a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 1c95cf09-b15f-4723-9825-f1661a5148f2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 7009f208-56d4-42c2-bc1e-c77857d5553c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab.meta new file mode 100644 index 00000000..607dc84f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Modern Nose Cone.prefab.meta @@ -0,0 +1,106 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 390ee0cb-1e60-4d19-8b40-1268800c64bc + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 390ee0cb-1e60-4d19-8b40-1268800c64bc + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! bfedaae8-6453-4fdd-8e63-44c3f3c42656 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 7009f208-56d4-42c2-bc1e-c77857d5553c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9e34582c-f54f-4423-a72e-5f521a8f816a + Mesh: ! 94f8a9c7-d77e-47af-8528-0a63dc9a861e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PackagePath: "" + objects: + - ! fe89fc07-6722-4aaf-965b-69cfd73bf8bd + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 1c95cf09-b15f-4723-9825-f1661a5148f2 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 08ddf03f-9737-40dc-be2a-a1ddc894bb8b: 33bc4a07-a788-4737-a58c-22e817b36daf + - 24102825-c166-45d9-beee-41c0d96c6de7: fe89fc07-6722-4aaf-965b-69cfd73bf8bd + - 55421708-14da-4499-b511-7dbf3e0dd864: 4283eb6f-7dab-4c6b-bf05-8cf09c7b5988 + - e4ccfb16-07b9-46ac-b303-c11f65a2485a: 0f8b2b61-2999-4eec-9268-1c52bfeaa3a1 + SourceState: ! 3f5d0d77-aa5e-45d1-8396-6ec4e8c6b811 +- ! + PrefabRemaps: + [] + Name: Modern Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 23.501286, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4283eb6f-7dab-4c6b-bf05-8cf09c7b5988 + - ! 33bc4a07-a788-4737-a58c-22e817b36daf + - ! 0f8b2b61-2999-4eec-9268-1c52bfeaa3a1 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab new file mode 100644 index 00000000..8d6a94dd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab @@ -0,0 +1,41 @@ +- ! + PackagePath: "" + objects: + - ! a21a77a6-e7fb-420b-847a-e09bd22828dc + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Sleek Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -1.228443, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f4c92ca3-11e2-47a8-8a39-0c0dac4a7e5f +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b5c1eccd-f8f6-45b8-9b78-3129cf89d0a2 + Mesh: ! 60984803-0479-49fb-8ace-87319126e843 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab.meta new file mode 100644 index 00000000..a2f5ae73 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Body Tube.prefab.meta @@ -0,0 +1,62 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 79343b52-0148-40f3-b5ee-59276ae43e7c + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 79343b52-0148-40f3-b5ee-59276ae43e7c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! c8b62620-478c-4d39-ad8e-a17778397b79 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b5c1eccd-f8f6-45b8-9b78-3129cf89d0a2 + Mesh: ! 60984803-0479-49fb-8ace-87319126e843 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - a21a77a6-e7fb-420b-847a-e09bd22828dc: f159348b-a001-47b7-9ddf-8c08ddbaceba + - f4c92ca3-11e2-47a8-8a39-0c0dac4a7e5f: 2d06667f-45de-4a3c-b62d-5ed3c46deee7 + SourceState: ! e65e4695-18af-4c35-a076-436b2bd697e3 +- ! + PackagePath: "" + objects: + - ! f159348b-a001-47b7-9ddf-8c08ddbaceba + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Sleek Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.006973, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2d06667f-45de-4a3c-b62d-5ed3c46deee7 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab new file mode 100644 index 00000000..860b801f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab @@ -0,0 +1,442 @@ +- ! + PackagePath: "" + objects: + - ! 9a40337d-a0e3-41c1-9d60-f1716eb3c066 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.355330, y: -5.119490, z: 4.763523} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eccf4cd6-755a-4ab6-b3e5-c2689b84c049 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! da06c82e-fe4f-45a3-97ab-963968b32d28 + Components: + - ! 653d54c1-8d04-45a4-99f8-b4b50728d8e9 + - ! 592ab329-3eb6-4095-a6e8-f77fbc4ab0fb +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013336, y: -0.111188, z: -0.218964} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6278921d-2708-42f5-88d0-01a4a40342d0 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.026907, y: -0.037271, z: -0.015821} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d7f1fc89-969c-49dd-b03c-8f61fca689a4 +- ! + PrefabRemaps: + [] + Name: engine_exhaust 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 7.840089, y: -5.126303, z: 4.591424} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! 6d89d93d-4017-45ba-ac53-932ed3bd33bb + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: engine_exhaust 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -8.006222, y: -5.126303, z: 4.763523} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! ff07321a-4787-46e0-8df2-19a480d521a7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 186295bf-3240-4095-b61e-3d7b9344b300 + Components: + - ! 3fd527c9-6c10-4758-b1c1-e333b12f81ee + - ! 5ba38dc9-4db4-487a-9ea8-75a8516a256e +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.032578, y: -5.126303, z: -8.960503} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! 0b3ab60f-15eb-4e87-8a7e-cce5db4ffb5b + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + Mesh: ! d939f3b0-8db9-4798-9298-7f08066b3614 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: Sleek Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 072ec3e9-b4bc-4c46-a3ac-4c046cc7bc8d + - ! b76ae71b-58a7-4ce7-9590-465e341049ae + - ! d9dc6b63-7101-424f-a221-2f5d4d5bead2 + - ! 4e1d7e26-6c92-48cb-8cae-6582ef58ae46 + - ! 3446176f-774c-4f91-9d7a-eb91ebdd6576 + - ! 78004e2e-959b-4590-ab0e-78a2f5dd40d3 + Components: + - ! 8a20bdc4-780d-451e-8895-efcaecb79045 + - ! b7eb04b9-00d5-495b-a380-18a9a1494f4c +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 7.339577, y: -5.119490, z: 4.473114} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5245ae8d-1fd5-4e66-aff5-56e42051d6ad +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 4e1d7e26-6c92-48cb-8cae-6582ef58ae46 + - ! 3446176f-774c-4f91-9d7a-eb91ebdd6576 + - ! 78004e2e-959b-4590-ab0e-78a2f5dd40d3 + smokes: ! + - ! 072ec3e9-b4bc-4c46-a3ac-4c046cc7bc8d + - ! b76ae71b-58a7-4ce7-9590-465e341049ae + - ! d9dc6b63-7101-424f-a221-2f5d4d5bead2 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.029284, y: -5.119490, z: -8.803538} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a5cc3528-6e21-4220-81e2-ea7258d27164 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.019787, y: -0.067461, z: -0.328559} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 77a5b8fe-5b09-4387-929c-f0ad60b7115e +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 0b903852-92c7-4afe-a299-a34fbfc13e61 + Components: + - ! 941b5753-aae4-46d3-a955-6ae5b78ca0ed + - ! a351f317-abeb-4e9d-bf74-dfeb839494b6 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab.meta new file mode 100644 index 00000000..372a9d94 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Fins.prefab.meta @@ -0,0 +1,488 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 90f56253-e16e-40b6-9a7b-207dc3b162e7 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 90f56253-e16e-40b6-9a7b-207dc3b162e7 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 8f64da7f-ac7c-40c3-8409-df42e9503b31 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PackagePath: "" + objects: + - ! f0f900de-25a1-46ba-a541-b31641fe02e8 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 7c202973-b1ba-4010-b9fa-8b61167cbb1e + Components: + - ! 1c90e838-ebb9-4ead-bbe4-0574bb16f185 + - ! 3cdcb7be-f20e-48d3-b80c-e51066b9669d +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.029284, y: -5.119490, z: -8.803538} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2f7737b5-7d96-4e2b-ae1c-bad8b34e8d3e +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 7.339577, y: -5.119490, z: 4.473114} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 00009495-28f0-4d00-9ee4-f11ff42ccd3c +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 56f70fef-3367-47fd-b322-8135a2c282c5 + - ! 97ba01f9-17fc-42c1-ac0c-1b69c8cf44e8 + - ! eea6d345-6d5f-4638-951e-9ced6b4fad4d + smokes: ! + - ! cca8ee0b-3857-44ac-922a-818f010a31df + - ! 4cd701ab-a657-4669-9af1-c4e4209b9eb3 + - ! 3f2d2fed-9b4d-4053-b078-ce29f50dc35d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -8.006222, y: -5.126303, z: 4.763523} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! 0b5f3756-e2ed-4183-a301-213c2769c24a + Components: + [] +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.019787, y: -0.067461, z: -0.328559} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 924ed4ff-1e48-4286-8a54-97112823be7e +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013336, y: -0.111188, z: -0.218964} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a51e1b05-7fc7-4697-a51e-f23a9cd77938 +- ! + SourceRemaps: + - 072ec3e9-b4bc-4c46-a3ac-4c046cc7bc8d: cca8ee0b-3857-44ac-922a-818f010a31df + - 0b3ab60f-15eb-4e87-8a7e-cce5db4ffb5b: adf25e0f-cbff-47e4-b1ee-a169bb0c8288 + - 0b903852-92c7-4afe-a299-a34fbfc13e61: 7c202973-b1ba-4010-b9fa-8b61167cbb1e + - 186295bf-3240-4095-b61e-3d7b9344b300: 9ee18e06-1cd6-40ba-8757-38977cc923b4 + - 3446176f-774c-4f91-9d7a-eb91ebdd6576: 97ba01f9-17fc-42c1-ac0c-1b69c8cf44e8 + - 3fd527c9-6c10-4758-b1c1-e333b12f81ee: aa949642-756c-4cfa-b003-47a51eb78061 + - 4e1d7e26-6c92-48cb-8cae-6582ef58ae46: 56f70fef-3367-47fd-b322-8135a2c282c5 + - 5245ae8d-1fd5-4e66-aff5-56e42051d6ad: 00009495-28f0-4d00-9ee4-f11ff42ccd3c + - 592ab329-3eb6-4095-a6e8-f77fbc4ab0fb: 79a96661-d925-41f2-86c2-42d6a18d9b61 + - 5ba38dc9-4db4-487a-9ea8-75a8516a256e: 31d923e4-e1ed-4306-8f1a-e2d0dd4b546d + - 6278921d-2708-42f5-88d0-01a4a40342d0: a51e1b05-7fc7-4697-a51e-f23a9cd77938 + - 653d54c1-8d04-45a4-99f8-b4b50728d8e9: a9a9107a-ca40-492e-a77e-bd131ca98236 + - 6d89d93d-4017-45ba-ac53-932ed3bd33bb: c9212b0d-a89d-432a-a17a-9bd3a472ba59 + - 77a5b8fe-5b09-4387-929c-f0ad60b7115e: 924ed4ff-1e48-4286-8a54-97112823be7e + - 78004e2e-959b-4590-ab0e-78a2f5dd40d3: eea6d345-6d5f-4638-951e-9ced6b4fad4d + - 8a20bdc4-780d-451e-8895-efcaecb79045: ece0da6d-0af7-4d94-bb90-b6f0ebad6d71 + - 941b5753-aae4-46d3-a955-6ae5b78ca0ed: 1c90e838-ebb9-4ead-bbe4-0574bb16f185 + - 9a40337d-a0e3-41c1-9d60-f1716eb3c066: f0f900de-25a1-46ba-a541-b31641fe02e8 + - a351f317-abeb-4e9d-bf74-dfeb839494b6: 3cdcb7be-f20e-48d3-b80c-e51066b9669d + - a5cc3528-6e21-4220-81e2-ea7258d27164: 2f7737b5-7d96-4e2b-ae1c-bad8b34e8d3e + - b76ae71b-58a7-4ce7-9590-465e341049ae: 4cd701ab-a657-4669-9af1-c4e4209b9eb3 + - b7eb04b9-00d5-495b-a380-18a9a1494f4c: 4f86d4f5-f8d0-46fe-b529-cdf046db4379 + - d7f1fc89-969c-49dd-b03c-8f61fca689a4: e6f3a49f-83cc-4f78-bbcf-b896b1abae1c + - d9dc6b63-7101-424f-a221-2f5d4d5bead2: 3f2d2fed-9b4d-4053-b078-ce29f50dc35d + - da06c82e-fe4f-45a3-97ab-963968b32d28: 66c55e08-b045-4ead-8be7-6f7d50e6bfec + - eccf4cd6-755a-4ab6-b3e5-c2689b84c049: d932a60f-5a96-4b78-bd85-ca197af36135 + - ff07321a-4787-46e0-8df2-19a480d521a7: 0b5f3756-e2ed-4183-a301-213c2769c24a + SourceState: ! 050c90b8-39c5-4eb0-8886-3d524fc96254 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 7.840089, y: -5.126303, z: 4.591424} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! c9212b0d-a89d-432a-a17a-9bd3a472ba59 + Components: + [] +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.026907, y: -0.037271, z: -0.015821} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e6f3a49f-83cc-4f78-bbcf-b896b1abae1c +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 66c55e08-b045-4ead-8be7-6f7d50e6bfec + Components: + - ! a9a9107a-ca40-492e-a77e-bd131ca98236 + - ! 79a96661-d925-41f2-86c2-42d6a18d9b61 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 9ee18e06-1cd6-40ba-8757-38977cc923b4 + Components: + - ! aa949642-756c-4cfa-b003-47a51eb78061 + - ! 31d923e4-e1ed-4306-8f1a-e2d0dd4b546d +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter 1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -7.355330, y: -5.119490, z: 4.763523} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 4.999996, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d932a60f-5a96-4b78-bd85-ca197af36135 +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + Mesh: ! d939f3b0-8db9-4798-9298-7f08066b3614 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust 3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.032578, y: -5.126303, z: -8.960503} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.600000, y: 1.800000, z: 1.800000} + hasSegmentScaleCompensation: false + Children: + - ! adf25e0f-cbff-47e4-b1ee-a169bb0c8288 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Sleek Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cca8ee0b-3857-44ac-922a-818f010a31df + - ! 4cd701ab-a657-4669-9af1-c4e4209b9eb3 + - ! 3f2d2fed-9b4d-4053-b078-ce29f50dc35d + - ! 56f70fef-3367-47fd-b322-8135a2c282c5 + - ! 97ba01f9-17fc-42c1-ac0c-1b69c8cf44e8 + - ! eea6d345-6d5f-4638-951e-9ced6b4fad4d + Components: + - ! ece0da6d-0af7-4d94-bb90-b6f0ebad6d71 + - ! 4f86d4f5-f8d0-46fe-b529-cdf046db4379 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab new file mode 100644 index 00000000..53a2c1d7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab @@ -0,0 +1,41 @@ +- ! + PackagePath: "" + objects: + - ! 64adaad9-e5f0-4f98-938a-b8c253b18502 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + Mesh: ! 86d6eeb7-1007-4ff6-958f-5bbfa5bab327 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Sleek Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 8.794556, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4f30d76b-2396-4c49-9742-6251f6e07fbe diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab.meta new file mode 100644 index 00000000..9d243311 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Sleek Nose Cone.prefab.meta @@ -0,0 +1,62 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! f8c6c126-d1c9-46e6-965f-f185cb98ee55 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! f8c6c126-d1c9-46e6-965f-f185cb98ee55 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 94afbc78-efc6-4127-9c8b-118521b06401 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PackagePath: "" + objects: + - ! cb4a6c5d-d914-4e8a-825b-185e6c0c01ce + LazyLoading: false + RetainAssets: true +- ! + SourceRemaps: + - 4f30d76b-2396-4c49-9742-6251f6e07fbe: d6b01d28-40e4-4a99-acb3-ddaa2e9b1db2 + - 64adaad9-e5f0-4f98-938a-b8c253b18502: cb4a6c5d-d914-4e8a-825b-185e6c0c01ce + SourceState: ! 122c4ab4-cc47-482e-9e2b-5e44b6233e1c +- ! + PrefabRemaps: + [] + Name: Sleek Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 21.029972, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d6b01d28-40e4-4a99-acb3-ddaa2e9b1db2 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 37852eb4-7e77-4068-bab4-e79b1e75bb8d + Mesh: ! 86d6eeb7-1007-4ff6-958f-5bbfa5bab327 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab new file mode 100644 index 00000000..9540bc2f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab @@ -0,0 +1,83 @@ +- ! + PackagePath: "" + objects: + - ! dd3fac4c-8ebf-4987-93f6-aa4c31e555ef + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 50159f70-05fb-4662-a5c4-ed01c233c88d + Mesh: ! 06a41d56-e716-4015-b950-8778506335af + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 146f6e8f-d5d8-4f37-a364-f5fd53e7ffd4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Space Age Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -1.228443, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bd229358-08a2-4283-8522-cbfc8a0ba10a + - ! ff1b06a5-ecca-4c5b-bcf9-bc9530c25d30 + - ! b02e879d-e9f0-4cc2-8907-af65d80f418b +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! cfd24310-2219-4548-a8a6-1cffadc84712 + Mesh: ! e833bcb6-6e61-4630-a40f-854c64276405 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab.meta new file mode 100644 index 00000000..20927cee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Body Tube.prefab.meta @@ -0,0 +1,106 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 255bac26-326b-4045-8f1e-04c78eabb8b4 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 255bac26-326b-4045-8f1e-04c78eabb8b4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! ce4795b5-aea2-469f-b69f-37a5ad023546 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 50159f70-05fb-4662-a5c4-ed01c233c88d + Mesh: ! 06a41d56-e716-4015-b950-8778506335af + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Space Age Body Tube + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 8.612383, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! da23f797-df2b-4f11-af74-e827c04e319b + - ! f2f8aba5-596f-40b1-85b2-d942ca31b200 + - ! 24657f58-40d0-403e-befd-2f0221ea3ba7 +- ! + PackagePath: "" + objects: + - ! a2078ddd-fe22-4fb3-847a-cafb0386bb8e + LazyLoading: false + RetainAssets: true +- ! + SourceRemaps: + - b02e879d-e9f0-4cc2-8907-af65d80f418b: 24657f58-40d0-403e-befd-2f0221ea3ba7 + - bd229358-08a2-4283-8522-cbfc8a0ba10a: da23f797-df2b-4f11-af74-e827c04e319b + - dd3fac4c-8ebf-4987-93f6-aa4c31e555ef: a2078ddd-fe22-4fb3-847a-cafb0386bb8e + - ff1b06a5-ecca-4c5b-bcf9-bc9530c25d30: f2f8aba5-596f-40b1-85b2-d942ca31b200 + SourceState: ! b55ead2d-93ec-4fe7-a4e1-7db2e606d084 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 146f6e8f-d5d8-4f37-a364-f5fd53e7ffd4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! cfd24310-2219-4548-a8a6-1cffadc84712 + Mesh: ! e833bcb6-6e61-4630-a40f-854c64276405 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab new file mode 100644 index 00000000..13938e77 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab @@ -0,0 +1,249 @@ +- ! + PackagePath: "" + objects: + - ! 267b71e4-c046-487d-93e5-d94d34fc495a + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.071278, y: -0.043962, z: -0.007384} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 06ff7c3e-1854-4af9-b129-1c1bcc166617 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! b705f36d-9e18-4fda-b94f-067b9ab34ee0 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Space Age Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 83e5679f-fc48-4575-ac8d-03ba0cca8c51 + - ! 8a2cc9e3-5f0b-4a66-8be9-9910ccb5d239 + Components: + - ! 1e808a0f-5788-472d-a839-411eb9fb5f8c + - ! cfbb07a4-049f-4961-855e-7d0fd565d2f8 + - ! eb4f76cc-0952-4897-99c8-40b54c8472c1 + - ! f286507f-7950-4ed5-9d67-0d11455d244f + - ! 71b67d55-97f1-497c-adad-26340c904d2f +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 83e5679f-fc48-4575-ac8d-03ba0cca8c51 + smokes: ! + - ! 8a2cc9e3-5f0b-4a66-8be9-9910ccb5d239 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: engine_exhaust + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.042411, y: -4.704506, z: 0.143178} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! cbc40177-be4a-4cca-97ff-b8735b242e78 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.260098, z: 0.000099} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 323a41ca-2685-4624-a99b-c3a2c80e3e93 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 0bc0a5d1-e729-4f98-8a21-ae47dc067848 + Components: + - ! 931ea689-0051-4521-8c28-435b6560879a + - ! 7b7a4327-911f-4ff5-9d81-de1a53c8aca6 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! cfd24310-2219-4548-a8a6-1cffadc84712 + Mesh: ! 0bd54fec-e05b-4bcb-9c1e-eec19e3d3063 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f38add9d-489d-422d-ad03-73c42eddec40 + Mesh: ! 88f899e7-9590-4dee-964f-ce40a022f07a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f38add9d-489d-422d-ad03-73c42eddec40 + Mesh: ! 7b07b906-5237-4aba-bd64-8ca9d8e1c9fc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab.meta new file mode 100644 index 00000000..685d47b1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Fins.prefab.meta @@ -0,0 +1,282 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 9bb44e42-24ca-4d39-87d2-41596d8f05a4 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 9bb44e42-24ca-4d39-87d2-41596d8f05a4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 6502dce8-156a-4ff1-9473-2ea7916d7997 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PackagePath: "" + objects: + - ! dd7723ab-c684-41e8-a208-907a3f987496 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! b705f36d-9e18-4fda-b94f-067b9ab34ee0 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 9462a917-7a02-443a-9dd6-4110e1c71154 + Components: + - ! 21702720-5470-40bc-8c4c-51ed14b390a2 + - ! b14e6e4c-3e07-47a7-95e3-50a4f5b13e43 +- ! + SourceRemaps: + - 06ff7c3e-1854-4af9-b129-1c1bcc166617: c0b4741c-2512-4ba5-b872-521e6aa0176f + - 0bc0a5d1-e729-4f98-8a21-ae47dc067848: 9462a917-7a02-443a-9dd6-4110e1c71154 + - 1e808a0f-5788-472d-a839-411eb9fb5f8c: 292f0448-563d-4cf7-be0e-10328ef48c75 + - 267b71e4-c046-487d-93e5-d94d34fc495a: dd7723ab-c684-41e8-a208-907a3f987496 + - 323a41ca-2685-4624-a99b-c3a2c80e3e93: 2236630b-43ab-4f1a-8e79-68c3064f7a89 + - 71b67d55-97f1-497c-adad-26340c904d2f: f05eb278-f8be-4c76-938d-cb70bf9cb56a + - 7b7a4327-911f-4ff5-9d81-de1a53c8aca6: b14e6e4c-3e07-47a7-95e3-50a4f5b13e43 + - 83e5679f-fc48-4575-ac8d-03ba0cca8c51: 881fcc71-cd55-412b-ae23-796df7a0e695 + - 8a2cc9e3-5f0b-4a66-8be9-9910ccb5d239: ae33e474-f00a-413f-be10-972860b7bfcf + - 931ea689-0051-4521-8c28-435b6560879a: 21702720-5470-40bc-8c4c-51ed14b390a2 + - cbc40177-be4a-4cca-97ff-b8735b242e78: 51744e3d-41e8-4ad8-afce-cfdea5aafe01 + - cfbb07a4-049f-4961-855e-7d0fd565d2f8: 87b78263-6cab-4216-98a2-da353a2bd500 + - eb4f76cc-0952-4897-99c8-40b54c8472c1: 8c41b12c-c3cb-4d32-a832-8c4bd2b461c8 + - f286507f-7950-4ed5-9d67-0d11455d244f: b61c70b7-d6c6-4c32-9a35-eb4a35a856db + SourceState: ! 2094fcf0-d6a1-4624-a0c2-09acd0278a1d +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! cfd24310-2219-4548-a8a6-1cffadc84712 + Mesh: ! 0bd54fec-e05b-4bcb-9c1e-eec19e3d3063 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: engine_exhaust + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.042411, y: -4.704506, z: 0.143178} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 2.000000, z: 2.000000} + hasSegmentScaleCompensation: false + Children: + - ! 51744e3d-41e8-4ad8-afce-cfdea5aafe01 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f38add9d-489d-422d-ad03-73c42eddec40 + Mesh: ! 88f899e7-9590-4dee-964f-ce40a022f07a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.071278, y: -0.043962, z: -0.007384} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c0b4741c-2512-4ba5-b872-521e6aa0176f +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -4.260098, z: 0.000099} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2236630b-43ab-4f1a-8e79-68c3064f7a89 +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f38add9d-489d-422d-ad03-73c42eddec40 + Mesh: ! 7b07b906-5237-4aba-bd64-8ca9d8e1c9fc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Space Age Fins + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -16.653543, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 881fcc71-cd55-412b-ae23-796df7a0e695 + - ! ae33e474-f00a-413f-be10-972860b7bfcf + Components: + - ! 292f0448-563d-4cf7-be0e-10328ef48c75 + - ! 87b78263-6cab-4216-98a2-da353a2bd500 + - ! 8c41b12c-c3cb-4d32-a832-8c4bd2b461c8 + - ! b61c70b7-d6c6-4c32-9a35-eb4a35a856db + - ! f05eb278-f8be-4c76-938d-cb70bf9cb56a +- ! + PrefabRemaps: + [] + Name: ExhaustControls + Enabled: true + ScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + exhausts: ! + - ! 881fcc71-cd55-412b-ae23-796df7a0e695 + smokes: ! + - ! ae33e474-f00a-413f-be10-972860b7bfcf + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab new file mode 100644 index 00000000..07643648 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab @@ -0,0 +1,62 @@ +- ! + PackagePath: "" + objects: + - ! 76bb9ea0-5c09-437e-9c15-c4c66299afad + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! 3dae7dac-7880-46bf-89ee-c5b255a34762 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Space Age Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 8.794556, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 683c1a29-4ad9-4a72-8e8a-97355ab6f6af + - ! d205e528-b07b-4948-a4e9-696481d19fd8 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 1b2f6a59-990e-4833-baac-c0cbe117c66d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab.meta new file mode 100644 index 00000000..8b24c3b2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/Parts/Space Age Nose Cone.prefab.meta @@ -0,0 +1,84 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 11174f6e-5467-4bf7-a4ec-be4b4e11d888 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 11174f6e-5467-4bf7-a4ec-be4b4e11d888 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! e7fac2b3-eb91-478e-b793-97719f40d799 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ac5e049b-c43a-415b-8e44-5f8798debb0c + Mesh: ! 1b2f6a59-990e-4833-baac-c0cbe117c66d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PackagePath: "" + objects: + - ! 44645f4b-ecf7-4899-bd71-7bd1780638dd + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Space Age Nose Cone + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 18.635382, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a0989c6f-2b16-4f02-814e-cf9816d9f82f + - ! 06c994e5-0169-4982-ba56-27dd50d975ae +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! 3dae7dac-7880-46bf-89ee-c5b255a34762 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 683c1a29-4ad9-4a72-8e8a-97355ab6f6af: a0989c6f-2b16-4f02-814e-cf9816d9f82f + - 76bb9ea0-5c09-437e-9c15-c4c66299afad: 44645f4b-ecf7-4899-bd71-7bd1780638dd + - d205e528-b07b-4948-a4e9-696481d19fd8: 06c994e5-0169-4982-ba56-27dd50d975ae + SourceState: ! 12657d2c-106c-477c-8480-b76547430538 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab new file mode 100644 index 00000000..53031399 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab @@ -0,0 +1,180 @@ +- ! + PackagePath: "" + objects: + - ! 7a1aee32-44da-4150-b657-a9b82811a0ce + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b1d80340-b780-4f29-a0ae-50a3aac4b256 + - ! e1a946d8-02f6-4d9d-88fa-b6e946bad79c +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 06c9df2d-d933-4bdb-8491-4592c8502ddb + Components: + - ! 6aca3e07-2256-4bf8-a148-f3011e88a390 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.665100 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab.meta new file mode 100644 index 00000000..cdbc3e23 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Body Tube Category.prefab.meta @@ -0,0 +1,204 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 242abbc5-63eb-448b-9a60-c5f5eae6725c + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 242abbc5-63eb-448b-9a60-c5f5eae6725c + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 00657a9a-754b-451f-b728-62236b100542 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SourceRemaps: + - 06c9df2d-d933-4bdb-8491-4592c8502ddb: 614c11b0-3b4b-49dd-8ae5-689e430b8f9f + - 6aca3e07-2256-4bf8-a148-f3011e88a390: afd118ab-2a27-4ca1-a415-fc01d12d8526 + - 7a1aee32-44da-4150-b657-a9b82811a0ce: d8541c0f-7457-4412-96c6-0146ae207374 + - b1d80340-b780-4f29-a0ae-50a3aac4b256: 32f208e3-fd20-4d42-89b4-a46adc210ecb + - e1a946d8-02f6-4d9d-88fa-b6e946bad79c: f7b64933-48cf-418c-a036-26b38999e781 + SourceState: ! 4cf7cfc3-8970-4416-8b52-36a02450d2cc +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.665100 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PackagePath: "" + objects: + - ! d8541c0f-7457-4412-96c6-0146ae207374 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 32f208e3-fd20-4d42-89b4-a46adc210ecb + - ! f7b64933-48cf-418c-a036-26b38999e781 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 614c11b0-3b4b-49dd-8ae5-689e430b8f9f + Components: + - ! afd118ab-2a27-4ca1-a415-fc01d12d8526 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab new file mode 100644 index 00000000..e3e70194 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab @@ -0,0 +1,180 @@ +- ! + PackagePath: "" + objects: + - ! 9615071b-9447-4ea6-b9eb-1516c60f7415 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e332e47c-7dc4-445e-a51a-15756ae75352 + Components: + - ! 5c3cae14-67da-4a5d-b8c5-461873b7d01e +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 23069c6c-01cc-405e-93a1-1706f4579174 + - ! a324c92f-5ffe-4193-b6c5-035f37d3e78a diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab.meta new file mode 100644 index 00000000..e2fce435 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Fins Category.prefab.meta @@ -0,0 +1,204 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 5c321a82-1be9-40b7-a482-f37464b708db + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 5c321a82-1be9-40b7-a482-f37464b708db + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! f5753e29-edcc-4bc0-8a70-f3ac07318cff + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PackagePath: "" + objects: + - ! 65b1b7c5-6a46-4a8c-a9de-453b77d7705a + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e2d3171c-0f5e-4cc5-928e-42814d8bef74 + Components: + - ! 9d2faeae-c61a-4548-a875-67fbec88c211 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d9b61a0d-1264-4b5e-a238-869dd42dbe72 + - ! b00ec8c3-65d6-4b50-9d4d-5656862e60e8 +- ! + SourceRemaps: + - 23069c6c-01cc-405e-93a1-1706f4579174: d9b61a0d-1264-4b5e-a238-869dd42dbe72 + - 5c3cae14-67da-4a5d-b8c5-461873b7d01e: 9d2faeae-c61a-4548-a875-67fbec88c211 + - 9615071b-9447-4ea6-b9eb-1516c60f7415: 65b1b7c5-6a46-4a8c-a9de-453b77d7705a + - a324c92f-5ffe-4193-b6c5-035f37d3e78a: b00ec8c3-65d6-4b50-9d4d-5656862e60e8 + - e332e47c-7dc4-445e-a51a-15756ae75352: e2d3171c-0f5e-4cc5-928e-42814d8bef74 + SourceState: ! 1ec436ef-0999-44af-9af7-e85e7d6dd869 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab new file mode 100644 index 00000000..c8762913 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! 00c37133-966b-4889-a31e-56739052db09 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 49a2f84d-f796-406b-a565-e1a5e9b08e07 + - ! fb6fdd8e-3c40-40e8-a769-a61596f12f23 + - ! 854f3d81-22d0-4fe9-b2be-4e9c756230dc + - ! ddf098b5-6b2c-4032-aafe-9a4fc289b3be + - ! 940a5d0b-d4b6-45dd-b0fb-65ce8bea3dd9 + Components: + - ! de88d018-d862-42b3-96a8-0bfa3ef58a73 + - ! d73942a4-3e03-4106-8fd2-9643db4f1b2e +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c919943d-86e8-4dc5-91d3-108695e16dd0 + - ! edc83f58-d0ff-4281-bf14-11fe07296f51 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ba4b739a-a604-49f7-9803-3aec2ea98f4e + - ! b04d78cc-ad26-4c09-9ed9-7f31800957cd +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9f331ba2-371b-4e8e-a6ff-3c87c764de3f + - ! d7aa8f62-ff43-49da-a382-703593b91bc3 + - ! 124ec62f-b22d-49c5-be16-cc0dcd565d5b + - ! 5911e5c5-eb9c-49b7-a861-ad72070ce28b + - ! 749a3dde-047e-4e50-8b8b-874657953f78 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 5e3a10ef-8cca-453d-826a-a8c8e8e6f53c + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7a9da3f2-124f-427f-bb4b-e378791a364c + Components: + - ! 76da699b-e2da-467c-94ee-fc3f2be3cede + - ! 8996a2c3-1df6-4a5c-8955-abb1029d593f + - ! ed609bc9-60c1-4d21-a4fb-24975db5de03 + - ! 98026747-f58f-4543-bf30-df00dcd6b8fd + - ! 6d27af13-1ed4-426f-96ac-db4ce8f2c104 + - ! fe687425-0d1b-4353-8cf6-66a3bded06ca +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! edc83f58-d0ff-4281-bf14-11fe07296f51 + item: ! c23f1135-5034-4f4a-ba72-015f8b3d61be + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8bcce9be-af57-40e5-9121-e6ec262b085c + - ! b6b25496-4c47-40f3-b160-a81a1287ea8b +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f3e54778-ccfb-466e-9f88-533a7a8f787e + - ! c23f1135-5034-4f4a-ba72-015f8b3d61be +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! ba4b739a-a604-49f7-9803-3aec2ea98f4e + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab.meta new file mode 100644 index 00000000..f8b504f6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Body Tube.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 68a19954-e237-4b18-827d-db13073a38d6 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 68a19954-e237-4b18-827d-db13073a38d6 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! bc1ee565-7e22-4de5-b9de-d9fc5440e3f8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8b749aee-3c74-4077-a789-b7891d4de64a + - ! 939e1900-c399-472e-9d84-8a49afe83392 + - ! 2ee5e77f-4074-4d38-8bf6-1fd93b85a0ec + - ! 9367bbf8-bcfe-4420-ae8b-64248967f6fd + - ! 7d8d1fd0-6a38-4121-af85-b06dd4092f89 + Components: + - ! 451aa864-7e14-40d8-b237-2b40248a3022 + - ! 6bcfbde1-839a-4354-aa32-3e31a26a6724 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 06aa15da-9ea7-4324-9938-ebc4aa828808 + - ! fd826635-09f3-44c3-b704-c4dd4377bb80 + - ! 1fd90016-a9bc-4748-995c-bd87c40e0bd1 + - ! efe3d3c6-3d41-4c8f-8bf9-b3eb306d7c86 + - ! a448494b-032a-4b16-bf2a-91fe318791cf +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! f7bec61f-1d59-44c1-b25c-f02d5e807f66 + item: ! f1d82217-656a-49d6-bb99-4c2e34ee4625 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PackagePath: "" + objects: + - ! 2123863b-ef00-4f26-9d2c-7be514cde96f + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8aa26a12-425f-4cd6-b439-662a04bdc616 + Components: + - ! c2989045-1fa2-40db-9463-33b567c534d5 + - ! b66d4165-0ec0-453a-a089-4b20bcb2c302 + - ! 2c7dbea8-938f-4107-ac46-3887e525f239 + - ! 402ec009-d601-48ec-a4b3-4e4ba52e5656 + - ! a3b782fb-2be0-4647-ab7f-80402c12da39 + - ! e7571d4a-abe5-44c8-9b03-aaf262642df8 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1dbcfdeb-8a72-4ac9-a821-d4c963075277 + - ! 6f5c70fd-9ef7-48e2-89ad-f452a12627ff +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f36b766a-d0c2-4727-9735-0a70f73b01c5 + - ! f7bec61f-1d59-44c1-b25c-f02d5e807f66 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eee1e5e1-6dc1-46e7-bdf3-bc8bca31fdc6 + - ! 6bb79c64-95b2-4eb0-9076-d74d1377e053 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 04f6d461-3148-4661-b5c6-710f73d6268e + - ! f1d82217-656a-49d6-bb99-4c2e34ee4625 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + SourceRemaps: + - 00c37133-966b-4889-a31e-56739052db09: 2123863b-ef00-4f26-9d2c-7be514cde96f + - 124ec62f-b22d-49c5-be16-cc0dcd565d5b: 1fd90016-a9bc-4748-995c-bd87c40e0bd1 + - 49a2f84d-f796-406b-a565-e1a5e9b08e07: 8b749aee-3c74-4077-a789-b7891d4de64a + - 5911e5c5-eb9c-49b7-a861-ad72070ce28b: efe3d3c6-3d41-4c8f-8bf9-b3eb306d7c86 + - 6d27af13-1ed4-426f-96ac-db4ce8f2c104: a3b782fb-2be0-4647-ab7f-80402c12da39 + - 749a3dde-047e-4e50-8b8b-874657953f78: a448494b-032a-4b16-bf2a-91fe318791cf + - 76da699b-e2da-467c-94ee-fc3f2be3cede: c2989045-1fa2-40db-9463-33b567c534d5 + - 7a9da3f2-124f-427f-bb4b-e378791a364c: 8aa26a12-425f-4cd6-b439-662a04bdc616 + - 854f3d81-22d0-4fe9-b2be-4e9c756230dc: 2ee5e77f-4074-4d38-8bf6-1fd93b85a0ec + - 8996a2c3-1df6-4a5c-8955-abb1029d593f: b66d4165-0ec0-453a-a089-4b20bcb2c302 + - 8bcce9be-af57-40e5-9121-e6ec262b085c: eee1e5e1-6dc1-46e7-bdf3-bc8bca31fdc6 + - 940a5d0b-d4b6-45dd-b0fb-65ce8bea3dd9: 7d8d1fd0-6a38-4121-af85-b06dd4092f89 + - 98026747-f58f-4543-bf30-df00dcd6b8fd: 402ec009-d601-48ec-a4b3-4e4ba52e5656 + - 9f331ba2-371b-4e8e-a6ff-3c87c764de3f: 06aa15da-9ea7-4324-9938-ebc4aa828808 + - b04d78cc-ad26-4c09-9ed9-7f31800957cd: 6f5c70fd-9ef7-48e2-89ad-f452a12627ff + - b6b25496-4c47-40f3-b160-a81a1287ea8b: 6bb79c64-95b2-4eb0-9076-d74d1377e053 + - ba4b739a-a604-49f7-9803-3aec2ea98f4e: 1dbcfdeb-8a72-4ac9-a821-d4c963075277 + - c23f1135-5034-4f4a-ba72-015f8b3d61be: f1d82217-656a-49d6-bb99-4c2e34ee4625 + - c919943d-86e8-4dc5-91d3-108695e16dd0: f36b766a-d0c2-4727-9735-0a70f73b01c5 + - d73942a4-3e03-4106-8fd2-9643db4f1b2e: 6bcfbde1-839a-4354-aa32-3e31a26a6724 + - d7aa8f62-ff43-49da-a382-703593b91bc3: fd826635-09f3-44c3-b704-c4dd4377bb80 + - ddf098b5-6b2c-4032-aafe-9a4fc289b3be: 9367bbf8-bcfe-4420-ae8b-64248967f6fd + - de88d018-d862-42b3-96a8-0bfa3ef58a73: 451aa864-7e14-40d8-b237-2b40248a3022 + - ed609bc9-60c1-4d21-a4fb-24975db5de03: 2c7dbea8-938f-4107-ac46-3887e525f239 + - edc83f58-d0ff-4281-bf14-11fe07296f51: f7bec61f-1d59-44c1-b25c-f02d5e807f66 + - f3e54778-ccfb-466e-9f88-533a7a8f787e: 04f6d461-3148-4661-b5c6-710f73d6268e + - fb6fdd8e-3c40-40e8-a769-a61596f12f23: 939e1900-c399-472e-9d84-8a49afe83392 + - fe687425-0d1b-4353-8cf6-66a3bded06ca: e7571d4a-abe5-44c8-9b03-aaf262642df8 + SourceState: ! 77fe4e6f-0991-4fe0-9399-dfb717a1fd85 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 1dbcfdeb-8a72-4ac9-a821-d4c963075277 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 5e3a10ef-8cca-453d-826a-a8c8e8e6f53c + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab new file mode 100644 index 00000000..f49bf804 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! f84d1274-0e32-401e-829e-ea9a079c42d4 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 67ec9c6b-dd75-45b3-a2eb-63bbf22e1578 + - ! 0b10ca56-b7da-45ed-b194-49a2a582decd + - ! 25cab00e-e179-4a03-8c06-5cdafa3d8400 + - ! 213fe61f-be1b-45e9-ad79-42687fab2213 + - ! d3dedd65-8bc7-44d8-9794-1d63d0455648 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5174d39b-ac84-4259-8155-0d33022a5ee9 + - ! f146ef79-91da-4e8d-9584-8f1ee2e27d68 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! d87d9ccc-b812-4ed4-b736-0d6b370151fc + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 714479e1-9b3b-4212-929c-69e82e7c7aed + - ! 05f4a015-e812-4951-969a-0b6692da2c85 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 0a3995dc-5405-4e72-b86c-a32044d7a013 + item: ! f146ef79-91da-4e8d-9584-8f1ee2e27d68 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 064f1cad-18ee-4fbc-b78f-a77ceb083c1b + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b60adc9e-2655-45d4-b200-f0431c2a4a65 + - ! 0a3995dc-5405-4e72-b86c-a32044d7a013 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fb65533d-fcd3-4619-8b7c-7400d0aece95 + Components: + - ! 13c22bd6-f8cd-4c57-8583-6d562aff37e9 + - ! 54ad9b7b-6b93-4a87-90b0-075d67293314 + - ! eac7865f-b80f-436b-bb1a-a39c82f71858 + - ! be4a8ee8-1bd1-448a-8e7d-e5d5447f7ee2 + - ! 308c1e2c-dfce-47bc-ba96-be56bb5d6caa + - ! 9f5b3b07-15e6-48fe-97e7-bebfecf5e056 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c47f6b10-b69f-4045-ac4d-6263997f5c6b + - ! 3d80a2b7-0afc-4f47-8426-cf330cae822e + - ! 2bee27e6-3cfe-40e0-8654-93507a734418 + - ! 98583c17-a07e-434f-8f0c-ef91e9aeb180 + - ! f40a497f-7a41-4a57-9453-5412d16d9f10 + Components: + - ! 7dc2ea5f-4f2f-4ac2-87ec-a2385720b27e + - ! 987ee73b-1af2-44a1-ad7f-410c58cfbad9 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 064f1cad-18ee-4fbc-b78f-a77ceb083c1b + - ! dfa5337e-d140-4a07-a083-47f1d3d8a8ad diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab.meta new file mode 100644 index 00000000..9ca82a75 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Fins.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! bbe206c8-38e1-4245-9550-2a019fe7e078 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! bbe206c8-38e1-4245-9550-2a019fe7e078 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 987428d5-7ddd-43b6-bdf3-81d3bdeb04e5 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 42ba2b74-c5c3-42df-a01e-142dace557d5 + - ! 4a1c98f0-ca77-41c8-b4bf-2eb941c7bfdf +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PackagePath: "" + objects: + - ! c22dd6da-3618-4913-b79e-dbc349d8dc47 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 669c3d6a-8380-4032-bdc2-4b445ae75df1 + - ! f8345933-86df-4f3b-b53c-7e48e1e90dcf +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d50f4720-9e55-4a7b-a3dd-e30441a17269 + - ! b043a560-a01d-498c-afe6-5f704ffdd809 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! d87d9ccc-b812-4ed4-b736-0d6b370151fc + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 4a1c98f0-ca77-41c8-b4bf-2eb941c7bfdf + item: ! cf636233-b03a-4629-8b07-7ee9da5ad3e1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 486b3d2c-47c7-4e29-b883-2b6e152ed6ab + Components: + - ! e832a442-f5e7-4ae5-bdec-d2d8677cdd05 + - ! 04337581-50e2-4ee9-8ed1-2f0e3d79ca1f + - ! 90ec247f-3ef7-4e4b-8b5b-eb835ddf1fb2 + - ! 7b4af132-5953-437a-a3d8-b641aadc388a + - ! 0e9f4dad-cda4-4b9c-b029-f49c59d6f61e + - ! b459046b-7558-4c50-9c4c-6794ef57fdea +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + SourceRemaps: + - 05f4a015-e812-4951-969a-0b6692da2c85: f8345933-86df-4f3b-b53c-7e48e1e90dcf + - 064f1cad-18ee-4fbc-b78f-a77ceb083c1b: d50f4720-9e55-4a7b-a3dd-e30441a17269 + - 0a3995dc-5405-4e72-b86c-a32044d7a013: 4a1c98f0-ca77-41c8-b4bf-2eb941c7bfdf + - 0b10ca56-b7da-45ed-b194-49a2a582decd: 74bdf545-8972-42a8-b36e-2ba455f9f5d0 + - 13c22bd6-f8cd-4c57-8583-6d562aff37e9: e832a442-f5e7-4ae5-bdec-d2d8677cdd05 + - 213fe61f-be1b-45e9-ad79-42687fab2213: 5ebc3e80-41f0-45b8-b781-0073e56d60e4 + - 25cab00e-e179-4a03-8c06-5cdafa3d8400: 97d89735-4c36-4df6-86d8-b4902514d226 + - 2bee27e6-3cfe-40e0-8654-93507a734418: cef8097a-6f4f-4811-85ff-cf754bc9b631 + - 308c1e2c-dfce-47bc-ba96-be56bb5d6caa: 0e9f4dad-cda4-4b9c-b029-f49c59d6f61e + - 3d80a2b7-0afc-4f47-8426-cf330cae822e: d2986312-30ce-414e-858c-ef9f13ea934d + - 5174d39b-ac84-4259-8155-0d33022a5ee9: d4cd6434-45f9-4501-ba64-f4ba9a747f14 + - 54ad9b7b-6b93-4a87-90b0-075d67293314: 04337581-50e2-4ee9-8ed1-2f0e3d79ca1f + - 67ec9c6b-dd75-45b3-a2eb-63bbf22e1578: f257f4e2-e586-45f9-941d-05721055bd54 + - 714479e1-9b3b-4212-929c-69e82e7c7aed: 669c3d6a-8380-4032-bdc2-4b445ae75df1 + - 7dc2ea5f-4f2f-4ac2-87ec-a2385720b27e: ebda812c-31c0-4510-855b-aff6c41c2c33 + - 98583c17-a07e-434f-8f0c-ef91e9aeb180: 3d4816b2-26f1-493b-8c42-521f6a14debb + - 987ee73b-1af2-44a1-ad7f-410c58cfbad9: 6a5042d9-eed1-4eaf-8d17-183b69fd366b + - 9f5b3b07-15e6-48fe-97e7-bebfecf5e056: b459046b-7558-4c50-9c4c-6794ef57fdea + - b60adc9e-2655-45d4-b200-f0431c2a4a65: 42ba2b74-c5c3-42df-a01e-142dace557d5 + - be4a8ee8-1bd1-448a-8e7d-e5d5447f7ee2: 7b4af132-5953-437a-a3d8-b641aadc388a + - c47f6b10-b69f-4045-ac4d-6263997f5c6b: 0c754414-42a9-4905-90e2-eb9d2199415e + - d3dedd65-8bc7-44d8-9794-1d63d0455648: f7452aaf-1ba9-479a-9664-5cbfe99580e3 + - dfa5337e-d140-4a07-a083-47f1d3d8a8ad: b043a560-a01d-498c-afe6-5f704ffdd809 + - eac7865f-b80f-436b-bb1a-a39c82f71858: 90ec247f-3ef7-4e4b-8b5b-eb835ddf1fb2 + - f146ef79-91da-4e8d-9584-8f1ee2e27d68: cf636233-b03a-4629-8b07-7ee9da5ad3e1 + - f40a497f-7a41-4a57-9453-5412d16d9f10: 6d6e8699-ce24-45c7-8271-2675588a0867 + - f84d1274-0e32-401e-829e-ea9a079c42d4: c22dd6da-3618-4913-b79e-dbc349d8dc47 + - fb65533d-fcd3-4619-8b7c-7400d0aece95: 486b3d2c-47c7-4e29-b883-2b6e152ed6ab + SourceState: ! 17ffe289-b64f-4277-950c-36b921043b9a +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! d50f4720-9e55-4a7b-a3dd-e30441a17269 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0c754414-42a9-4905-90e2-eb9d2199415e + - ! d2986312-30ce-414e-858c-ef9f13ea934d + - ! cef8097a-6f4f-4811-85ff-cf754bc9b631 + - ! 3d4816b2-26f1-493b-8c42-521f6a14debb + - ! 6d6e8699-ce24-45c7-8271-2675588a0867 + Components: + - ! ebda812c-31c0-4510-855b-aff6c41c2c33 + - ! 6a5042d9-eed1-4eaf-8d17-183b69fd366b +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f257f4e2-e586-45f9-941d-05721055bd54 + - ! 74bdf545-8972-42a8-b36e-2ba455f9f5d0 + - ! 97d89735-4c36-4df6-86d8-b4902514d226 + - ! 5ebc3e80-41f0-45b8-b781-0073e56d60e4 + - ! f7452aaf-1ba9-479a-9664-5cbfe99580e3 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d4cd6434-45f9-4501-ba64-f4ba9a747f14 + - ! cf636233-b03a-4629-8b07-7ee9da5ad3e1 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab new file mode 100644 index 00000000..8120f089 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! 4d4da0cf-a555-42d9-bbc1-f5bc3758fcaa + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 93612313-0a90-4121-b188-7ebcc75ddd2d + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9c93e4a9-3790-4103-8715-27046ef5f42e + - ! b110ab89-5867-4681-8b4a-f959e671ca7a +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e2156f96-1820-4cf4-9df2-e2b2400e2cdf + Components: + - ! 4b50c70a-f479-469d-8f4a-726628abfd23 + - ! 010e9264-693e-400f-92c4-c30913554812 + - ! bc081610-c6fe-45b4-aec3-79859aad0825 + - ! fa0706a2-cf1b-4a7f-b44c-09fc89c24b93 + - ! 6ce4fdb6-d8cc-41e1-b4ac-33a2f0f3c80b + - ! 2c2e2d2d-f4da-43bd-acdb-8e4287972b67 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c2e85530-895c-4b66-97ae-4c01f14cbd99 + - ! eb5043f0-0485-4778-a5cf-2dfed2fe2901 + - ! a61fef93-912d-45bb-9ce9-e80e83834289 + - ! 2ca0522f-111e-4c27-9acc-fa46a30c1250 + - ! 326760f6-d0fe-41e9-a4c6-8225931a2e42 + Components: + - ! 9eca1883-1781-41d7-84fe-5d7ea848e6d6 + - ! e2ee7e85-6f76-4f18-aa35-a71c5d9067fb +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 350d011f-f256-477d-a8d3-32c2f075d507 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1d5a5d8f-0c8d-491a-9df3-cb41482c90ec + - ! 76753906-bd29-4161-b9d5-82f2bb28fd29 + - ! 407d5ee7-c02b-4578-a66e-3b388cfcba04 + - ! 7e1047c9-2bd3-4c57-ada6-2fa85a869bc5 + - ! 17113f09-a9f1-485b-9347-8cc1431cde43 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6ce5ff74-215f-405c-9fe4-4c15457e96fb + - ! e630fb6a-8edf-458c-b080-9c57d97defa1 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 93612313-0a90-4121-b188-7ebcc75ddd2d + - ! 38e135a7-146b-4185-960f-9afb9367e177 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! e630fb6a-8edf-458c-b080-9c57d97defa1 + item: ! 4023788c-4052-4612-88ff-0ee51ad4a6af + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 848760c4-1b41-4478-923f-ddef2fd75dee + - ! 4023788c-4052-4612-88ff-0ee51ad4a6af +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab.meta new file mode 100644 index 00000000..ab13bd9d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Modern Nose Cone.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! e56db565-cd60-4e54-9dc1-b211e729b73b + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! e56db565-cd60-4e54-9dc1-b211e729b73b + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 2aefb3e3-2735-4c2d-af36-ad922e4e4379 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 203c0c44-285c-4262-9061-dbbede15ee93 + item: ! b1beb072-2b6a-40d1-a71b-a26832e85349 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Modern + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + SourceRemaps: + - 010e9264-693e-400f-92c4-c30913554812: bc6bb6b2-a4e6-4b3f-aac4-7a3ce71ccb0b + - 17113f09-a9f1-485b-9347-8cc1431cde43: 0803b576-eaff-48de-beeb-04a1571de902 + - 1d5a5d8f-0c8d-491a-9df3-cb41482c90ec: 6abf68c1-7a3d-4ef7-b704-9fc28c6e8990 + - 2c2e2d2d-f4da-43bd-acdb-8e4287972b67: b862062f-a2c9-43c9-aad1-ee7f252864f1 + - 2ca0522f-111e-4c27-9acc-fa46a30c1250: e3ff957b-b6eb-4c85-840f-5501be349568 + - 326760f6-d0fe-41e9-a4c6-8225931a2e42: ded9979d-13d0-40c3-bf97-79bbb9db645f + - 38e135a7-146b-4185-960f-9afb9367e177: 0a40c47b-3723-49f6-816c-16b03e53e9d5 + - 4023788c-4052-4612-88ff-0ee51ad4a6af: b1beb072-2b6a-40d1-a71b-a26832e85349 + - 407d5ee7-c02b-4578-a66e-3b388cfcba04: 2e0d3da4-1be1-497b-a111-0e20a439bf75 + - 4b50c70a-f479-469d-8f4a-726628abfd23: 0695d7f5-918d-49f5-aae9-3d256b41e47b + - 4d4da0cf-a555-42d9-bbc1-f5bc3758fcaa: d0b1b74f-31b3-4187-a713-0f7902606aa0 + - 6ce4fdb6-d8cc-41e1-b4ac-33a2f0f3c80b: 0d75f936-b6d7-4929-8eea-a1a5167289dc + - 6ce5ff74-215f-405c-9fe4-4c15457e96fb: 4e9dcdf9-9a48-4e7d-9b08-3a2fedd97dd1 + - 76753906-bd29-4161-b9d5-82f2bb28fd29: 53e5cd6c-414d-4523-b64c-9b9d850288ed + - 7e1047c9-2bd3-4c57-ada6-2fa85a869bc5: 3508ee4a-94aa-4bb5-be67-93a29d4fc244 + - 848760c4-1b41-4478-923f-ddef2fd75dee: 3f7d6a7b-7b18-4441-9b3b-d169852e2ff0 + - 93612313-0a90-4121-b188-7ebcc75ddd2d: a1486918-3e86-4a67-9a5f-fd79e30c4c18 + - 9c93e4a9-3790-4103-8715-27046ef5f42e: 4fe60f56-ae56-48c4-bf09-d860888acdf5 + - 9eca1883-1781-41d7-84fe-5d7ea848e6d6: a9c3ff20-a944-4cda-92e3-db55b41a02b6 + - a61fef93-912d-45bb-9ce9-e80e83834289: 92b3aaf2-5dbf-4403-8f99-7bd65bbf35c5 + - b110ab89-5867-4681-8b4a-f959e671ca7a: 68832b60-68e5-4923-b5e1-2f1373cf6040 + - bc081610-c6fe-45b4-aec3-79859aad0825: da39f12d-6647-41e7-945f-b96276c8f32e + - c2e85530-895c-4b66-97ae-4c01f14cbd99: 69f9e2c1-16d7-4913-b1e8-602c3fa19000 + - e2156f96-1820-4cf4-9df2-e2b2400e2cdf: 6bab6732-b0a7-439b-93de-7fda09820e79 + - e2ee7e85-6f76-4f18-aa35-a71c5d9067fb: 1c75c3d4-ec49-4356-b21a-f4ce09a0ca06 + - e630fb6a-8edf-458c-b080-9c57d97defa1: 203c0c44-285c-4262-9061-dbbede15ee93 + - eb5043f0-0485-4778-a5cf-2dfed2fe2901: e0c2294b-0157-4ab6-b3cc-2933de8a01f3 + - fa0706a2-cf1b-4a7f-b44c-09fc89c24b93: 17ec9f5a-a184-4d8a-b13a-d8d5ccd4f62b + SourceState: ! 62883499-5fc4-42d6-96bd-f0a435d32983 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 350d011f-f256-477d-a8d3-32c2f075d507 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PackagePath: "" + objects: + - ! d0b1b74f-31b3-4187-a713-0f7902606aa0 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4e9dcdf9-9a48-4e7d-9b08-3a2fedd97dd1 + - ! 203c0c44-285c-4262-9061-dbbede15ee93 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a1486918-3e86-4a67-9a5f-fd79e30c4c18 + - ! 0a40c47b-3723-49f6-816c-16b03e53e9d5 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6abf68c1-7a3d-4ef7-b704-9fc28c6e8990 + - ! 53e5cd6c-414d-4523-b64c-9b9d850288ed + - ! 2e0d3da4-1be1-497b-a111-0e20a439bf75 + - ! 3508ee4a-94aa-4bb5-be67-93a29d4fc244 + - ! 0803b576-eaff-48de-beeb-04a1571de902 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! a1486918-3e86-4a67-9a5f-fd79e30c4c18 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 69f9e2c1-16d7-4913-b1e8-602c3fa19000 + - ! e0c2294b-0157-4ab6-b3cc-2933de8a01f3 + - ! 92b3aaf2-5dbf-4403-8f99-7bd65bbf35c5 + - ! e3ff957b-b6eb-4c85-840f-5501be349568 + - ! ded9979d-13d0-40c3-bf97-79bbb9db645f + Components: + - ! a9c3ff20-a944-4cda-92e3-db55b41a02b6 + - ! 1c75c3d4-ec49-4356-b21a-f4ce09a0ca06 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6bab6732-b0a7-439b-93de-7fda09820e79 + Components: + - ! 0695d7f5-918d-49f5-aae9-3d256b41e47b + - ! bc6bb6b2-a4e6-4b3f-aac4-7a3ce71ccb0b + - ! da39f12d-6647-41e7-945f-b96276c8f32e + - ! 17ec9f5a-a184-4d8a-b13a-d8d5ccd4f62b + - ! 0d75f936-b6d7-4929-8eea-a1a5167289dc + - ! b862062f-a2c9-43c9-aad1-ee7f252864f1 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3f7d6a7b-7b18-4441-9b3b-d169852e2ff0 + - ! b1beb072-2b6a-40d1-a71b-a26832e85349 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4fe60f56-ae56-48c4-bf09-d860888acdf5 + - ! 68832b60-68e5-4923-b5e1-2f1373cf6040 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab new file mode 100644 index 00000000..34016d06 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab @@ -0,0 +1,180 @@ +- ! + PackagePath: "" + objects: + - ! e4d87800-e482-451f-9b11-6760655c1786 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.665100 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9cbba2be-7100-4203-923d-228c8bb83d95 + - ! 3eb71fa2-6477-4fff-802b-71eff302be4f +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d8a7dff6-f3ec-4f77-aacd-10ce1fd11f4d + Components: + - ! 0bdcf70d-ee8f-430c-a43a-7b8a2c2bf998 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab.meta new file mode 100644 index 00000000..fd8253b4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Nose Cone Category.prefab.meta @@ -0,0 +1,204 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 8104e815-4316-48be-ad1a-2021666f989f + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 8104e815-4316-48be-ad1a-2021666f989f + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 81ce5b2e-196a-495d-81ad-ae1265f186cf + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e33e2aa5-3b69-4043-9c54-d299d0a2de33 + - ! bd82e01d-8d57-4135-bd51-8c2b40cd00ed +- ! + SourceRemaps: + - 0bdcf70d-ee8f-430c-a43a-7b8a2c2bf998: 93953084-50d8-4b67-b469-60c6db9e419b + - 3eb71fa2-6477-4fff-802b-71eff302be4f: bd82e01d-8d57-4135-bd51-8c2b40cd00ed + - 9cbba2be-7100-4203-923d-228c8bb83d95: e33e2aa5-3b69-4043-9c54-d299d0a2de33 + - d8a7dff6-f3ec-4f77-aacd-10ce1fd11f4d: 2f18ed29-84d9-4078-8f94-3f5ce94a679d + - e4d87800-e482-451f-9b11-6760655c1786: 9ea91039-f999-4878-8e05-ec017017cd70 + SourceState: ! add4d468-52fb-4673-8299-7455e9cb7dc9 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2f18ed29-84d9-4078-8f94-3f5ce94a679d + Components: + - ! 93953084-50d8-4b67-b469-60c6db9e419b +- ! + PackagePath: "" + objects: + - ! 9ea91039-f999-4878-8e05-ec017017cd70 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.000000 + right: 0.665100 + top: 0.000000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab new file mode 100644 index 00000000..8046e8fe --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! c59556e4-4b99-43ff-ae26-201383875418 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 60c75191-41d7-4d40-a8e5-cba46df89805 + - ! e2831ccf-3bdf-4059-a3c3-963b91aea017 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 744d0ebf-a38c-4ea1-86f5-7e6d5aeea8c0 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 60c75191-41d7-4d40-a8e5-cba46df89805 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 569bea8c-7173-4e3d-bbcd-139a079c61c8 + - ! b8b06e72-e48e-4363-ac90-2a8914e77eec +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f30bde82-12d8-4bd1-a826-937e5e3ebf94 + - ! 88f08dee-ba2c-470f-81bd-07e13aa3c6bc +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8d161af3-a5a7-4524-824f-117bf8706557 + - ! 90d4e6e4-0714-479a-9118-aeeb05d3bb0b +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 97c8db06-2847-49b6-8b99-d8efcda537b1 + - ! bca393ea-daaa-47fe-9c8c-ce5366e76fa9 + - ! eb066e26-8167-48e5-95ba-01abcaeddda2 + - ! 94084e15-0897-4dcb-8df4-e1f1e89cff7c + - ! cd590b3f-a211-4bc2-ba77-2eac24e74290 + Components: + - ! 50c16700-38d1-4618-89a6-0580a1ab8a86 + - ! f0e8a853-2cd4-4ed8-bcc4-f92bc8bf7e88 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 23ca54e1-0825-4ea6-adb6-695b63866dc5 + Components: + - ! b460dca1-e257-4432-9ead-f7307792c15d + - ! a05ecd97-aa6a-4b52-9283-6549e2d3fd94 + - ! 7d25a5af-f035-4657-9557-95101ff4fe6e + - ! 17eb10ea-72bf-4e21-8879-4ae631d8016c + - ! fcd33af4-c74a-4ade-9aa7-3068da098576 + - ! 6cc0500f-27e5-4770-bcbc-468b6d5442e2 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dbb8237b-873d-489a-bc2f-c0059766e5db + - ! c4dc5835-f7d0-4eb6-ac69-ede31f56b04f + - ! 09425142-e3fa-48a2-b086-25187917173a + - ! 28633d2d-853f-4b56-9122-28967c0e1cb8 + - ! c2f26cf7-f83a-48c3-9590-059d8a296eaf +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 88f08dee-ba2c-470f-81bd-07e13aa3c6bc + item: ! 90d4e6e4-0714-479a-9118-aeeb05d3bb0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab.meta new file mode 100644 index 00000000..b2de45cf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Body Tube.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 32671acc-9b4d-4487-ac10-3af976d942d7 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 32671acc-9b4d-4487-ac10-3af976d942d7 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! a29727c7-f35e-4c4c-b28b-1089f8485177 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3db0e386-2fe6-4ac0-8f72-bcf7fef9cc2d + - ! 9fb255e7-b980-4860-9fd4-02c0647cb380 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f5040287-3b09-40b1-b1af-82054c347a63 + - ! b7c471b6-efd7-4349-a3a5-b503c178df5a + - ! 6b52870a-62ba-4c33-a0ad-3902d04da2f1 + - ! 92ab2fbb-679b-4321-81e2-3ac3117adb92 + - ! 998ed490-fab9-4e90-965f-7a069aada02d + Components: + - ! 7142af12-b99a-472d-acd8-e5d087b977f6 + - ! b1b2e433-741a-4953-8ebd-bb48cf693664 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 28762f22-f3ee-4a6d-b132-d1efa2e5c32e + - ! e6e1c168-0880-4817-a001-7fa2cdbfd602 + - ! 5c7d5100-701d-4780-916b-3cc889098595 + - ! 0e446cd1-f302-41e8-8e05-77bb13ba4a4d + - ! 2af4d4c0-21e7-4c9f-befa-a33f058e933e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d402173f-565c-4b35-853a-ca9267ce1054 + - ! b9d51376-6542-47ca-b709-9cb014960aaa +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 3db0e386-2fe6-4ac0-8f72-bcf7fef9cc2d + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 123776b5-f235-404d-b6d4-c40e7574cd2e + Components: + - ! 83740d9b-d8c0-4c13-9a30-8d6757adbff5 + - ! 8c4e6328-cdd2-429d-a89a-ee9bc3f4de0b + - ! 621309ab-f8ec-458f-a997-8a552ebf3c11 + - ! 213b617d-4da5-47a8-af5d-b9786b9e5af2 + - ! 4e495714-ea95-4dbd-a15c-adb5e9c2665a + - ! 935ff43c-7d0c-4b76-8db2-7756c8c794e0 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + SourceRemaps: + - 09425142-e3fa-48a2-b086-25187917173a: 5c7d5100-701d-4780-916b-3cc889098595 + - 17eb10ea-72bf-4e21-8879-4ae631d8016c: 213b617d-4da5-47a8-af5d-b9786b9e5af2 + - 23ca54e1-0825-4ea6-adb6-695b63866dc5: 123776b5-f235-404d-b6d4-c40e7574cd2e + - 28633d2d-853f-4b56-9122-28967c0e1cb8: 0e446cd1-f302-41e8-8e05-77bb13ba4a4d + - 50c16700-38d1-4618-89a6-0580a1ab8a86: 7142af12-b99a-472d-acd8-e5d087b977f6 + - 569bea8c-7173-4e3d-bbcd-139a079c61c8: d402173f-565c-4b35-853a-ca9267ce1054 + - 60c75191-41d7-4d40-a8e5-cba46df89805: 3db0e386-2fe6-4ac0-8f72-bcf7fef9cc2d + - 6cc0500f-27e5-4770-bcbc-468b6d5442e2: 935ff43c-7d0c-4b76-8db2-7756c8c794e0 + - 7d25a5af-f035-4657-9557-95101ff4fe6e: 621309ab-f8ec-458f-a997-8a552ebf3c11 + - 88f08dee-ba2c-470f-81bd-07e13aa3c6bc: 3e72ed45-a1e1-43d7-9a2f-de7fadfa77ef + - 8d161af3-a5a7-4524-824f-117bf8706557: 6e129307-da56-4636-a437-b37e6666be20 + - 90d4e6e4-0714-479a-9118-aeeb05d3bb0b: bb9e0dc3-b1ea-468d-857e-c65c3b0b2923 + - 94084e15-0897-4dcb-8df4-e1f1e89cff7c: 92ab2fbb-679b-4321-81e2-3ac3117adb92 + - 97c8db06-2847-49b6-8b99-d8efcda537b1: f5040287-3b09-40b1-b1af-82054c347a63 + - a05ecd97-aa6a-4b52-9283-6549e2d3fd94: 8c4e6328-cdd2-429d-a89a-ee9bc3f4de0b + - b460dca1-e257-4432-9ead-f7307792c15d: 83740d9b-d8c0-4c13-9a30-8d6757adbff5 + - b8b06e72-e48e-4363-ac90-2a8914e77eec: b9d51376-6542-47ca-b709-9cb014960aaa + - bca393ea-daaa-47fe-9c8c-ce5366e76fa9: b7c471b6-efd7-4349-a3a5-b503c178df5a + - c2f26cf7-f83a-48c3-9590-059d8a296eaf: 2af4d4c0-21e7-4c9f-befa-a33f058e933e + - c4dc5835-f7d0-4eb6-ac69-ede31f56b04f: e6e1c168-0880-4817-a001-7fa2cdbfd602 + - c59556e4-4b99-43ff-ae26-201383875418: 352b9977-e0ec-483e-a166-4da6b2c5885b + - cd590b3f-a211-4bc2-ba77-2eac24e74290: 998ed490-fab9-4e90-965f-7a069aada02d + - dbb8237b-873d-489a-bc2f-c0059766e5db: 28762f22-f3ee-4a6d-b132-d1efa2e5c32e + - e2831ccf-3bdf-4059-a3c3-963b91aea017: 9fb255e7-b980-4860-9fd4-02c0647cb380 + - eb066e26-8167-48e5-95ba-01abcaeddda2: 6b52870a-62ba-4c33-a0ad-3902d04da2f1 + - f0e8a853-2cd4-4ed8-bcc4-f92bc8bf7e88: b1b2e433-741a-4953-8ebd-bb48cf693664 + - f30bde82-12d8-4bd1-a826-937e5e3ebf94: 1376f688-27af-4347-bbca-58716ce3559c + - fcd33af4-c74a-4ade-9aa7-3068da098576: 4e495714-ea95-4dbd-a15c-adb5e9c2665a + SourceState: ! f8a2a099-ca65-49b6-977a-7c4bccbe827a +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 3e72ed45-a1e1-43d7-9a2f-de7fadfa77ef + item: ! bb9e0dc3-b1ea-468d-857e-c65c3b0b2923 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6e129307-da56-4636-a437-b37e6666be20 + - ! bb9e0dc3-b1ea-468d-857e-c65c3b0b2923 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 744d0ebf-a38c-4ea1-86f5-7e6d5aeea8c0 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1376f688-27af-4347-bbca-58716ce3559c + - ! 3e72ed45-a1e1-43d7-9a2f-de7fadfa77ef +- ! + PackagePath: "" + objects: + - ! 352b9977-e0ec-483e-a166-4da6b2c5885b + LazyLoading: false + RetainAssets: true diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab new file mode 100644 index 00000000..8cd19e1f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! 1c8c4401-b2ee-40d9-8929-9b60b758a820 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 579aae54-bde4-4c08-bb3b-2e0ee792deae + item: ! f4b04982-4e38-418c-9ddd-eafc6af3fc05 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2b0734c8-4ae9-4f3a-8174-0e4b74b9fe0d + - ! 2fde45c9-c843-4c25-9809-9c9b8848bdb1 + - ! adcfaef5-5245-4ac2-be16-7e0846c355d8 + - ! 8ec41ead-730a-40ac-9fb6-0f60730ceded + - ! d5dd58bd-fa83-4e95-a4a2-e3839bedd412 + Components: + - ! e689eba4-46a5-40eb-9e20-eb7450c87bb9 + - ! 042d361b-7ee8-4153-a97f-e246d8677189 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 35cf5bd3-079b-4aa2-8438-f16e02f859f2 + - ! 579aae54-bde4-4c08-bb3b-2e0ee792deae +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 322e67b1-862c-4cc7-a701-0585ac48b250 + - ! f4b04982-4e38-418c-9ddd-eafc6af3fc05 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bda8e560-94dc-41db-ac44-05ac24037f5c + - ! 365e6e56-b19f-40a3-8408-646fa2dc04df +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 393a8689-9c61-457c-96ed-f4ae7500245f + - ! fec79b87-c89f-4a6a-ae99-b71bd563fbf3 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f71710e7-a63a-4a58-beab-10fba9f2f3d9 + - ! 6c57049b-cec8-4460-8880-c34cf8a7083c + - ! 129c37e4-7829-415c-85a3-e8e9eb65097a + - ! 75c526fd-6bef-4a4f-8e41-1587741b259e + - ! 5056be82-9321-486f-a992-0e98da97ee1d +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 393a8689-9c61-457c-96ed-f4ae7500245f + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 8e124aaf-dd81-4f54-b216-064a0ce92c6f + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! aaf946b9-8dcc-479c-8537-d1d6569f0776 + Components: + - ! d0f23fc8-73d8-433b-88bd-aee687593b79 + - ! 5ae8741a-7b68-4227-8557-7f5a036285bd + - ! 54fab8c4-906d-4e71-8f98-1726ccc6c962 + - ! 3bb2c129-2cff-4080-97aa-c40a2c1b549c + - ! 0034101e-bebb-43f3-a088-0a56e5fe7de8 + - ! bd10a54b-c8dd-417c-b008-fe12dc04e230 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab.meta new file mode 100644 index 00000000..8abcdf96 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Fins.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! f2f3ca41-1bd5-4136-a5db-f3edb882b464 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! f2f3ca41-1bd5-4136-a5db-f3edb882b464 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! c7540764-dda8-46ef-af52-4f23c9e433c6 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 1f227ab5-08a2-485b-bd81-23a17b65cb07 + item: ! 1b0dce03-9abd-4fd8-a75d-3e31de64267c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eb53d0c0-a08f-41a1-85f2-c161fac86999 + - ! f02ce2f7-bb56-401f-9f5b-69adeaf1e0a9 + - ! 77a71968-4c4f-4c0c-bf3a-e80f0f7ac8bf + - ! dbb42706-50e3-4297-b123-a285d186b088 + - ! 24b0f651-0cf4-4fb3-ab69-e148ac03c1f6 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2ee83184-8b05-4c6b-a03e-4650cd54839b + - ! 1f227ab5-08a2-485b-bd81-23a17b65cb07 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9321d236-8fe2-4dd4-9e22-9d2044ae5090 + - ! f5108a5e-af80-4be9-bd4f-544a81a8650c + - ! 3a6004b8-193d-4351-9a77-18e38c508e86 + - ! f75320c8-61c4-4d02-a7a1-9a74b0528a09 + - ! ac679c1d-21aa-4e2c-b6e1-523cc95b8266 + Components: + - ! a371067c-b8a3-4d7a-9f9f-ad917716b4d2 + - ! 21b3a612-20b0-4d1f-bd81-7164efd67247 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! da7abb17-ae2b-4ff1-adc6-6983eb0275b1 + Components: + - ! 7d7681de-8be5-4ef5-b60b-52f8e0fde19b + - ! 5a9a9699-0c3a-422a-9b42-76f4d06f4c84 + - ! 5aa0fd63-5c41-4e91-8279-3e9b0eb67171 + - ! 2053501b-dd37-45ed-97e2-7a67d55d243f + - ! 3d03c550-6376-4e95-8c49-adcc29dda225 + - ! cf3641b7-12bd-4d68-b015-5c41be404cc3 +- ! + PackagePath: "" + objects: + - ! a55f72a6-368a-4f30-b790-268f2dc7a4cc + LazyLoading: false + RetainAssets: true +- ! + SourceRemaps: + - 0034101e-bebb-43f3-a088-0a56e5fe7de8: 3d03c550-6376-4e95-8c49-adcc29dda225 + - 042d361b-7ee8-4153-a97f-e246d8677189: 21b3a612-20b0-4d1f-bd81-7164efd67247 + - 129c37e4-7829-415c-85a3-e8e9eb65097a: 77a71968-4c4f-4c0c-bf3a-e80f0f7ac8bf + - 1c8c4401-b2ee-40d9-8929-9b60b758a820: a55f72a6-368a-4f30-b790-268f2dc7a4cc + - 2b0734c8-4ae9-4f3a-8174-0e4b74b9fe0d: 9321d236-8fe2-4dd4-9e22-9d2044ae5090 + - 2fde45c9-c843-4c25-9809-9c9b8848bdb1: f5108a5e-af80-4be9-bd4f-544a81a8650c + - 322e67b1-862c-4cc7-a701-0585ac48b250: 4a345723-2d06-4fd9-9081-f48d6e88d456 + - 35cf5bd3-079b-4aa2-8438-f16e02f859f2: 2ee83184-8b05-4c6b-a03e-4650cd54839b + - 365e6e56-b19f-40a3-8408-646fa2dc04df: 5ebd35ea-52c8-4f31-9371-b2067790173a + - 393a8689-9c61-457c-96ed-f4ae7500245f: 3968eecc-5e5a-4808-ab69-25c6db277ca8 + - 3bb2c129-2cff-4080-97aa-c40a2c1b549c: 2053501b-dd37-45ed-97e2-7a67d55d243f + - 5056be82-9321-486f-a992-0e98da97ee1d: 24b0f651-0cf4-4fb3-ab69-e148ac03c1f6 + - 54fab8c4-906d-4e71-8f98-1726ccc6c962: 5aa0fd63-5c41-4e91-8279-3e9b0eb67171 + - 579aae54-bde4-4c08-bb3b-2e0ee792deae: 1f227ab5-08a2-485b-bd81-23a17b65cb07 + - 5ae8741a-7b68-4227-8557-7f5a036285bd: 5a9a9699-0c3a-422a-9b42-76f4d06f4c84 + - 6c57049b-cec8-4460-8880-c34cf8a7083c: f02ce2f7-bb56-401f-9f5b-69adeaf1e0a9 + - 75c526fd-6bef-4a4f-8e41-1587741b259e: dbb42706-50e3-4297-b123-a285d186b088 + - 8ec41ead-730a-40ac-9fb6-0f60730ceded: f75320c8-61c4-4d02-a7a1-9a74b0528a09 + - aaf946b9-8dcc-479c-8537-d1d6569f0776: da7abb17-ae2b-4ff1-adc6-6983eb0275b1 + - adcfaef5-5245-4ac2-be16-7e0846c355d8: 3a6004b8-193d-4351-9a77-18e38c508e86 + - bd10a54b-c8dd-417c-b008-fe12dc04e230: cf3641b7-12bd-4d68-b015-5c41be404cc3 + - bda8e560-94dc-41db-ac44-05ac24037f5c: dc324e02-ff33-4249-80fc-4c018405af23 + - d0f23fc8-73d8-433b-88bd-aee687593b79: 7d7681de-8be5-4ef5-b60b-52f8e0fde19b + - d5dd58bd-fa83-4e95-a4a2-e3839bedd412: ac679c1d-21aa-4e2c-b6e1-523cc95b8266 + - e689eba4-46a5-40eb-9e20-eb7450c87bb9: a371067c-b8a3-4d7a-9f9f-ad917716b4d2 + - f4b04982-4e38-418c-9ddd-eafc6af3fc05: 1b0dce03-9abd-4fd8-a75d-3e31de64267c + - f71710e7-a63a-4a58-beab-10fba9f2f3d9: eb53d0c0-a08f-41a1-85f2-c161fac86999 + - fec79b87-c89f-4a6a-ae99-b71bd563fbf3: 038da1e1-cdff-4199-a0da-77346435e66d + SourceState: ! bb9aecbb-d191-438c-b9f1-c3ca8c9bab62 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 3968eecc-5e5a-4808-ab69-25c6db277ca8 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3968eecc-5e5a-4808-ab69-25c6db277ca8 + - ! 038da1e1-cdff-4199-a0da-77346435e66d +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 8e124aaf-dd81-4f54-b216-064a0ce92c6f + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4a345723-2d06-4fd9-9081-f48d6e88d456 + - ! 1b0dce03-9abd-4fd8-a75d-3e31de64267c +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dc324e02-ff33-4249-80fc-4c018405af23 + - ! 5ebd35ea-52c8-4f31-9371-b2067790173a diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab new file mode 100644 index 00000000..86a93335 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! 838d302d-72a7-4b6c-bd0c-22a5dbf6e9bb + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dc9152aa-4140-4a25-9691-65ddffeedca0 + - ! ecb334b3-1077-478b-8b70-940d78f1bc76 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2b52aaf7-f19b-41d4-865a-a58e1774437d + Components: + - ! 59c0e234-d5af-44ec-834e-214def3398dd + - ! 8b57bc6e-fd67-4260-af52-26583636ad4b + - ! 1b52430b-0fda-44b3-8b94-009c5ac38efa + - ! f6f666e3-9051-497f-9dc1-94c40f2b4a6c + - ! f9c66bd4-e86f-4292-8e71-83fccde56ecf + - ! e6a50691-0604-498a-9dc8-b686f9bda8ae +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! bdbb4168-3122-4a6d-86b0-fcec475567f7 + item: ! 14808660-282a-44cb-bf0c-00d0f2b1af66 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a6c732eb-9782-4524-a5a4-c28df6b52032 + - ! 14808660-282a-44cb-bf0c-00d0f2b1af66 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9083824c-4ff4-4c08-9a2f-da15e986de3a + - ! 48eeaa89-164d-4f21-b2c6-a1d2a4caba26 + - ! e814623b-bc9b-44aa-a0d4-b54942c93aa9 + - ! 95988d17-31c2-465c-b963-fa32991a55e1 + - ! 38219481-05cc-4e39-9096-6e675c4407e0 + Components: + - ! af8a7e8c-6e83-4777-ab39-a74b86b9d1d8 + - ! 3c9f8095-088f-4f4a-83c7-6456e688367a +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b38110aa-74f3-40fa-a633-8b9dac7f0c7f + - ! bdbb4168-3122-4a6d-86b0-fcec475567f7 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e65ea222-4aa6-47de-899e-39f4692dbaa2 + - ! 364e1d19-e2ce-49a4-8f8c-076db8fe89f6 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 31e11660-d89a-4744-a17f-4fe8c63d9ac2 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! dc9152aa-4140-4a25-9691-65ddffeedca0 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5155a1c9-cd5a-45f9-9943-196e2bec9820 + - ! 4945c3cd-4c9c-48fe-8f7e-eb336ecd8136 + - ! 29ee179a-5781-4180-9d2c-b172b1b67bf9 + - ! 596042d2-6df2-447e-b3ec-83cdae70bfdc + - ! 843ecdf5-77dd-4519-bb8d-1cbde8abf14f +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab.meta new file mode 100644 index 00000000..8f2666f2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Sleek Nose Cone.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! e7254ab7-df28-44a9-9252-05d53fbdc7da + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! e7254ab7-df28-44a9-9252-05d53fbdc7da + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 54fef43d-08b8-4f49-904d-31bb51cf078c + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6dee0020-bf37-491b-9aa8-9d3775507d62 + - ! 8f409e14-fe2e-4e94-9566-93da63cfccca + - ! 6c821be6-2305-4534-93fc-0f65c0eb81b1 + - ! 24f792e6-09cd-4fde-ba30-d386352313bd + - ! 948f4d75-84a6-4f49-ad2a-dff3b6a37cc5 + Components: + - ! 8a060b1e-9252-4617-ac6d-b3a40f90f8ba + - ! 1c1f5939-47ba-440d-9b58-8fc0002e91d7 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 4096038b-f4c9-469b-b822-e258c4b9daca + item: ! 61d97af7-db2a-4be2-a143-73a83c0eb604 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5bbf2f09-249e-41aa-89b3-17a0cb1fe768 + - ! f546044d-4e9a-4773-a05a-336c2e015f34 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 975d3f07-8446-4fc8-a2c0-1bb89390be55 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Sleek + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + SourceRemaps: + - 14808660-282a-44cb-bf0c-00d0f2b1af66: 61d97af7-db2a-4be2-a143-73a83c0eb604 + - 1b52430b-0fda-44b3-8b94-009c5ac38efa: ff941da2-10b8-4c89-af58-88a963aa3e0b + - 29ee179a-5781-4180-9d2c-b172b1b67bf9: fbb2f2e4-8d93-4966-9b2a-5529e8591d09 + - 2b52aaf7-f19b-41d4-865a-a58e1774437d: a5239480-a59c-4669-a59f-981dd2afd0b4 + - 364e1d19-e2ce-49a4-8f8c-076db8fe89f6: f546044d-4e9a-4773-a05a-336c2e015f34 + - 38219481-05cc-4e39-9096-6e675c4407e0: 948f4d75-84a6-4f49-ad2a-dff3b6a37cc5 + - 3c9f8095-088f-4f4a-83c7-6456e688367a: 1c1f5939-47ba-440d-9b58-8fc0002e91d7 + - 48eeaa89-164d-4f21-b2c6-a1d2a4caba26: 8f409e14-fe2e-4e94-9566-93da63cfccca + - 4945c3cd-4c9c-48fe-8f7e-eb336ecd8136: 84861551-5313-44aa-9842-5eb6071610f8 + - 5155a1c9-cd5a-45f9-9943-196e2bec9820: 7d956625-b739-4c77-b7d5-70884bbb567a + - 596042d2-6df2-447e-b3ec-83cdae70bfdc: 7550b83d-95ce-4c99-a682-85b439307132 + - 59c0e234-d5af-44ec-834e-214def3398dd: 239259ca-6774-4c40-adbe-68cbfee9acc3 + - 838d302d-72a7-4b6c-bd0c-22a5dbf6e9bb: 19d40f35-db70-4cab-b831-ffa38c50f8f2 + - 843ecdf5-77dd-4519-bb8d-1cbde8abf14f: 5fb89456-8d4e-466b-b1fb-dcfb25790642 + - 8b57bc6e-fd67-4260-af52-26583636ad4b: 79d0747f-7294-4b98-9adf-17a501c4a27c + - 9083824c-4ff4-4c08-9a2f-da15e986de3a: 6dee0020-bf37-491b-9aa8-9d3775507d62 + - 95988d17-31c2-465c-b963-fa32991a55e1: 24f792e6-09cd-4fde-ba30-d386352313bd + - a6c732eb-9782-4524-a5a4-c28df6b52032: c157e0d9-38cf-499f-aa55-509693364da3 + - af8a7e8c-6e83-4777-ab39-a74b86b9d1d8: 8a060b1e-9252-4617-ac6d-b3a40f90f8ba + - b38110aa-74f3-40fa-a633-8b9dac7f0c7f: 64990fac-c4f8-467a-a92d-174a21046ff8 + - bdbb4168-3122-4a6d-86b0-fcec475567f7: 4096038b-f4c9-469b-b822-e258c4b9daca + - dc9152aa-4140-4a25-9691-65ddffeedca0: 975d3f07-8446-4fc8-a2c0-1bb89390be55 + - e65ea222-4aa6-47de-899e-39f4692dbaa2: 5bbf2f09-249e-41aa-89b3-17a0cb1fe768 + - e6a50691-0604-498a-9dc8-b686f9bda8ae: 3d73e7b9-7644-467f-b1d2-6252062723c4 + - e814623b-bc9b-44aa-a0d4-b54942c93aa9: 6c821be6-2305-4534-93fc-0f65c0eb81b1 + - ecb334b3-1077-478b-8b70-940d78f1bc76: 08a6b8f0-92eb-4a5d-9695-f4e3203a871b + - f6f666e3-9051-497f-9dc1-94c40f2b4a6c: e90e2fba-40b3-4219-a4a3-2fea74aa2c22 + - f9c66bd4-e86f-4292-8e71-83fccde56ecf: 3d269535-f096-4c8a-b3c4-f464d75f9b3c + SourceState: ! dea200b8-7ec2-47c8-8be5-8f9bbeb9f837 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 31e11660-d89a-4744-a17f-4fe8c63d9ac2 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7d956625-b739-4c77-b7d5-70884bbb567a + - ! 84861551-5313-44aa-9842-5eb6071610f8 + - ! fbb2f2e4-8d93-4966-9b2a-5529e8591d09 + - ! 7550b83d-95ce-4c99-a682-85b439307132 + - ! 5fb89456-8d4e-466b-b1fb-dcfb25790642 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 64990fac-c4f8-467a-a92d-174a21046ff8 + - ! 4096038b-f4c9-469b-b822-e258c4b9daca +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c157e0d9-38cf-499f-aa55-509693364da3 + - ! 61d97af7-db2a-4be2-a143-73a83c0eb604 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a5239480-a59c-4669-a59f-981dd2afd0b4 + Components: + - ! 239259ca-6774-4c40-adbe-68cbfee9acc3 + - ! 79d0747f-7294-4b98-9adf-17a501c4a27c + - ! ff941da2-10b8-4c89-af58-88a963aa3e0b + - ! e90e2fba-40b3-4219-a4a3-2fea74aa2c22 + - ! 3d269535-f096-4c8a-b3c4-f464d75f9b3c + - ! 3d73e7b9-7644-467f-b1d2-6252062723c4 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 975d3f07-8446-4fc8-a2c0-1bb89390be55 + - ! 08a6b8f0-92eb-4a5d-9695-f4e3203a871b +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PackagePath: "" + objects: + - ! 19d40f35-db70-4cab-b831-ffa38c50f8f2 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab new file mode 100644 index 00000000..de7f7c73 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! 1fcf9edf-78dc-439d-93ee-74a6ac9cbcb3 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8c5e9ab6-5e70-4009-9759-0c343738e279 + - ! adaa24a6-c3ee-4a17-8de6-6c9cab6bb851 + - ! f6b9415d-c4b7-4a5e-80c0-7dc25a204a79 + - ! 6cd58e74-24ad-437e-8024-0d457b7efea8 + - ! f9f2fa41-ac29-4db8-b1dd-9697a1759bef + Components: + - ! 58677331-c7df-4d38-b175-f2269b16d1ea + - ! e32542bc-44d2-4827-b3d3-69e490223732 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bbbccf8e-d1a1-4580-8348-cc52637c5249 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4cbd4886-abe1-4394-ad4a-3a92c38c9728 + - ! 05370453-887c-4780-bd2a-652e029a6bc4 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ba4df891-a304-454b-b8b7-2ab9a9e881c1 + - ! 99bf7aab-739e-49d1-a677-82f775e914d3 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 0a42a8e7-4d05-46d8-be51-2f1138e6b2d8 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9975a68e-de62-48a7-8cfb-422203bb0b17 + - ! 0c3029ed-16e2-4f28-9d0a-b6aa6229dea1 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0a42a8e7-4d05-46d8-be51-2f1138e6b2d8 + - ! b3960da4-6872-4df6-96ab-f498718c6a6c +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 99bf7aab-739e-49d1-a677-82f775e914d3 + item: ! 0c3029ed-16e2-4f28-9d0a-b6aa6229dea1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d724ed3e-6cc5-4f8c-abbd-2da39d7095af + - ! 168a905a-77fb-45ed-b0c2-4c500056a714 + - ! 5bb9dcb7-09b0-44f3-82f2-8f2ea45f031e + - ! bd26bace-9ff2-49e3-a2e0-0431619379de + - ! c650310f-f81b-43be-a423-8df04a60c8fd +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! aeafd3b4-05bc-4fe4-9e10-e93cd0a2a0bd + Components: + - ! 6344c490-29f5-415b-9a18-63c17d256977 + - ! df0de1b8-0ac7-4584-b110-31ea4831e57e + - ! 9b87ecb1-7e81-4a0a-b083-459ad16ab883 + - ! 0de6af8b-a7bf-478c-9c71-2a96a823b4f0 + - ! 81b9f874-d48f-4362-985b-79f35eae5ae1 + - ! a31b0884-cc96-4248-94bd-0700633a0e4b diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab.meta new file mode 100644 index 00000000..55f603f2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Body Tube.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 76789411-9f7c-4352-84bb-6a762a706580 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 76789411-9f7c-4352-84bb-6a762a706580 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! e16d868b-888d-4476-95d0-4d79ff900fde + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9c49ce7a-a583-460f-a6bd-182ab42f56ca + - ! 24345ca2-d96b-4993-89b5-96b9d59f9674 +- ! + PackagePath: "" + objects: + - ! de26d101-d8b7-4488-9afb-7205776c6c92 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! f0e7808d-9b61-45e5-80f8-26eb683d7cff + item: ! 554b4583-90c5-4491-878c-f86a2ac41cae + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fe61bbe8-404b-45cc-a905-c515b4e280d6 + - ! 554b4583-90c5-4491-878c-f86a2ac41cae +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 63eaa0f7-6d6e-4e07-9e84-023f9e44e58c + - ! b1af347f-8f97-4acb-9fe6-849dd4d0054e + - ! 41943458-ca53-43d7-b290-2b2c0222b769 + - ! c101c1fa-21b1-4e0b-922f-3d6199007513 + - ! 7024b348-9a84-4a46-a19f-287183c0a3a7 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Body Tube + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0e127245-bbb7-4430-9b23-a12c83a7a0bd + Components: + - ! 3723d6fa-2f9a-4921-bc10-66bad4b64500 + - ! d7e435af-2a20-4e04-bb9e-44f2876febf0 + - ! e4e7334b-992f-413f-bba1-613f2537ad1e + - ! b5f95568-677a-4ac4-b1f2-fd6adf727e1a + - ! b9df867f-daec-4065-a472-c9a3bae7496c + - ! ddb5f368-b2d6-4067-b42e-3d69f3025b47 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 58c447aa-2486-4f1e-97cf-a9a35362709c + - ! f0e7808d-9b61-45e5-80f8-26eb683d7cff +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b93ef8ba-822e-40b8-923b-6769d7cf3b38 + - ! cbb5d64d-86ce-42ab-8285-b5478d581f9f +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bbbccf8e-d1a1-4580-8348-cc52637c5249 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 9c49ce7a-a583-460f-a6bd-182ab42f56ca + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8ed46411-797f-4a87-82c1-dd12448eb91c + - ! 457ce9e1-8a40-417b-9252-e0e03a409ff4 + - ! 47bd2cdf-bf0e-47a9-909f-7fbe29fd3413 + - ! ad3f7812-238e-4571-9be2-01ec326c6582 + - ! 64d6c337-9a6e-4e5d-8026-36706e419f0f + Components: + - ! 6dfb6929-e066-4d78-b210-b186be0da2e1 + - ! 1707310e-d56e-435a-831c-bf4d59e5360f +- ! + SourceRemaps: + - 05370453-887c-4780-bd2a-652e029a6bc4: cbb5d64d-86ce-42ab-8285-b5478d581f9f + - 0a42a8e7-4d05-46d8-be51-2f1138e6b2d8: 9c49ce7a-a583-460f-a6bd-182ab42f56ca + - 0c3029ed-16e2-4f28-9d0a-b6aa6229dea1: 554b4583-90c5-4491-878c-f86a2ac41cae + - 0de6af8b-a7bf-478c-9c71-2a96a823b4f0: b5f95568-677a-4ac4-b1f2-fd6adf727e1a + - 168a905a-77fb-45ed-b0c2-4c500056a714: b1af347f-8f97-4acb-9fe6-849dd4d0054e + - 1fcf9edf-78dc-439d-93ee-74a6ac9cbcb3: de26d101-d8b7-4488-9afb-7205776c6c92 + - 4cbd4886-abe1-4394-ad4a-3a92c38c9728: b93ef8ba-822e-40b8-923b-6769d7cf3b38 + - 58677331-c7df-4d38-b175-f2269b16d1ea: 6dfb6929-e066-4d78-b210-b186be0da2e1 + - 5bb9dcb7-09b0-44f3-82f2-8f2ea45f031e: 41943458-ca53-43d7-b290-2b2c0222b769 + - 6344c490-29f5-415b-9a18-63c17d256977: 3723d6fa-2f9a-4921-bc10-66bad4b64500 + - 6cd58e74-24ad-437e-8024-0d457b7efea8: ad3f7812-238e-4571-9be2-01ec326c6582 + - 81b9f874-d48f-4362-985b-79f35eae5ae1: b9df867f-daec-4065-a472-c9a3bae7496c + - 8c5e9ab6-5e70-4009-9759-0c343738e279: 8ed46411-797f-4a87-82c1-dd12448eb91c + - 9975a68e-de62-48a7-8cfb-422203bb0b17: fe61bbe8-404b-45cc-a905-c515b4e280d6 + - 99bf7aab-739e-49d1-a677-82f775e914d3: f0e7808d-9b61-45e5-80f8-26eb683d7cff + - 9b87ecb1-7e81-4a0a-b083-459ad16ab883: e4e7334b-992f-413f-bba1-613f2537ad1e + - a31b0884-cc96-4248-94bd-0700633a0e4b: ddb5f368-b2d6-4067-b42e-3d69f3025b47 + - adaa24a6-c3ee-4a17-8de6-6c9cab6bb851: 457ce9e1-8a40-417b-9252-e0e03a409ff4 + - aeafd3b4-05bc-4fe4-9e10-e93cd0a2a0bd: 0e127245-bbb7-4430-9b23-a12c83a7a0bd + - b3960da4-6872-4df6-96ab-f498718c6a6c: 24345ca2-d96b-4993-89b5-96b9d59f9674 + - ba4df891-a304-454b-b8b7-2ab9a9e881c1: 58c447aa-2486-4f1e-97cf-a9a35362709c + - bd26bace-9ff2-49e3-a2e0-0431619379de: c101c1fa-21b1-4e0b-922f-3d6199007513 + - c650310f-f81b-43be-a423-8df04a60c8fd: 7024b348-9a84-4a46-a19f-287183c0a3a7 + - d724ed3e-6cc5-4f8c-abbd-2da39d7095af: 63eaa0f7-6d6e-4e07-9e84-023f9e44e58c + - df0de1b8-0ac7-4584-b110-31ea4831e57e: d7e435af-2a20-4e04-bb9e-44f2876febf0 + - e32542bc-44d2-4827-b3d3-69e490223732: 1707310e-d56e-435a-831c-bf4d59e5360f + - f6b9415d-c4b7-4a5e-80c0-7dc25a204a79: 47bd2cdf-bf0e-47a9-909f-7fbe29fd3413 + - f9f2fa41-ac29-4db8-b1dd-9697a1759bef: 64d6c337-9a6e-4e5d-8026-36706e419f0f + SourceState: ! 15f52481-54a6-4b19-9590-5a958cff37fb +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab new file mode 100644 index 00000000..850dba2e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! e09b71f2-5f32-4004-874b-54d4f26cc318 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9228366b-7f28-4dcb-b005-ced91bac69fa + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 43b72f08-2a0a-421c-b6fc-b19b95fadb70 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 43b72f08-2a0a-421c-b6fc-b19b95fadb70 + - ! 470262bf-17d8-449f-b53b-3f092269ab2b +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 15fb381e-cfa7-4be5-831b-1c676795aefe + - ! 558eb459-8dee-474c-8737-06422ad6b595 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cbee2579-9985-4e56-85dc-42e0b48c6766 + - ! 4bc3b60b-a413-497a-b4a3-fb07e581d864 + - ! 82c0db81-8d98-42fb-937f-c080e4e4d3a3 + - ! a3f04b8a-a86a-46b4-9f0c-cb773961fe84 + - ! d7fea74f-1186-43c5-8dbb-ac58b700fab8 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6f94f9bb-d653-47f8-99cf-f9160c3bd15e + - ! 05cacbcd-9606-45fc-a20c-afb83bfe9b44 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! b2a49e7b-0a36-4f33-9aec-61b64f7b102b + item: ! 05cacbcd-9606-45fc-a20c-afb83bfe9b44 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 735b595c-d969-4e6e-8639-b682d3125b76 + - ! b2a49e7b-0a36-4f33-9aec-61b64f7b102b +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5fa6acc1-03c0-479b-8726-dfe0bdda8ecf + Components: + - ! 6448affb-da05-41d2-8a13-6b2d1a336928 + - ! 140babf0-e430-4545-997b-729090701be1 + - ! 3ba56ed9-e5c4-4213-b65d-e4bbd373c471 + - ! 673126e1-84ab-4775-bf70-58b2af909e69 + - ! 1e3c6186-36ca-4645-8adf-0d1b4104a167 + - ! 45ba3b27-56c6-42b4-a517-7c6a2be63cfd +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c9b677f0-2717-40f3-94f7-e1585e33b58d + - ! a6a6e977-d01e-416c-bb9b-26b50f509e4c + - ! 8a8b93a7-4515-4482-9083-823ad1371cb8 + - ! 5fec9439-23d0-4226-bc19-19192cb8df6a + - ! dc4c272c-7e15-43cd-a031-833d17dc3b99 + Components: + - ! 3a767734-c217-45f4-83fe-dc9211ec302c + - ! bf378d61-4f97-43c6-99cc-50d029227192 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab.meta new file mode 100644 index 00000000..76758c65 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Fins.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! dbb1f943-cd3e-4b20-89e5-0ce41c98a705 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! dbb1f943-cd3e-4b20-89e5-0ce41c98a705 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! 1b3f8a90-88cd-4e26-81ff-27976c9f1a40 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PackagePath: "" + objects: + - ! 87030612-0d4c-40c3-be2a-669c76e65d10 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 38582ba4-28f2-477e-8149-8ca7c5892d20 + - ! f55dda3b-a03e-472f-9b80-a8e502617b64 +- ! + SourceRemaps: + - 05cacbcd-9606-45fc-a20c-afb83bfe9b44: ade48859-b464-4f80-97c7-8dbee07b65c5 + - 140babf0-e430-4545-997b-729090701be1: ed3a4eb9-09d1-4750-9390-02ddd68b69d5 + - 15fb381e-cfa7-4be5-831b-1c676795aefe: 7eb656dd-74c7-49d4-8f51-6b3251da76e1 + - 1e3c6186-36ca-4645-8adf-0d1b4104a167: 80309eb4-229b-4832-afc4-199ff90ea9f2 + - 3a767734-c217-45f4-83fe-dc9211ec302c: d8d24895-4796-476a-be81-8c65882f42df + - 3ba56ed9-e5c4-4213-b65d-e4bbd373c471: 2ca1d369-ab4e-423a-b385-3e360c757cb2 + - 43b72f08-2a0a-421c-b6fc-b19b95fadb70: 38582ba4-28f2-477e-8149-8ca7c5892d20 + - 45ba3b27-56c6-42b4-a517-7c6a2be63cfd: 82bc5e39-feb5-4d48-b40d-5b9a965af91e + - 470262bf-17d8-449f-b53b-3f092269ab2b: f55dda3b-a03e-472f-9b80-a8e502617b64 + - 4bc3b60b-a413-497a-b4a3-fb07e581d864: d64864de-b7d8-4446-a2d9-3ec2f7b91321 + - 558eb459-8dee-474c-8737-06422ad6b595: 55fda77f-9a41-45b7-a6a4-2fd33f00b9fd + - 5fa6acc1-03c0-479b-8726-dfe0bdda8ecf: 1239e419-dcbe-4a5f-9bbd-8f7390a6cc65 + - 5fec9439-23d0-4226-bc19-19192cb8df6a: b9c7dddd-d3fa-4c8b-85be-f8135839fb88 + - 6448affb-da05-41d2-8a13-6b2d1a336928: 00cc2e56-2408-4dbd-a827-5d090db347eb + - 673126e1-84ab-4775-bf70-58b2af909e69: 6060e174-5684-4713-9519-2be5508cc2c2 + - 6f94f9bb-d653-47f8-99cf-f9160c3bd15e: 6ca772b3-c48b-4508-ae47-0ef8f0a636b1 + - 735b595c-d969-4e6e-8639-b682d3125b76: 9d3fdc2e-dd57-4b14-af93-c608c71ba695 + - 82c0db81-8d98-42fb-937f-c080e4e4d3a3: 664a13ee-3eb7-4427-99c6-703f390ec14e + - 8a8b93a7-4515-4482-9083-823ad1371cb8: 1e931a1e-b177-4a3d-8052-302119eed464 + - a3f04b8a-a86a-46b4-9f0c-cb773961fe84: 5cd7e0bf-ce21-49c9-a2ca-7aa271ffcddf + - a6a6e977-d01e-416c-bb9b-26b50f509e4c: ef703494-3d41-4e14-b4c8-8ce8207ad97e + - b2a49e7b-0a36-4f33-9aec-61b64f7b102b: 42b09e09-d567-4abc-a440-664556874b3f + - bf378d61-4f97-43c6-99cc-50d029227192: 8ac092a9-27cf-4e67-a40c-aa3a620f7b52 + - c9b677f0-2717-40f3-94f7-e1585e33b58d: 6d7bbd15-c318-4470-8691-d8f42f2dd162 + - cbee2579-9985-4e56-85dc-42e0b48c6766: 750d1fae-f585-480d-9bb4-71d0c6aa30fa + - d7fea74f-1186-43c5-8dbb-ac58b700fab8: 6cb62b8f-7dcc-4c6d-9621-5e0ae9213a3e + - dc4c272c-7e15-43cd-a031-833d17dc3b99: 2430b21b-4f92-4653-8730-c30b7db1146f + - e09b71f2-5f32-4004-874b-54d4f26cc318: 87030612-0d4c-40c3-be2a-669c76e65d10 + SourceState: ! 05816baf-e150-46f9-a3cb-4f460167b5c1 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 750d1fae-f585-480d-9bb4-71d0c6aa30fa + - ! d64864de-b7d8-4446-a2d9-3ec2f7b91321 + - ! 664a13ee-3eb7-4427-99c6-703f390ec14e + - ! 5cd7e0bf-ce21-49c9-a2ca-7aa271ffcddf + - ! 6cb62b8f-7dcc-4c6d-9621-5e0ae9213a3e +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1239e419-dcbe-4a5f-9bbd-8f7390a6cc65 + Components: + - ! 00cc2e56-2408-4dbd-a827-5d090db347eb + - ! ed3a4eb9-09d1-4750-9390-02ddd68b69d5 + - ! 2ca1d369-ab4e-423a-b385-3e360c757cb2 + - ! 6060e174-5684-4713-9519-2be5508cc2c2 + - ! 80309eb4-229b-4832-afc4-199ff90ea9f2 + - ! 82bc5e39-feb5-4d48-b40d-5b9a965af91e +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9d3fdc2e-dd57-4b14-af93-c608c71ba695 + - ! 42b09e09-d567-4abc-a440-664556874b3f +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9228366b-7f28-4dcb-b005-ced91bac69fa + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 38582ba4-28f2-477e-8149-8ca7c5892d20 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6d7bbd15-c318-4470-8691-d8f42f2dd162 + - ! ef703494-3d41-4e14-b4c8-8ce8207ad97e + - ! 1e931a1e-b177-4a3d-8052-302119eed464 + - ! b9c7dddd-d3fa-4c8b-85be-f8135839fb88 + - ! 2430b21b-4f92-4653-8730-c30b7db1146f + Components: + - ! d8d24895-4796-476a-be81-8c65882f42df + - ! 8ac092a9-27cf-4e67-a40c-aa3a620f7b52 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 42b09e09-d567-4abc-a440-664556874b3f + item: ! ade48859-b464-4f80-97c7-8dbee07b65c5 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Fins + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7eb656dd-74c7-49d4-8f51-6b3251da76e1 + - ! 55fda77f-9a41-45b7-a6a4-2fd33f00b9fd +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6ca772b3-c48b-4508-ae47-0ef8f0a636b1 + - ! ade48859-b464-4f80-97c7-8dbee07b65c5 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab new file mode 100644 index 00000000..26aca359 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab @@ -0,0 +1,786 @@ +- ! + PackagePath: "" + objects: + - ! b4f3e188-3f1c-46c5-b12c-455564156d64 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0b4805ca-d62d-4827-a007-8e843fa6dc8a + - ! 7162e67b-0cba-4d63-bdb1-da461439a8ef +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0f52906a-b05b-4cd3-a6d5-2fd73fc4ff00 + Components: + - ! 14b94969-b60e-4c40-ae13-e6f1456b9c26 + - ! 2aa2112d-0e68-4d5c-b5f6-1c42b81d6272 + - ! 12708647-078a-4a90-89e8-60bbe601703e + - ! b72b1e75-2f31-475b-88d0-29d021a594be + - ! d891b297-70e7-47e3-b38f-67ae2a3c6574 + - ! f4f5e768-e9ef-44b9-9b4a-ad89499b475e +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9364e498-5ccc-4774-80c9-ddec2898c64d + - ! 19b63b05-7f5e-4172-947a-800d073764fa + - ! 7443b1ae-0675-4ebe-8c75-960b895954d5 + - ! 7d46e715-e40d-49d6-9a2b-6d94612de00e + - ! c2f380b6-a45c-4da0-92fa-79afe684e758 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b1d2a1ce-6a4b-4af4-aacc-92dc52332333 + - ! c09c9199-e181-4b24-b489-6e2dd11c2add +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b0a49a76-0593-4a5a-8365-72277252b6c5 + - ! b8e4112f-4dec-4d7f-93f2-a0e00a1150ba +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b276a23f-2e6f-44a9-999b-1e6c7d2be98b + - ! 9dcf7003-2543-4a01-963e-2a7b953d1552 + - ! 551233a2-bee8-4716-b5f7-b31054de7964 + - ! fc66bf23-584c-4e1d-a49f-6d4eb9e2c8d5 + - ! 4c8869ce-9e53-42a2-b579-120402a8faea + Components: + - ! 7763dcd2-ce6f-4f92-a285-b99f2d8e4b3f + - ! ba1eb7a5-d971-4c4d-911f-160f2fe2c5e6 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9f7bb172-544f-4eac-9bc1-cd471590c2d5 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! b8e4112f-4dec-4d7f-93f2-a0e00a1150ba + item: ! c09c9199-e181-4b24-b489-6e2dd11c2add + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 0b4805ca-d62d-4827-a007-8e843fa6dc8a + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b95bb3dd-cea5-48a7-b56a-cad2331956e1 + - ! 60054881-a8b4-4e10-beb6-349ec65f01d7 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab.meta new file mode 100644 index 00000000..b9ded003 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Prefabs/ScrollViewListItems/Space Age Nose Cone.prefab.meta @@ -0,0 +1,833 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! b9b3aff4-658d-4c76-ab3d-b479d4a722c8 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! b9b3aff4-658d-4c76-ab3d-b479d4a722c8 + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! da95dbd8-a75e-42fb-a804-a6ac8dc1bcd4 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PackagePath: "" + objects: + - ! b9999559-b8a9-4d0a-9f1b-2251f98d77d7 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3fdfcbbf-be11-4497-83b0-31193acb55c0 + - ! b1e252ca-e085-402c-9c10-cb04f925fac7 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: ButtonSphere + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a91a2068-bf54-4a36-98b4-39b06dddcd74 + Components: + - ! 51a496bf-0aa8-417b-8e43-3d07f9bc95b1 + - ! 9cd9e284-e4a4-4ca7-9eba-7e4f19d5d19e + - ! 44a7031b-23de-465d-b59e-ed5e23f8510e + - ! 0f754e80-2d65-425f-916b-e70044d19904 + - ! 705eb273-8438-422e-b3ea-18126f36b3fb + - ! 91acd3c4-bf47-4dc7-8de9-d99cf1c0b052 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9f7bb172-544f-4eac-9bc1-cd471590c2d5 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketScrollViewItem + Enabled: true + ScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + style: ! 6e1842fc-85a8-42b9-bf22-2bae5a3d54c1 + item: ! cfc12ad9-7ee1-4af0-b5ac-9ca9e0875d11 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 3.000000, y: 3.000000, z: 3.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Space Age + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 30.000000, y: 5.000000, z: 1.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 12c97022-2b07-4d5b-b46d-2e0ad10a7a17 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.150000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Item + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 96a7b292-38b7-47d5-b0f3-d2f6aec5cad1 + - ! cfc12ad9-7ee1-4af0-b5ac-9ca9e0875d11 +- ! + PrefabRemaps: + [] + Name: ButtonSphere Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 12c97022-2b07-4d5b-b46d-2e0ad10a7a17 + - ! 5c421214-29bd-4abf-8d2e-e5c1cb6966de +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d1395b54-ec31-4f62-a77b-6fc082c923b7 + - ! 9e0f1f74-15b8-46a8-b650-1a00b0ce393c + - ! fc15efaf-cab1-4077-9e0e-9ce25eccd746 + - ! 1890c1d2-fd57-49e0-9b6e-a8f24a6d3702 + - ! 3eb6f4fb-572c-415a-a671-edf7127b33ce + Components: + - ! f5638e66-0e8d-4b3d-8e0b-09705eff093e + - ! 4dbc75e4-818a-40b0-9bfc-cb535edecd89 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Nose Cone + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Style + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1539de18-ca81-4d6c-be62-f11b60695f8a + - ! 6e1842fc-85a8-42b9-bf22-2bae5a3d54c1 +- ! + SourceRemaps: + - 0b4805ca-d62d-4827-a007-8e843fa6dc8a: 12c97022-2b07-4d5b-b46d-2e0ad10a7a17 + - 0f52906a-b05b-4cd3-a6d5-2fd73fc4ff00: a91a2068-bf54-4a36-98b4-39b06dddcd74 + - 12708647-078a-4a90-89e8-60bbe601703e: 44a7031b-23de-465d-b59e-ed5e23f8510e + - 14b94969-b60e-4c40-ae13-e6f1456b9c26: 51a496bf-0aa8-417b-8e43-3d07f9bc95b1 + - 19b63b05-7f5e-4172-947a-800d073764fa: eaa48624-9ecc-4c57-bb57-a41f0a30ba74 + - 2aa2112d-0e68-4d5c-b5f6-1c42b81d6272: 9cd9e284-e4a4-4ca7-9eba-7e4f19d5d19e + - 4c8869ce-9e53-42a2-b579-120402a8faea: 3eb6f4fb-572c-415a-a671-edf7127b33ce + - 551233a2-bee8-4716-b5f7-b31054de7964: fc15efaf-cab1-4077-9e0e-9ce25eccd746 + - 60054881-a8b4-4e10-beb6-349ec65f01d7: b1e252ca-e085-402c-9c10-cb04f925fac7 + - 7162e67b-0cba-4d63-bdb1-da461439a8ef: 5c421214-29bd-4abf-8d2e-e5c1cb6966de + - 7443b1ae-0675-4ebe-8c75-960b895954d5: 87e135a2-336d-41a9-bae4-c86cc5d2c19f + - 7763dcd2-ce6f-4f92-a285-b99f2d8e4b3f: f5638e66-0e8d-4b3d-8e0b-09705eff093e + - 7d46e715-e40d-49d6-9a2b-6d94612de00e: af0cbbab-6dc1-41a5-a50b-7694b79e0203 + - 9364e498-5ccc-4774-80c9-ddec2898c64d: 1b808e6c-93ea-47cb-a944-bbc7aa5cebf1 + - 9dcf7003-2543-4a01-963e-2a7b953d1552: 9e0f1f74-15b8-46a8-b650-1a00b0ce393c + - b0a49a76-0593-4a5a-8365-72277252b6c5: 1539de18-ca81-4d6c-be62-f11b60695f8a + - b1d2a1ce-6a4b-4af4-aacc-92dc52332333: 96a7b292-38b7-47d5-b0f3-d2f6aec5cad1 + - b276a23f-2e6f-44a9-999b-1e6c7d2be98b: d1395b54-ec31-4f62-a77b-6fc082c923b7 + - b4f3e188-3f1c-46c5-b12c-455564156d64: b9999559-b8a9-4d0a-9f1b-2251f98d77d7 + - b72b1e75-2f31-475b-88d0-29d021a594be: 0f754e80-2d65-425f-916b-e70044d19904 + - b8e4112f-4dec-4d7f-93f2-a0e00a1150ba: 6e1842fc-85a8-42b9-bf22-2bae5a3d54c1 + - b95bb3dd-cea5-48a7-b56a-cad2331956e1: 3fdfcbbf-be11-4497-83b0-31193acb55c0 + - ba1eb7a5-d971-4c4d-911f-160f2fe2c5e6: 4dbc75e4-818a-40b0-9bfc-cb535edecd89 + - c09c9199-e181-4b24-b489-6e2dd11c2add: cfc12ad9-7ee1-4af0-b5ac-9ca9e0875d11 + - c2f380b6-a45c-4da0-92fa-79afe684e758: bea0687c-c81e-4c5c-a2e4-b142097182a9 + - d891b297-70e7-47e3-b38f-67ae2a3c6574: 705eb273-8438-422e-b3ea-18126f36b3fb + - f4f5e768-e9ef-44b9-9b4a-ad89499b475e: 91acd3c4-bf47-4dc7-8de9-d99cf1c0b052 + - fc66bf23-584c-4e1d-a49f-6d4eb9e2c8d5: 1890c1d2-fd57-49e0-9b6e-a8f24a6d3702 + SourceState: ! 013f1cdc-62c6-4ef6-addc-080a36b920f4 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1b808e6c-93ea-47cb-a944-bbc7aa5cebf1 + - ! eaa48624-9ecc-4c57-bb57-a41f0a30ba74 + - ! 87e135a2-336d-41a9-bae4-c86cc5d2c19f + - ! af0cbbab-6dc1-41a5-a50b-7694b79e0203 + - ! bea0687c-c81e-4c5c-a2e4-b142097182a9 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts new file mode 100644 index 00000000..a1e3084a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts @@ -0,0 +1,88 @@ +/** + * This class manages the exhaust and smoke effects for a scene. It initializes the materials and VFX components for the exhausts and smokes, and provides methods to control their states. + * + */ +@component +export class ExhaustControls extends BaseScriptComponent { + @input + exhausts: SceneObject[] = [] + + @input + smokes: SceneObject[] = [] + + private exhaustFireMaterials: Material[] = [] + private exhaustGlowMaterials: Material[] = [] + private smokeVFXs: VFXComponent[] = [] + + onAwake(): void { + this.initExhaustMaterials() + this.initSmokeVFXs() + this.turnOffExhausts() + this.turnOffSmokes() + } + + initExhaustMaterials = (): void => { + for (let i = 0; i < this.exhausts.length; i++) { + this.exhaustFireMaterials.push( + this.exhausts[i].getChild(0).getComponent("RenderMeshVisual") + .mainMaterial, + ) + + this.exhaustGlowMaterials.push( + this.exhausts[i] + .getChild(0) + .getChild(0) + .getComponent("RenderMeshVisual").mainMaterial, + ) + } + } + + initSmokeVFXs = (): void => { + for (let i = 0; i < this.smokes.length; i++) { + this.smokeVFXs.push(this.smokes[i].getComponent("Component.VFXComponent")) + } + } + + engineReady = (): void => { + for (let i = 0; i < this.exhausts.length; i++) { + this.exhausts[i].enabled = true + this.exhaustFireMaterials[i].mainPass.fire_scale = 1.0 + this.exhaustGlowMaterials[i].mainPass.glow_scale = 1.0 + } + } + + turnOnExhausts = (): void => { + for (let i = 0; i < this.exhausts.length; i++) { + this.exhausts[i].enabled = true + this.exhaustFireMaterials[i].mainPass.fire_scale = 0.15 + this.exhaustGlowMaterials[i].mainPass.glow_scale = 0.15 + } + } + + turnOffExhausts = (): void => { + for (let i = 0; i < this.exhausts.length; i++) { + this.exhausts[i].enabled = false + this.exhaustFireMaterials[i].mainPass.fire_scale = 0.0 + this.exhaustGlowMaterials[i].mainPass.glow_scale = 0.0 + } + } + + turnOnSmokes = (): void => { + for (let i = 0; i < this.smokes.length; i++) { + this.smokes[i].enabled = true + } + } + + turnOffSmokes = (): void => { + for (let i = 0; i < this.smokes.length; i++) { + this.smokes[i].enabled = false + } + } + + setEngineSmokesValue = (value: any): void => { + for (let i = 0; i < this.smokes.length; i++) { + const particles: any = this.smokeVFXs[i].asset.properties + particles["particlesReduce"] = value + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts.meta new file mode 100644 index 00000000..e2f7d3a4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/ExhaustControls.ts.meta @@ -0,0 +1,43 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 8a960278-52eb-4a46-ab2a-38be6fcadb24 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! e793fd47-3848-4621-aa8a-ecc13f95330e + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + exhausts: false + smokes: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - exhausts: ! + [] + smokes: ! + [] + ScriptTypes: + - + {} + InputLines: + - "// @input SceneObject[] exhausts" + - "// @input SceneObject[] smokes" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts new file mode 100644 index 00000000..f649a97c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts @@ -0,0 +1,146 @@ +import {ExhaustControls} from "./ExhaustControls" +import {validate} from "../../../Utils/validate" + +/** + * This class is responsible for configuring the rocket by setting up its parts and managing the exhaust controls. It initializes the rocket sections and provides methods to set rocket part sections. + * + */ +@component +export class RocketConfigurator extends BaseScriptComponent { + @input + rocket!: SceneObject + + @input + allRocketParts: ObjectPrefab[] = [] + + private topSection: SceneObject | null = null + private middleSection: SceneObject | null = null + private bottomSection: SceneObject | null = null + + exhaustControl: ExhaustControls | null = null + + private noseConeBackingImages: Map = new Map() + private bodyTubeBackingImages: Map = new Map() + private finsBackingImages: Map = new Map() + + private activeBackingTexture: Texture = requireAsset( + "../../../Assets/Textures/Rectangle-Active.png" + ) as Texture + private inactiveBackingTexture: Texture = requireAsset( + "../../../Assets/Textures/Rectangle-Inactive.png" + ) as Texture + + onAwake(): void { + this.setUpRocket() + } + + private setUpRocket = (): void => { + for (let i = 0; i < this.allRocketParts.length; i++) { + if (this.allRocketParts[i].name === "Space Age Nose Cone") { + this.topSection = this.allRocketParts[i].instantiate(this.rocket) + } + if (this.allRocketParts[i].name === "Space Age Body Tube") { + this.middleSection = this.allRocketParts[i].instantiate(this.rocket) + } + if (this.allRocketParts[i].name === "Space Age Fins") { + this.bottomSection = this.allRocketParts[i].instantiate(this.rocket) + } + } + } + + setRocketPartSection = (style: string, item: string): void => { + if (isNull(this.topSection)) throw new Error("Top section is null!") + if (isNull(this.middleSection)) throw new Error("Middle section is null!") + if (isNull(this.bottomSection)) throw new Error("Bottom section is null!") + + const combinedName = style + " " + item + let rocketPart + + if (item === "Nose Cone") { + if (this.topSection !== null) this.topSection.destroy() + for (let i = 0; i < this.allRocketParts.length; i++) { + if (combinedName === this.allRocketParts[i].name) { + rocketPart = this.allRocketParts[i].instantiate(this.rocket) + } + } + if (rocketPart !== undefined) { + this.topSection = rocketPart + } else { + throw new Error("Rocket part is undefined!") + } + } else if (item === "Body Tube") { + if (this.middleSection !== null) this.middleSection.destroy() + for (let i = 0; i < this.allRocketParts.length; i++) { + if (combinedName === this.allRocketParts[i].name) { + rocketPart = this.allRocketParts[i].instantiate(this.rocket) + } + } + if (rocketPart !== undefined) { + this.middleSection = rocketPart + } else { + throw new Error("Rocket part is undefined!") + } + } else if (item === "Fins") { + if (this.bottomSection !== null) this.bottomSection.destroy() + for (let i = 0; i < this.allRocketParts.length; i++) { + if (combinedName === this.allRocketParts[i].name) { + rocketPart = this.allRocketParts[i].instantiate(this.rocket) + } + } + if (rocketPart !== undefined) { + this.bottomSection = rocketPart + } else { + throw new Error("Rocket part is undefined!") + } + } + + this.setBackingColorsByPartType(style, item) + } + + registerRocketListItemBacking = ( + style: string, + item: string, + backing: Image, + ): void => { + if (item === "Nose Cone") { + this.noseConeBackingImages.set(style, backing) + } else if (item === "Body Tube") { + this.bodyTubeBackingImages.set(style, backing) + } else if (item === "Fins") { + this.finsBackingImages.set(style, backing) + } + + if (style === "Space Age") { + backing.mainMaterial.mainPass.baseTex = this.activeBackingTexture + } + } + + private setBackingColorsByPartType = (style: string, item: string): void => { + if (item === "Nose Cone") { + this.setBackingColors(this.noseConeBackingImages, style) + } else if (item === "Body Tube") { + this.setBackingColors(this.bodyTubeBackingImages, style) + } else if (item === "Fins") { + this.setBackingColors(this.finsBackingImages, style) + } + } + + private setBackingColors(map: Map, style: string): void { + map.forEach((image, key) => { + if (key === style) { + // active + image.mainMaterial.mainPass.baseTex = this.activeBackingTexture + } else { + // inactive + image.mainMaterial.mainPass.baseTex = this.inactiveBackingTexture + } + }) + } + + getExhaustControl = (): void => { + validate(this.bottomSection) + this.exhaustControl = this.bottomSection.getComponent( + ExhaustControls.getTypeName(), + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts.meta new file mode 100644 index 00000000..f50aa363 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketConfigurator.ts.meta @@ -0,0 +1,42 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 85cb5de9-5fbb-4fbd-9775-2ac32bd619fe + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 85cb5de9-5fbb-4fbd-9775-2ac32bd619fe + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 300bdcd1-a24e-4e57-81bb-677b55ce8ccb + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + allRocketParts: false + rocket: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - allRocketParts: ! + [] + rocket: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input SceneObject rocket + - "// @input Asset.ObjectPrefab[] allRocketParts" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts new file mode 100644 index 00000000..a8a0d44b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts @@ -0,0 +1,44 @@ +import {RocketConfigurator} from "./RocketConfigurator" +import {RocketScrollViewItem} from "./RocketScrollViewItem" + +const Y_START: number = 0 +const Y_OFFSET: number = -5.4 + +/** + * This class is responsible for creating and initializing the content of a rocket grid. It uses object prefabs to instantiate items and configure their positions and properties. + * + */ +@component +export class RocketGridContentCreator extends BaseScriptComponent { + @input + rocketConfigurator!: RocketConfigurator + + @input + objectPrefabs: ObjectPrefab[] = [] + + onAwake(): void { + if (isNull(this.rocketConfigurator)) { + throw new Error("RocketGridContentCreator: rocketConfigurator is null!") + } + if (this.objectPrefabs.length === 0) { + throw new Error("RocketGridContentCreator: objectPrefabs array is empty!") + } + + const sceneObj = this.getSceneObject() + const rocketScrollViewItemTypeName = RocketScrollViewItem.getTypeName() + + for (let i = 0; i < this.objectPrefabs.length; i++) { + const prefabIndex = i % this.objectPrefabs.length + const prefab = this.objectPrefabs[prefabIndex] + const item = prefab.instantiate(sceneObj) + const screenTransform = item.getComponent("Component.ScreenTransform") + screenTransform.offsets.setCenter(new vec2(0, Y_START + Y_OFFSET * i)) + item.enabled = true + let rocketScrollViewItem: RocketScrollViewItem | null = item.getComponent( + rocketScrollViewItemTypeName, + ) + if (rocketScrollViewItem !== null) + rocketScrollViewItem.init(this.rocketConfigurator) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts.meta new file mode 100644 index 00000000..4cc58ddc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketGridContentCreator.ts.meta @@ -0,0 +1,42 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 01cb4976-7110-49ff-ae27-dbb77153e547 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 01cb4976-7110-49ff-ae27-dbb77153e547 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! bab377e8-f1c4-49b7-85eb-435aae2220ff + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + objectPrefabs: false + rocketConfigurator: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - objectPrefabs: ! + [] + rocketConfigurator: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input RocketConfigurator rocketConfigurator + - "// @input Asset.ObjectPrefab[] objectPrefabs" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts new file mode 100644 index 00000000..5b15663c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts @@ -0,0 +1,288 @@ +import {Interactable} from "../../../Components/Interaction/Interactable/Interactable" +import {RocketConfigurator} from "./RocketConfigurator" +import {Slider} from "../../../Components/UI/Slider/Slider" +import {ToggleButton} from "../../../Components/UI/ToggleButton/ToggleButton" +import {validate} from "../../../Utils/validate" + +const FLIGHT_END_EVENT_NAME = "flightEnded" + +/** + * This class manages the rocket launch control interface, including the launch button, animation buttons, and slider. It interacts with the RocketConfigurator to configure and launch the rocket. + * + */ +@component +export class RocketLaunchControl extends BaseScriptComponent { + @input + slider!: Slider + + @input + animationAButton!: SceneObject + @input + animationBButton!: SceneObject + @input + animationCButton!: SceneObject + + @input + launchButton!: SceneObject + + @input + rocketConf!: RocketConfigurator + + @input + launchSparks!: SceneObject + + @input + rocketAnimationPlayer!: AnimationPlayer + + @input + flightPathText!: Text + + @input + launchPlatformToggleButton!: ToggleButton + + @input + launchPlatform!: SceneObject + + private launchButton_interactable: Interactable | null = null + private animationAButton_interactable: Interactable | null = null + private animationBButton_interactable: Interactable | null = null + private animationCButton_interactable: Interactable | null = null + private currentLaunchAnimationName: string = "Base Layer Rocket 1" + private flightEndEventRegistration: EventRegistration | null = null + private launchButtonText: Text | undefined + + private currentClip: AnimationClip | undefined + + private engineStartedEvent: DelayedCallbackEvent | null = null + private engineReadyEvent: DelayedCallbackEvent | null = null + private rocketTakeOffEvent: DelayedCallbackEvent | null = null + private takeOffCompleteEvent: DelayedCallbackEvent | null = null + private landingStartedEvent: DelayedCallbackEvent | null = null + private launchSparksDisableEvent: DelayedCallbackEvent | null = null + + onAwake(): void { + this.createEvent("OnStartEvent").bind(() => { + this.onStart() + }) + + this.launchSparksDisableEvent = this.createEvent("DelayedCallbackEvent") + this.launchSparksDisableEvent.bind(() => { + this.launchSparks.enabled = false + }) + + const interactableTypeName = Interactable.getTypeName() + + this.launchButton_interactable = + this.launchButton.getComponent(interactableTypeName) + if (isNull(this.launchButton_interactable)) { + throw new Error("Interactable component not found.") + } + this.animationAButton_interactable = + this.animationAButton.getComponent(interactableTypeName) + if (isNull(this.animationAButton_interactable)) { + throw new Error("Interactable component not found.") + } + this.animationBButton_interactable = + this.animationBButton.getComponent(interactableTypeName) + if (isNull(this.animationBButton_interactable)) { + throw new Error("Interactable component not found.") + } + this.animationCButton_interactable = + this.animationCButton.getComponent(interactableTypeName) + if (isNull(this.animationCButton_interactable)) { + throw new Error("Interactable component not found.") + } + + this.launchButtonText = this.launchButton.getChild(0).getComponent("Text") + + this.launchSparks.enabled = false + + this.engineStartedEvent = this.createEvent("DelayedCallbackEvent") + this.engineStartedEvent.bind(() => { + this.engineStarted() + }) + this.engineReadyEvent = this.createEvent("DelayedCallbackEvent") + this.engineReadyEvent.bind(() => { + this.engineReady() + }) + this.rocketTakeOffEvent = this.createEvent("DelayedCallbackEvent") + this.rocketTakeOffEvent.bind(() => { + this.rocketTakeOff() + }) + this.takeOffCompleteEvent = this.createEvent("DelayedCallbackEvent") + this.takeOffCompleteEvent.bind(() => { + this.takeOffCompleted() + }) + this.landingStartedEvent = this.createEvent("DelayedCallbackEvent") + this.landingStartedEvent.bind(() => { + this.landingStarted() + }) + + this.subscribeToCurrentLaunchAnimationEndEvent() + } + + onStart() { + this.setupLaunchButtonCallbacks() + this.setupAnimationAButtonCallbacks() + this.setupAnimationBButtonCallbacks() + this.setupAnimationCButtonCallbacks() + + this.launchPlatformToggleButton.onStateChanged.add( + (isToggledOn: boolean) => { + if (isToggledOn) { + this.launchPlatform.enabled = true + } else { + this.launchPlatform.enabled = false + } + }, + ) + } + + private setupLaunchButtonCallbacks = (): void => { + validate(this.launchButton_interactable) + this.launchButton_interactable.onTriggerEnd.add(this.onLaunchButton) + } + + private onLaunchButton = (): void => { + validate(this.engineStartedEvent) + validate(this.launchButton_interactable) + validate(this.launchButtonText) + + this.engineStartedEvent.reset(0) + this.launchButton_interactable.enabled = false + this.launchButtonText.text = "Flight in Progress" + this.launchButtonText.size = 40 + } + + private engineStarted(): void { + this.rocketConf.getExhaustControl() + validate(this.rocketConf.exhaustControl) + validate(this.engineReadyEvent) + + this.rocketConf.exhaustControl.setEngineSmokesValue(1.1) + this.rocketConf.exhaustControl.turnOnExhausts() + this.rocketConf.exhaustControl.turnOnSmokes() + + this.engineReadyEvent.reset(0.5) + } + + private engineReady(): void { + validate(this.rocketConf.exhaustControl) + validate(this.rocketTakeOffEvent) + + this.rocketConf.exhaustControl.engineReady() + this.rocketConf.exhaustControl.setEngineSmokesValue(0.8) + + this.rocketTakeOffEvent.reset(0.5) + } + + private rocketTakeOff(): void { + validate(this.rocketConf.exhaustControl) + this.rocketConf.exhaustControl.setEngineSmokesValue(0.0) + + this.rocketAnimationPlayer.playClipAt(this.currentLaunchAnimationName, 0.0) + + validate(this.slider) + + this.rocketAnimationPlayer.getClip( + this.currentLaunchAnimationName, + ).playbackSpeed = MathUtils.remap( + this.slider.currentValue ?? 0, + 0.0, + 1.0, + 1.0, + 5.0, + ) + this.launchSparks.enabled = true + + validate(this.launchSparksDisableEvent) + + this.launchSparksDisableEvent.reset(0.5) + + this.currentClip = this.rocketAnimationPlayer.getClip( + this.currentLaunchAnimationName, + ) + + validate(this.currentClip) + validate(this.landingStartedEvent) + validate(this.takeOffCompleteEvent) + + this.landingStartedEvent.reset( + (this.currentClip.duration / this.currentClip.playbackSpeed) * 0.9, + ) + + this.takeOffCompleteEvent.reset( + (this.currentClip.duration / this.currentClip.playbackSpeed) * 0.2, + ) + } + + private takeOffCompleted(): void { + print("Take Off Completed!") + } + + private landingStarted(): void { + print("Landing Started!") + validate(this.rocketConf.exhaustControl) + this.rocketConf.exhaustControl.turnOffExhausts() + } + + private setupAnimationAButtonCallbacks = (): void => { + validate(this.animationAButton_interactable) + this.animationAButton_interactable.onTriggerEnd.add(this.onAnimationAButton) + } + + private onAnimationAButton = (): void => { + this.currentLaunchAnimationName = "Base Layer Rocket 1" + this.subscribeToCurrentLaunchAnimationEndEvent() + this.flightPathText.text = "Flight Path : A" + } + + private setupAnimationBButtonCallbacks = (): void => { + validate(this.animationBButton_interactable) + this.animationBButton_interactable.onTriggerEnd.add(this.onAnimationBButton) + } + + private onAnimationBButton = (): void => { + this.currentLaunchAnimationName = "Base Layer Rocket 2" + this.subscribeToCurrentLaunchAnimationEndEvent() + this.flightPathText.text = "Flight Path : B" + } + + private setupAnimationCButtonCallbacks = (): void => { + validate(this.animationCButton_interactable) + this.animationCButton_interactable.onTriggerEnd.add(this.onAnimationCButton) + } + + private onAnimationCButton = (): void => { + this.currentLaunchAnimationName = "Base Layer Rocket 3" + this.subscribeToCurrentLaunchAnimationEndEvent() + this.flightPathText.text = "Flight Path : C" + } + + private subscribeToCurrentLaunchAnimationEndEvent = (): void => { + let currentAnimationClip = this.rocketAnimationPlayer.getClip( + this.currentLaunchAnimationName, + ) + let flightEndTimestamp = currentAnimationClip.duration + currentAnimationClip.animation.createEvent( + FLIGHT_END_EVENT_NAME, + flightEndTimestamp, + ) + + this.flightEndEventRegistration = this.rocketAnimationPlayer.onEvent.add( + this.onAnimationEnd.bind(this), + ) + } + + private onAnimationEnd = (eventData: AnimationPlayerOnEventArgs): void => { + if (eventData.eventName === FLIGHT_END_EVENT_NAME) { + validate(this.rocketConf.exhaustControl) + validate(this.launchButton_interactable) + validate(this.launchButtonText) + this.rocketConf.exhaustControl.turnOffSmokes() + this.launchButton_interactable.enabled = true + this.launchButtonText.text = "Launch!" + this.launchButtonText.size = 48 + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts.meta new file mode 100644 index 00000000..9a33bf0e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketLaunchControl.ts.meta @@ -0,0 +1,68 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! c0c12ffb-ecd8-43f8-8d68-f490810b1be0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c0c12ffb-ecd8-43f8-8d68-f490810b1be0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! a932dc64-4f94-4c1c-8bf5-9d90428212dd + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + animationAButton: false + animationBButton: false + animationCButton: false + flightPathText: false + launchButton: false + launchPlatform: false + launchPlatformToggleButton: false + launchSparks: false + rocketAnimationPlayer: false + rocketConf: false + slider: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - slider: ! 00000000-0000-0000-0000-000000000000 + animationAButton: ! 00000000-0000-0000-0000-000000000000 + animationBButton: ! 00000000-0000-0000-0000-000000000000 + animationCButton: ! 00000000-0000-0000-0000-000000000000 + launchButton: ! 00000000-0000-0000-0000-000000000000 + rocketAnimationPlayer: ! 00000000-0000-0000-0000-000000000000 + launchSparks: ! 00000000-0000-0000-0000-000000000000 + rocketConf: ! 00000000-0000-0000-0000-000000000000 + flightPathText: ! 00000000-0000-0000-0000-000000000000 + launchPlatformToggleButton: ! 00000000-0000-0000-0000-000000000000 + launchPlatform: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input Slider slider + - // @input SceneObject animationAButton + - // @input SceneObject animationBButton + - // @input SceneObject animationCButton + - // @input SceneObject launchButton + - // @input RocketConfigurator rocketConf + - // @input SceneObject launchSparks + - // @input Component.AnimationPlayer rocketAnimationPlayer + - // @input Component.Text flightPathText + - // @input ToggleButton launchPlatformToggleButton + - // @input SceneObject launchPlatform diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts new file mode 100644 index 00000000..3dde4704 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts @@ -0,0 +1,67 @@ +import {Interactable} from "../../../Components/Interaction/Interactable/Interactable" +import {findSceneObjectByName} from "../../../Utils/SceneObjectUtils" +import {validate} from "../../../Utils/validate" +import {RocketConfigurator} from "./RocketConfigurator" + +/** + * This class represents an item in the rocket scroll view. It handles interactions and communicates with the RocketConfigurator to update the rocket configuration. + * + */ +@component +export class RocketScrollViewItem extends BaseScriptComponent { + @input + style!: Text + + @input + item!: Text + + private interactable: Interactable | null = null + private backingImage: Image | undefined + private rocketConfigurator: RocketConfigurator | null = null + + onAwake(): void {} + + init(rocketConfigurator: RocketConfigurator): void { + this.rocketConfigurator = rocketConfigurator + this.registerRocketListItemBacking() + if (isNull(this.rocketConfigurator)) + throw new Error("RocketConfigurator is null!") + validate(this.backingImage) + this.interactable = this.backingImage.sceneObject.getComponent( + Interactable.getTypeName() + ) + if (isNull(this.interactable)) + throw new Error("Interactable component not found!") + this.setupCallbacks() + } + + private setupCallbacks = (): void => { + validate(this.interactable) + this.interactable.onTriggerEnd.add(this.onTriggerEndEvent) + } + + private onTriggerEndEvent = (): void => { + validate(this.rocketConfigurator) + this.rocketConfigurator.setRocketPartSection( + this.style.text, + this.item.text + ) + } + + private registerRocketListItemBacking = (): void => { + let backingObject: SceneObject | null = findSceneObjectByName( + this.sceneObject, + "Background" + ) + validate(backingObject) + this.backingImage = backingObject.getComponent("Image") + validate(this.backingImage, "Backing image is undefined!") + this.backingImage.mainMaterial = this.backingImage.mainMaterial.clone() + validate(this.rocketConfigurator) + this.rocketConfigurator.registerRocketListItemBacking( + this.style.text, + this.item.text, + this.backingImage + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts.meta new file mode 100644 index 00000000..f500f787 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Scripts/RocketScrollViewItem.ts.meta @@ -0,0 +1,41 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 23001127-75f4-4bf5-84aa-6972bf87d754 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 2072be5a-f51b-4a94-9fc1-26880d8d5d54 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + item: false + style: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - style: ! 00000000-0000-0000-0000-000000000000 + item: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input Component.Text style + - // @input Component.Text item diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph new file mode 100644 index 00000000..c74e950a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d61af7299bac855c8414c74571ab0678a239f64b1bf6e73da9346131453ae8cc +size 318619 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph.meta new file mode 100644 index 00000000..1a007bff --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Glass.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! f092ba3c-de20-41ce-90c7-0bda1f84a95e + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! f092ba3c-de20-41ce-90c7-0bda1f84a95e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph new file mode 100644 index 00000000..ed3901e6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52c3076960ca17b6a7d3b6bf56aa0a42f5c1dc6ce16429c569a7ff342c2310fd +size 28506 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph.meta new file mode 100644 index 00000000..ed47768f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Meteor.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 3a248df4-730c-4a39-b4bd-b285a57eda14 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 3a248df4-730c-4a39-b4bd-b285a57eda14 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph new file mode 100644 index 00000000..43e9ff2f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:304a61c2bf3df4301ff470ec9a151744eead39b3068a4031cfe2209f9cd93b63 +size 112636 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph.meta new file mode 100644 index 00000000..99181819 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! c77ab7db-4342-48e5-aa2f-62bb7705b911 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! c77ab7db-4342-48e5-aa2f-62bb7705b911 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph new file mode 100644 index 00000000..c575f13b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1b0a16f07711f9eeac2234688d02221e636746a1a4f550ffc5d20c81809a9b2 +size 71727 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph.meta new file mode 100644 index 00000000..5b145ee2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Planet_rings.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 53b176a1-1797-414e-a644-318f89b62222 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 53b176a1-1797-414e-a644-318f89b62222 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph new file mode 100644 index 00000000..942fb3a7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6749f62a20365583641ca84c8c746ea3d4a5eb9e24dfee6b3023676e6384bd8 +size 163426 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph.meta new file mode 100644 index 00000000..4611ad1c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Platform.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 3eba1ac9-5348-410d-8dfd-89f67dfd02d6 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 3eba1ac9-5348-410d-8dfd-89f67dfd02d6 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph new file mode 100644 index 00000000..f36b09cf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abee57ec908c66aade274dc0e6be0cf47adfbaa3754453e8ea7ac69f5bfaca61 +size 503890 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph.meta new file mode 100644 index 00000000..babf0072 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Shaders/Rocket.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d60c4cee-2ba9-4b49-8ecb-be1d5277df11 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png new file mode 100644 index 00000000..a0ef7481 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93f8c081f1bd87ee10beef34b220bd87c44f7e66f5d09415de4f0aed2bb6b4db +size 936 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png.meta new file mode 100644 index 00000000..f67cc7ec --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/A-icon.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 962fe96e-aa8d-4ea3-8a35-09c60ce3f4dc + ImporterName: FileTextureImporter + PrimaryAsset: ! 962fe96e-aa8d-4ea3-8a35-09c60ce3f4dc + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png new file mode 100644 index 00000000..f8fe457f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c343d7a706e0e3bd267e4375ef758990c8dae515ee4b445b3637364abaf24a51 +size 848 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png.meta new file mode 100644 index 00000000..45441a29 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/B-icon.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 16323e0b-43a3-431f-b1f0-60029ae56ca5 + ImporterName: FileTextureImporter + PrimaryAsset: ! 16323e0b-43a3-431f-b1f0-60029ae56ca5 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png new file mode 100644 index 00000000..bd05f9a8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0666fd08d3ee92bf48035460d3c91e242b5cf0d15067ae831e518b8ec46510b +size 982 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png.meta new file mode 100644 index 00000000..9d472e2c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/C-icon.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 8d858ff6-aa23-4863-b2df-a5af56b736da + ImporterName: FileTextureImporter + PrimaryAsset: ! 8d858ff6-aa23-4863-b2df-a5af56b736da + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png new file mode 100644 index 00000000..9cab48a4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a167f16891f1ab85af930d2700c775d33483a255d9cbba21a3241879da13a56a +size 923259 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png.meta new file mode 100644 index 00000000..b2515baa --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Meteor_bc.png.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! 60085123-337c-4c07-a3bf-740172bd8632 + ImporterName: FileTextureImporter + PrimaryAsset: ! 60085123-337c-4c07-a3bf-740172bd8632 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg new file mode 100644 index 00000000..8d99a051 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5157f658fee5137881e12b708378ece6266f419e918f778b5d280c82a563479 +size 16711 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg.meta new file mode 100644 index 00000000..90eea8c1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Platforms_AO.jpg.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! fd087204-9411-4134-a7ae-fc7d4cb32a14 + ImporterName: FileTextureImporter + PrimaryAsset: ! fd087204-9411-4134-a7ae-fc7d4cb32a14 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg new file mode 100644 index 00000000..cfbb9689 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9f072fa8ee347f8e3ca903087d7e8598317a844d25fe7934e3a5015a74ac2da +size 186690 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg.meta new file mode 100644 index 00000000..353da9b0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Rockets_AO.jpg.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! 09760f3a-f73e-482b-a710-aeee74246f02 + ImporterName: FileTextureImporter + PrimaryAsset: ! 09760f3a-f73e-482b-a710-aeee74246f02 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png new file mode 100644 index 00000000..d82b067f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cfc56b9e3ab59fdd0c8d98042c7663fdc2786cc2b52e94a724e699d5dfb9410 +size 102167 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png.meta new file mode 100644 index 00000000..dd6d41b3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Snap_logo.png.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! f9cdd2df-a667-4be8-a3ca-a5b07c103b0e + ImporterName: FileTextureImporter + PrimaryAsset: ! f9cdd2df-a667-4be8-a3ca-a5b07c103b0e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png new file mode 100644 index 00000000..b06fb705 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95c3abe8b248d1f9703a49bd285ecfb9ca90f3093b6df5d9a58a49131c1b4dbf +size 46441 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png.meta new file mode 100644 index 00000000..845f52c2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/SIK_Space_logo_TEMP.png.meta @@ -0,0 +1,18 @@ +- ! + ImportedAssetIds: + Texture: ! 4ce82aa3-8e78-4e2c-b693-4224248bba87 + ImporterName: FileTextureImporter + PrimaryAsset: ! 4ce82aa3-8e78-4e2c-b693-4224248bba87 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png new file mode 100644 index 00000000..c7a85f12 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:852203e2d09839a9095a00d983654a5462f2c8d0544b094e370b5b8581a34536 +size 99084 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png.meta new file mode 100644 index 00000000..2e6bf9ca --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-A.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! a177cbf2-7a2b-4bff-b9c9-8acc82442799 + ImporterName: FileTextureImporter + PrimaryAsset: ! a177cbf2-7a2b-4bff-b9c9-8acc82442799 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png new file mode 100644 index 00000000..0d9839ae --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2c7e88d79d5b886b393435b31305b44fedc5b38e89fbfc812ab69673a372269 +size 53857 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png.meta new file mode 100644 index 00000000..8b27f757 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-B.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! cc6a2658-c9c4-4200-955e-ea150374967c + ImporterName: FileTextureImporter + PrimaryAsset: ! cc6a2658-c9c4-4200-955e-ea150374967c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png new file mode 100644 index 00000000..cfb3fdd1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3023b35aeaf0b3ea65f5d594d69f7f7cf6e3fb19047b41771490e250d5cf00c4 +size 47375 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png.meta new file mode 100644 index 00000000..86f6b496 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/body-tube_rocket-C.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! df3b9a95-4d7e-47b1-855a-3d47e21e26bc + ImporterName: FileTextureImporter + PrimaryAsset: ! df3b9a95-4d7e-47b1-855a-3d47e21e26bc + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png new file mode 100644 index 00000000..c15d0924 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6689f4ced74de125939ac4e566355e0430dbb30aac2208c5f3521f0e050bdd04 +size 106941 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png.meta new file mode 100644 index 00000000..4d5b550b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-A.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 30a613c8-8cfb-4744-8335-7059c3835e14 + ImporterName: FileTextureImporter + PrimaryAsset: ! 30a613c8-8cfb-4744-8335-7059c3835e14 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png new file mode 100644 index 00000000..c91c9171 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6251657d63cb586d3d73cd0959295d3ea7ab1000c6f60cb8d55c48d66442d649 +size 117056 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png.meta new file mode 100644 index 00000000..2fea99c7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-B.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! e5a16836-90b9-4686-894b-671a6e6c915e + ImporterName: FileTextureImporter + PrimaryAsset: ! e5a16836-90b9-4686-894b-671a6e6c915e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png new file mode 100644 index 00000000..341729f8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f984b2ff33df28f01e57e4c273fa648c03d954d5e3b1c89f13f7e2f7b57e0f64 +size 79401 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png.meta new file mode 100644 index 00000000..99a4a5cd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/fins_rocket-C.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 2f896f95-a856-47d7-b5a0-5bd4e75787a6 + ImporterName: FileTextureImporter + PrimaryAsset: ! 2f896f95-a856-47d7-b5a0-5bd4e75787a6 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png new file mode 100644 index 00000000..bb472166 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee7cb9eb86b3ba53218d7a397eabb8c8c33e8cdda3cc5ccef120858ffe8c67f1 +size 62513 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png.meta new file mode 100644 index 00000000..66d62c1e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-A.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! a6dc5752-3f7b-4566-b621-26facc3ef93e + ImporterName: FileTextureImporter + PrimaryAsset: ! a6dc5752-3f7b-4566-b621-26facc3ef93e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png new file mode 100644 index 00000000..21042630 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0180ebd7507dabe26c3642218ea3131e201173c2f9cefb2f319a324517d6f478 +size 56147 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png.meta new file mode 100644 index 00000000..441f7655 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-B.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 95f5ad88-bc78-42bc-8f9d-4772aa6fdaa0 + ImporterName: FileTextureImporter + PrimaryAsset: ! 95f5ad88-bc78-42bc-8f9d-4772aa6fdaa0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png new file mode 100644 index 00000000..89a4fd79 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:825479da37507eb733d50017da5324bd86b5c9092fee583580a39fe8da560d2e +size 56253 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png.meta new file mode 100644 index 00000000..3eac7c41 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/Textures/ScrollViewThumbnails/nose-cone_rocket-C.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 0311aabc-2091-4424-a8e6-788f16414f71 + ImporterName: FileTextureImporter + PrimaryAsset: ! 0311aabc-2091-4424-a8e6-788f16414f71 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat new file mode 100644 index 00000000..b1bb71d0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat @@ -0,0 +1,157 @@ +- ! + PackagePath: "" + PassesInfo: + - ! a47fdbb4-24c5-4148-9fc3-e800284747f2 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 10000.000000 + InstanceCount: 1 + Defines: + - NODE_7_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Amount_N080: + typeIdx: 1 + value: 1.000000 + Port_Default_N025: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N038: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Default_N066: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Exponent_N014: + typeIdx: 1 + value: 7.000000 + Port_Input1_N017: + typeIdx: 1 + value: 2000.000000 + Port_Input1_N021: + typeIdx: 1 + value: 0.000000 + Port_Input1_N040: + typeIdx: 1 + value: 0.100000 + Port_Input1_N043: + typeIdx: 1 + value: 5.000000 + Port_Input1_N069: + typeIdx: 1 + value: 0.000000 + Port_Input1_N070: + typeIdx: 1 + value: 3.000000 + Port_Input1_N071: + typeIdx: 1 + value: 2.000000 + Port_Input1_N072: + typeIdx: 1 + value: 1.100000 + Port_Input1_N097: + typeIdx: 1 + value: 0.005000 + Port_Input2_N069: + typeIdx: 1 + value: 1.000000 + Port_Intensity_N014: + typeIdx: 1 + value: 1.000000 + Port_Normal_N014: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N068: + typeIdx: 1 + value: 0.500000 + Port_Position1_N077: + typeIdx: 1 + value: 0.140000 + Port_Position2_N077: + typeIdx: 1 + value: 0.270000 + Port_Position3_N077: + typeIdx: 1 + value: 0.500000 + Port_RangeMaxA_N103: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N103: + typeIdx: 1 + value: -1.000000 + Port_RangeMinA_N103: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N103: + typeIdx: 1 + value: -100.000000 + Port_Value0_N068: + typeIdx: 5 + value: {x: 0.837415, y: 0.837430, z: 0.837430, w: 1.000000} + Port_Value0_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N025: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Value1_N038: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Value1_N068: + typeIdx: 5 + value: {x: 0.921431, y: 0.921447, z: 0.921447, w: 1.000000} + Port_Value1_N076: + typeIdx: 1 + value: 0.000000 + Port_Value1_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.578103, z: 0.000000, w: 1.000000} + Port_Value2_N068: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value2_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.832349, z: 0.473213, w: 1.000000} + Port_Value3_N076: + typeIdx: 1 + value: 0.000000 + Port_Value3_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value4_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + alpha: + typeIdx: 1 + value: 1.000000 + distance_gradient: + typeIdx: 1 + value: 1.000000 + height_gradient: + typeIdx: 1 + value: 1.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! d6c8efdc-40f2-4151-95aa-fad0146c77dd diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat.meta new file mode 100644 index 00000000..f04fec7a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_ANIM_mat_landing.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 92a5655b-77cb-46a7-b867-2581c0b629b2 + ImporterName: MaterialImporter + PrimaryAsset: ! 92a5655b-77cb-46a7-b867-2581c0b629b2 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph new file mode 100644 index 00000000..ef3217d9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44356a6072934f52df2b7d6b97906e66f3e689ae0099126cb23978ea7d1cd5b0 +size 268460 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph.meta new file mode 100644 index 00000000..19abf876 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/Bones_clouds_material_landing_.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d6c8efdc-40f2-4151-95aa-fad0146c77dd + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d6c8efdc-40f2-4151-95aa-fad0146c77dd + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset new file mode 100644 index 00000000..6c9befcc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset @@ -0,0 +1,7245 @@ +- ! + PackagePath: "" + AnimationPropertiesLayers: + point_0: + position: + - time: 0.000000 + value: {x: -0.011523, y: 2.511905, z: -0.159024} + - time: 0.033333 + value: {x: -0.011523, y: 2.511905, z: -0.159024} + - time: 0.066667 + value: {x: -0.059735, y: 1.579751, z: 0.043245} + - time: 0.100000 + value: {x: -0.253613, y: 0.674692, z: 0.151178} + - time: 0.133333 + value: {x: -0.871472, y: 0.255545, z: 0.243033} + - time: 0.166667 + value: {x: -1.578798, y: 0.245855, z: 0.250679} + - time: 0.200000 + value: {x: -2.080608, y: 0.319772, z: 0.246178} + - time: 0.233333 + value: {x: -2.331855, y: 0.426117, z: 0.271735} + - time: 0.266667 + value: {x: -2.412168, y: 0.499509, z: 0.308405} + - time: 0.300000 + value: {x: -2.433117, y: 0.553920, z: 0.343225} + - time: 0.333333 + value: {x: -2.426527, y: 0.585831, z: 0.363445} + - time: 0.366667 + value: {x: -2.416936, y: 0.589038, z: 0.359348} + - time: 0.400000 + value: {x: -2.428098, y: 0.565903, z: 0.331053} + - time: 0.433333 + value: {x: -2.478895, y: 0.528958, z: 0.285884} + - time: 0.466667 + value: {x: -2.571179, y: 0.493758, z: 0.237431} + - time: 0.500000 + value: {x: -2.691314, y: 0.464843, z: 0.192195} + - time: 0.533333 + value: {x: -2.830321, y: 0.442501, z: 0.150623} + - time: 0.566667 + value: {x: -2.982010, y: 0.426264, z: 0.113226} + - time: 0.600000 + value: {x: -3.142699, y: 0.415872, z: 0.081215} + - time: 0.633333 + value: {x: -3.308638, y: 0.410200, z: 0.054318} + - time: 0.666667 + value: {x: -3.477829, y: 0.408475, z: 0.031353} + - time: 0.700000 + value: {x: -3.649246, y: 0.410400, z: 0.011102} + - time: 0.733333 + value: {x: -3.821565, y: 0.414895, z: -0.008305} + - time: 0.766667 + value: {x: -3.994267, y: 0.421432, z: -0.027709} + - time: 0.800000 + value: {x: -4.166886, y: 0.429325, z: -0.047475} + - time: 0.833333 + value: {x: -4.339089, y: 0.437982, z: -0.068169} + - time: 0.866667 + value: {x: -4.510670, y: 0.446951, z: -0.089932} + - time: 0.900000 + value: {x: -4.681453, y: 0.455888, z: -0.112504} + - time: 0.933333 + value: {x: -4.851295, y: 0.464562, z: -0.135856} + - time: 0.966667 + value: {x: -5.020106, y: 0.472789, z: -0.159410} + - time: 1.000000 + value: {x: -5.187759, y: 0.480544, z: -0.182323} + - time: 1.033333 + value: {x: -5.354177, y: 0.487736, z: -0.204136} + - time: 1.066667 + value: {x: -5.519258, y: 0.494372, z: -0.224920} + - time: 1.100000 + value: {x: -5.682918, y: 0.500524, z: -0.244609} + - time: 1.133333 + value: {x: -5.845060, y: 0.506246, z: -0.262994} + - time: 1.166667 + value: {x: -6.005540, y: 0.511592, z: -0.279858} + - time: 1.200000 + value: {x: -6.164267, y: 0.516742, z: -0.295554} + - time: 1.233333 + value: {x: -6.321117, y: 0.521859, z: -0.310248} + - time: 1.266667 + value: {x: -6.475953, y: 0.527129, z: -0.324016} + - time: 1.300000 + value: {x: -6.628614, y: 0.532751, z: -0.336651} + - time: 1.333333 + value: {x: -6.778924, y: 0.538927, z: -0.347769} + - time: 1.366667 + value: {x: -6.926685, y: 0.545856, z: -0.357150} + - time: 1.400000 + value: {x: -7.071682, y: 0.553725, z: -0.364691} + - time: 1.433333 + value: {x: -7.213670, y: 0.562701, z: -0.370447} + - time: 1.466667 + value: {x: -7.352384, y: 0.572925, z: -0.374447} + - time: 1.500000 + value: {x: -7.487539, y: 0.584507, z: -0.376705} + - time: 1.533333 + value: {x: -7.618845, y: 0.597518, z: -0.377260} + - time: 1.566667 + value: {x: -7.745990, y: 0.611985, z: -0.376180} + - time: 1.600000 + value: {x: -7.868681, y: 0.627900, z: -0.373524} + - time: 1.633333 + value: {x: -7.986643, y: 0.645218, z: -0.369362} + - time: 1.666667 + value: {x: -8.099655, y: 0.663862, z: -0.363797} + - time: 1.700000 + value: {x: -8.207476, y: 0.683771, z: -0.356918} + - time: 1.733333 + value: {x: -8.308380, y: 0.705395, z: -0.348307} + - time: 1.766667 + value: {x: -8.403345, y: 0.728059, z: -0.338532} + - time: 1.800000 + value: {x: -8.492464, y: 0.751560, z: -0.327755} + - time: 1.833333 + value: {x: -8.575027, y: 0.775953, z: -0.315890} + - time: 1.866667 + value: {x: -8.648863, y: 0.801359, z: -0.302551} + - time: 1.900000 + value: {x: -8.716841, y: 0.826858, z: -0.288589} + - time: 1.933333 + value: {x: -8.777540, y: 0.852546, z: -0.273751} + - time: 1.966667 + value: {x: -8.829102, y: 0.877833, z: -0.258097} + - time: 2.000000 + value: {x: -8.876575, y: 0.902422, z: -0.242474} + - time: 2.033333 + value: {x: -8.913158, y: 0.925148, z: -0.226256} + - time: 2.066667 + value: {x: -8.946798, y: 0.946479, z: -0.210466} + - time: 2.100000 + value: {x: -8.972565, y: 0.964898, z: -0.194849} + - time: 2.133333 + value: {x: -8.996012, y: 0.981739, z: -0.179809} + - time: 2.166667 + value: {x: -9.013611, y: 0.995229, z: -0.165359} + - time: 2.200000 + value: {x: -9.030605, y: 1.007959, z: -0.151508} + - time: 2.233333 + value: {x: -9.042618, y: 1.016971, z: -0.138472} + - time: 2.266667 + value: {x: -9.054588, y: 1.025648, z: -0.126009} + - time: 2.300000 + value: {x: -9.064293, y: 1.032166, z: -0.114319} + - time: 2.333333 + value: {x: -9.072796, y: 1.037434, z: -0.103302} + - time: 2.366667 + value: {x: -9.081310, y: 1.042486, z: -0.092846} + - time: 2.400000 + value: {x: -9.088123, y: 1.045721, z: -0.083154} + - time: 2.433333 + value: {x: -9.094635, y: 1.048508, z: -0.074050} + - time: 2.466667 + value: {x: -9.101147, y: 1.051174, z: -0.065494} + - time: 2.500000 + value: {x: -9.107189, y: 1.053255, z: -0.057546} + - time: 2.533333 + value: {x: -9.112621, y: 1.054651, z: -0.050216} + - time: 2.566667 + value: {x: -9.118004, y: 1.055986, z: -0.043419} + - time: 2.600000 + value: {x: -9.123295, y: 1.057255, z: -0.037155} + - time: 2.633333 + value: {x: -9.128445, y: 1.058454, z: -0.031419} + - time: 2.666667 + value: {x: -9.133137, y: 1.059271, z: -0.026249} + - time: 2.700000 + value: {x: -9.137581, y: 1.059987, z: -0.021604} + - time: 2.733333 + value: {x: -9.141777, y: 1.060652, z: -0.017473} + - time: 2.766667 + value: {x: -9.145683, y: 1.061261, z: -0.013851} + - time: 2.800000 + value: {x: -9.149239, y: 1.061808, z: -0.010733} + - time: 2.833333 + value: {x: -9.152401, y: 1.062288, z: -0.008114} + - time: 2.866667 + value: {x: -9.155109, y: 1.062695, z: -0.005987} + - time: 2.900000 + value: {x: -9.157318, y: 1.063021, z: -0.004346} + - time: 2.933333 + value: {x: -9.158962, y: 1.063262, z: -0.003183} + - time: 2.966667 + value: {x: -9.159992, y: 1.063412, z: -0.002492} + - time: 3.000000 + value: {x: -9.160351, y: 1.063463, z: -0.002263} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.290601, y: 0.290601, z: 0.290601} + - time: 0.033333 + value: {x: 0.290869, y: 0.290869, z: 0.290869} + - time: 0.066667 + value: {x: 0.337311, y: 0.337311, z: 0.337311} + - time: 0.100000 + value: {x: 0.392842, y: 0.392842, z: 0.392842} + - time: 0.133333 + value: {x: 0.437588, y: 0.437588, z: 0.437588} + - time: 0.166667 + value: {x: 0.490083, y: 0.490083, z: 0.490083} + - time: 0.200000 + value: {x: 0.547642, y: 0.547642, z: 0.547642} + - time: 0.233333 + value: {x: 0.615463, y: 0.615463, z: 0.615463} + - time: 0.266667 + value: {x: 0.690222, y: 0.690222, z: 0.690222} + - time: 0.300000 + value: {x: 0.769252, y: 0.769252, z: 0.769252} + - time: 0.333333 + value: {x: 0.852007, y: 0.852007, z: 0.852007} + - time: 0.366667 + value: {x: 0.938220, y: 0.938220, z: 0.938220} + - time: 0.400000 + value: {x: 1.027548, y: 1.027548, z: 1.027548} + - time: 0.433333 + value: {x: 1.119255, y: 1.119255, z: 1.119255} + - time: 0.466667 + value: {x: 1.212191, y: 1.212191, z: 1.212191} + - time: 0.533333 + value: {x: 1.398693, y: 1.398693, z: 1.398693} + - time: 0.566667 + value: {x: 1.491664, y: 1.491664, z: 1.491664} + - time: 0.666667 + value: {x: 1.768867, y: 1.768867, z: 1.768867} + - time: 0.700000 + value: {x: 1.860662, y: 1.860662, z: 1.860662} + - time: 0.733333 + value: {x: 1.950026, y: 1.950026, z: 1.950026} + - time: 0.766667 + value: {x: 2.034589, y: 2.034589, z: 2.034589} + - time: 0.800000 + value: {x: 2.113467, y: 2.113467, z: 2.113467} + - time: 0.833333 + value: {x: 2.187388, y: 2.187388, z: 2.187388} + - time: 0.866667 + value: {x: 2.258213, y: 2.258213, z: 2.258213} + - time: 0.900000 + value: {x: 2.327457, y: 2.327457, z: 2.327457} + - time: 0.933333 + value: {x: 2.395755, y: 2.395755, z: 2.395755} + - time: 0.966667 + value: {x: 2.462806, y: 2.462806, z: 2.462806} + - time: 1.000000 + value: {x: 2.528174, y: 2.528174, z: 2.528174} + - time: 1.033333 + value: {x: 2.592602, y: 2.592602, z: 2.592602} + - time: 1.066667 + value: {x: 2.656326, y: 2.656326, z: 2.656326} + - time: 1.100000 + value: {x: 2.718682, y: 2.718682, z: 2.718682} + - time: 1.133333 + value: {x: 2.779336, y: 2.779336, z: 2.779336} + - time: 1.166667 + value: {x: 2.839591, y: 2.839591, z: 2.839591} + - time: 1.200000 + value: {x: 2.901814, y: 2.901814, z: 2.901814} + - time: 1.233333 + value: {x: 2.968027, y: 2.968027, z: 2.968027} + - time: 1.266667 + value: {x: 3.038712, y: 3.038712, z: 3.038712} + - time: 1.300000 + value: {x: 3.111833, y: 3.111833, z: 3.111833} + - time: 1.333333 + value: {x: 3.184121, y: 3.184121, z: 3.184121} + - time: 1.366667 + value: {x: 3.253218, y: 3.253218, z: 3.253218} + - time: 1.400000 + value: {x: 3.317868, y: 3.317868, z: 3.317868} + - time: 1.433333 + value: {x: 3.377827, y: 3.377827, z: 3.377827} + - time: 1.466667 + value: {x: 3.434397, y: 3.434397, z: 3.434397} + - time: 1.500000 + value: {x: 3.490060, y: 3.490060, z: 3.490060} + - time: 1.533333 + value: {x: 3.546874, y: 3.546874, z: 3.546874} + - time: 1.566667 + value: {x: 3.605288, y: 3.605288, z: 3.605288} + - time: 1.600000 + value: {x: 3.664199, y: 3.664199, z: 3.664199} + - time: 1.633333 + value: {x: 3.722171, y: 3.722171, z: 3.722171} + - time: 1.666667 + value: {x: 3.778257, y: 3.778257, z: 3.778257} + - time: 1.700000 + value: {x: 3.831827, y: 3.831827, z: 3.831827} + - time: 1.733333 + value: {x: 3.882404, y: 3.882404, z: 3.882404} + - time: 1.766667 + value: {x: 3.930131, y: 3.930131, z: 3.930131} + - time: 1.800000 + value: {x: 3.975334, y: 3.975334, z: 3.975334} + - time: 1.833333 + value: {x: 4.018619, y: 4.018619, z: 4.018619} + - time: 1.866667 + value: {x: 4.060783, y: 4.060783, z: 4.060783} + - time: 1.933333 + value: {x: 4.144221, y: 4.144221, z: 4.144221} + - time: 1.966667 + value: {x: 4.186174, y: 4.186174, z: 4.186174} + - time: 2.000000 + value: {x: 4.228712, y: 4.228712, z: 4.228712} + - time: 2.033333 + value: {x: 4.272261, y: 4.272261, z: 4.272261} + - time: 2.066667 + value: {x: 4.317227, y: 4.317227, z: 4.317227} + - time: 2.100000 + value: {x: 4.363578, y: 4.363578, z: 4.363578} + - time: 2.133333 + value: {x: 4.410990, y: 4.410990, z: 4.410990} + - time: 2.233333 + value: {x: 4.554600, y: 4.554600, z: 4.554600} + - time: 2.333333 + value: {x: 4.699583, y: 4.699583, z: 4.699583} + - time: 2.366667 + value: {x: 4.746761, y: 4.746761, z: 4.746761} + - time: 2.400000 + value: {x: 4.792158, y: 4.792158, z: 4.792158} + - time: 2.433333 + value: {x: 4.835426, y: 4.835426, z: 4.835426} + - time: 2.466667 + value: {x: 4.876795, y: 4.876795, z: 4.876795} + - time: 2.500000 + value: {x: 4.916898, y: 4.916898, z: 4.916898} + - time: 2.533333 + value: {x: 4.955503, y: 4.955503, z: 4.955503} + - time: 2.566667 + value: {x: 4.992303, y: 4.992303, z: 4.992303} + - time: 2.600000 + value: {x: 5.027706, y: 5.027706, z: 5.027706} + - time: 2.633333 + value: {x: 5.061648, y: 5.061648, z: 5.061648} + - time: 2.666667 + value: {x: 5.093757, y: 5.093757, z: 5.093757} + - time: 2.700000 + value: {x: 5.123381, y: 5.123381, z: 5.123381} + - time: 2.733333 + value: {x: 5.149748, y: 5.149748, z: 5.149748} + - time: 2.766667 + value: {x: 5.172333, y: 5.172333, z: 5.172333} + - time: 2.800000 + value: {x: 5.191216, y: 5.191216, z: 5.191216} + - time: 2.833333 + value: {x: 5.207181, y: 5.207181, z: 5.207181} + - time: 2.900000 + value: {x: 5.236161, y: 5.236161, z: 5.236161} + - time: 2.933333 + value: {x: 5.253018, y: 5.253018, z: 5.253018} + - time: 2.966667 + value: {x: 5.273190, y: 5.273190, z: 5.273190} + - time: 3.000000 + value: {x: 5.296396, y: 5.296396, z: 5.296396} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_1: + position: + - time: 0.000000 + value: {x: -0.094892, y: 2.511905, z: -0.130644} + - time: 0.033333 + value: {x: -0.094892, y: 2.511905, z: -0.130644} + - time: 0.066667 + value: {x: -0.025422, y: 1.579751, z: 0.072199} + - time: 0.100000 + value: {x: -0.113882, y: 0.674692, z: 0.296971} + - time: 0.133333 + value: {x: -0.518852, y: 0.255545, z: 0.815574} + - time: 0.166667 + value: {x: -1.080610, y: 0.245855, z: 1.251593} + - time: 0.200000 + value: {x: -1.522922, y: 0.319772, z: 1.490599} + - time: 0.233333 + value: {x: -1.739615, y: 0.426117, z: 1.617920} + - time: 0.266667 + value: {x: -1.804568, y: 0.499509, z: 1.665550} + - time: 0.300000 + value: {x: -1.823876, y: 0.553920, z: 1.674174} + - time: 0.333333 + value: {x: -1.824087, y: 0.585831, z: 1.661364} + - time: 0.366667 + value: {x: -1.823844, y: 0.589038, z: 1.643604} + - time: 0.400000 + value: {x: -1.843236, y: 0.565903, z: 1.633572} + - time: 0.433333 + value: {x: -1.899666, y: 0.528958, z: 1.639040} + - time: 0.466667 + value: {x: -1.992329, y: 0.493758, z: 1.664807} + - time: 0.500000 + value: {x: -2.106094, y: 0.464843, z: 1.709376} + - time: 0.533333 + value: {x: -2.233778, y: 0.442501, z: 1.767295} + - time: 0.566667 + value: {x: -2.371899, y: 0.426264, z: 1.832448} + - time: 0.600000 + value: {x: -2.519600, y: 0.415872, z: 1.899238} + - time: 0.633333 + value: {x: -2.674097, y: 0.410200, z: 1.965046} + - time: 0.666667 + value: {x: -2.831828, y: 0.408475, z: 2.031812} + - time: 0.700000 + value: {x: -2.990877, y: 0.410400, z: 2.100675} + - time: 0.733333 + value: {x: -3.150239, y: 0.414894, z: 2.170740} + - time: 0.766667 + value: {x: -3.309539, y: 0.421432, z: 2.241630} + - time: 0.800000 + value: {x: -3.468881, y: 0.429325, z: 2.312293} + - time: 0.833333 + value: {x: -3.628636, y: 0.437982, z: 2.381508} + - time: 0.866667 + value: {x: -3.788388, y: 0.446951, z: 2.449551} + - time: 0.900000 + value: {x: -3.946417, y: 0.455888, z: 2.518849} + - time: 0.933333 + value: {x: -4.101688, y: 0.464562, z: 2.590801} + - time: 0.966667 + value: {x: -4.253996, y: 0.472790, z: 2.665560} + - time: 1.000000 + value: {x: -4.404099, y: 0.480544, z: 2.741671} + - time: 1.033333 + value: {x: -4.552117, y: 0.487736, z: 2.818791} + - time: 1.066667 + value: {x: -4.698435, y: 0.494372, z: 2.896117} + - time: 1.100000 + value: {x: -4.843275, y: 0.500524, z: 2.973127} + - time: 1.133333 + value: {x: -4.986373, y: 0.506246, z: 3.050063} + - time: 1.166667 + value: {x: -5.127496, y: 0.511592, z: 3.127024} + - time: 1.200000 + value: {x: -5.266870, y: 0.516741, z: 3.203480} + - time: 1.233333 + value: {x: -5.404512, y: 0.521859, z: 3.279170} + - time: 1.266667 + value: {x: -5.540438, y: 0.527129, z: 3.353803} + - time: 1.300000 + value: {x: -5.674586, y: 0.532751, z: 3.427176} + - time: 1.333333 + value: {x: -5.806709, y: 0.538927, z: 3.499354} + - time: 1.366667 + value: {x: -5.936544, y: 0.545856, z: 3.570384} + - time: 1.400000 + value: {x: -6.063779, y: 0.553725, z: 3.640358} + - time: 1.433333 + value: {x: -6.187931, y: 0.562701, z: 3.709592} + - time: 1.466667 + value: {x: -6.308665, y: 0.572925, z: 3.778124} + - time: 1.500000 + value: {x: -6.425828, y: 0.584507, z: 3.845659} + - time: 1.533333 + value: {x: -6.539395, y: 0.597518, z: 3.911682} + - time: 1.566667 + value: {x: -6.649104, y: 0.611985, z: 3.976032} + - time: 1.600000 + value: {x: -6.754647, y: 0.627900, z: 4.038646} + - time: 1.633333 + value: {x: -6.855676, y: 0.645218, z: 4.099565} + - time: 1.666667 + value: {x: -6.951949, y: 0.663862, z: 4.158756} + - time: 1.700000 + value: {x: -7.043286, y: 0.683771, z: 4.216054} + - time: 1.733333 + value: {x: -7.128032, y: 0.705395, z: 4.270853} + - time: 1.766667 + value: {x: -7.207203, y: 0.728059, z: 4.323369} + - time: 1.800000 + value: {x: -7.280933, y: 0.751560, z: 4.373559} + - time: 1.833333 + value: {x: -7.348585, y: 0.775953, z: 4.421111} + - time: 1.866667 + value: {x: -7.408209, y: 0.801359, z: 4.465050} + - time: 1.900000 + value: {x: -7.462589, y: 0.826858, z: 4.506318} + - time: 1.933333 + value: {x: -7.510452, y: 0.852546, z: 4.544291} + - time: 1.966667 + value: {x: -7.550289, y: 0.877833, z: 4.577865} + - time: 2.000000 + value: {x: -7.586651, y: 0.902422, z: 4.609288} + - time: 2.033333 + value: {x: -7.613689, y: 0.925148, z: 4.635073} + - time: 2.066667 + value: {x: -7.638382, y: 0.946479, z: 4.659067} + - time: 2.100000 + value: {x: -7.656563, y: 0.964898, z: 4.678613} + - time: 2.133333 + value: {x: -7.672968, y: 0.981739, z: 4.696627} + - time: 2.166667 + value: {x: -7.684710, y: 0.995229, z: 4.711071} + - time: 2.200000 + value: {x: -7.696081, y: 1.007958, z: 4.724959} + - time: 2.233333 + value: {x: -7.703564, y: 1.016971, z: 4.735665} + - time: 2.266667 + value: {x: -7.711130, y: 1.025648, z: 4.746160} + - time: 2.300000 + value: {x: -7.717018, y: 1.032166, z: 4.755074} + - time: 2.366667 + value: {x: -7.727224, y: 1.042486, z: 4.770879} + - time: 2.400000 + value: {x: -7.731152, y: 1.045721, z: 4.777463} + - time: 2.466667 + value: {x: -7.738850, y: 1.051174, z: 4.789749} + - time: 2.500000 + value: {x: -7.742474, y: 1.053255, z: 4.795357} + - time: 2.566667 + value: {x: -7.749008, y: 1.055986, z: 4.805313} + - time: 2.633333 + value: {x: -7.755632, y: 1.058453, z: 4.814440} + - time: 2.666667 + value: {x: -7.758654, y: 1.059271, z: 4.818464} + - time: 2.700000 + value: {x: -7.761560, y: 1.059987, z: 4.822199} + - time: 2.733333 + value: {x: -7.764357, y: 1.060652, z: 4.825649} + - time: 2.766667 + value: {x: -7.766994, y: 1.061261, z: 4.828793} + - time: 2.800000 + value: {x: -7.769438, y: 1.061808, z: 4.831604} + - time: 2.833333 + value: {x: -7.771635, y: 1.062288, z: 4.834057} + - time: 2.866667 + value: {x: -7.773542, y: 1.062694, z: 4.836124} + - time: 2.900000 + value: {x: -7.775108, y: 1.063021, z: 4.837780} + - time: 2.933333 + value: {x: -7.776293, y: 1.063262, z: 4.838997} + - time: 2.966667 + value: {x: -7.777037, y: 1.063412, z: 4.839748} + - time: 3.000000 + value: {x: -7.777298, y: 1.063463, z: 4.840006} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.244933, y: 0.244933, z: 0.244933} + - time: 0.033333 + value: {x: 0.245263, y: 0.245263, z: 0.245263} + - time: 0.066667 + value: {x: 0.279233, y: 0.279233, z: 0.279233} + - time: 0.100000 + value: {x: 0.320428, y: 0.320428, z: 0.320428} + - time: 0.133333 + value: {x: 0.357033, y: 0.357033, z: 0.357033} + - time: 0.166667 + value: {x: 0.392379, y: 0.392379, z: 0.392379} + - time: 0.200000 + value: {x: 0.434255, y: 0.434255, z: 0.434255} + - time: 0.233333 + value: {x: 0.482048, y: 0.482048, z: 0.482048} + - time: 0.266667 + value: {x: 0.536320, y: 0.536320, z: 0.536320} + - time: 0.300000 + value: {x: 0.594683, y: 0.594683, z: 0.594683} + - time: 0.333333 + value: {x: 0.656297, y: 0.656297, z: 0.656297} + - time: 0.366667 + value: {x: 0.720687, y: 0.720687, z: 0.720687} + - time: 0.400000 + value: {x: 0.787411, y: 0.787411, z: 0.787411} + - time: 0.433333 + value: {x: 0.856052, y: 0.856052, z: 0.856052} + - time: 0.466667 + value: {x: 0.926840, y: 0.926840, z: 0.926840} + - time: 0.500000 + value: {x: 1.000413, y: 1.000413, z: 1.000413} + - time: 0.533333 + value: {x: 1.076590, y: 1.076590, z: 1.076590} + - time: 0.566667 + value: {x: 1.153843, y: 1.153843, z: 1.153843} + - time: 0.600000 + value: {x: 1.229683, y: 1.229683, z: 1.229683} + - time: 0.633333 + value: {x: 1.301912, y: 1.301912, z: 1.301912} + - time: 0.666667 + value: {x: 1.369324, y: 1.369324, z: 1.369324} + - time: 0.700000 + value: {x: 1.432330, y: 1.432330, z: 1.432330} + - time: 0.733333 + value: {x: 1.492566, y: 1.492566, z: 1.492566} + - time: 0.833333 + value: {x: 1.668853, y: 1.668853, z: 1.668853} + - time: 0.866667 + value: {x: 1.728495, y: 1.728495, z: 1.728495} + - time: 0.900000 + value: {x: 1.789446, y: 1.789446, z: 1.789446} + - time: 0.933333 + value: {x: 1.851040, y: 1.851040, z: 1.851040} + - time: 0.966667 + value: {x: 1.911067, y: 1.911067, z: 1.911067} + - time: 1.000000 + value: {x: 1.968660, y: 1.968660, z: 1.968660} + - time: 1.033333 + value: {x: 2.025847, y: 2.025847, z: 2.025847} + - time: 1.066667 + value: {x: 2.085494, y: 2.085494, z: 2.085494} + - time: 1.100000 + value: {x: 2.148988, y: 2.148988, z: 2.148988} + - time: 1.133333 + value: {x: 2.215290, y: 2.215290, z: 2.215290} + - time: 1.166667 + value: {x: 2.281256, y: 2.281256, z: 2.281256} + - time: 1.200000 + value: {x: 2.344746, y: 2.344746, z: 2.344746} + - time: 1.233333 + value: {x: 2.405287, y: 2.405287, z: 2.405287} + - time: 1.266667 + value: {x: 2.463369, y: 2.463369, z: 2.463369} + - time: 1.300000 + value: {x: 2.520044, y: 2.520044, z: 2.520044} + - time: 1.366667 + value: {x: 2.632392, y: 2.632392, z: 2.632392} + - time: 1.400000 + value: {x: 2.687693, y: 2.687693, z: 2.687693} + - time: 1.433333 + value: {x: 2.741573, y: 2.741573, z: 2.741573} + - time: 1.466667 + value: {x: 2.794012, y: 2.794012, z: 2.794012} + - time: 1.500000 + value: {x: 2.845397, y: 2.845397, z: 2.845397} + - time: 1.533333 + value: {x: 2.895890, y: 2.895890, z: 2.895890} + - time: 1.566667 + value: {x: 2.945124, y: 2.945124, z: 2.945124} + - time: 1.600000 + value: {x: 2.992091, y: 2.992091, z: 2.992091} + - time: 1.633333 + value: {x: 3.035951, y: 3.035951, z: 3.035951} + - time: 1.666667 + value: {x: 3.076870, y: 3.076870, z: 3.076870} + - time: 1.700000 + value: {x: 3.116152, y: 3.116152, z: 3.116152} + - time: 1.733333 + value: {x: 3.156011, y: 3.156011, z: 3.156011} + - time: 1.766667 + value: {x: 3.198385, y: 3.198385, z: 3.198385} + - time: 1.800000 + value: {x: 3.244514, y: 3.244514, z: 3.244514} + - time: 1.833333 + value: {x: 3.294814, y: 3.294814, z: 3.294814} + - time: 1.866667 + value: {x: 3.348882, y: 3.348882, z: 3.348882} + - time: 1.900000 + value: {x: 3.405600, y: 3.405600, z: 3.405600} + - time: 1.933333 + value: {x: 3.463953, y: 3.463953, z: 3.463953} + - time: 1.966667 + value: {x: 3.522716, y: 3.522716, z: 3.522716} + - time: 2.000000 + value: {x: 3.580580, y: 3.580580, z: 3.580580} + - time: 2.033333 + value: {x: 3.636954, y: 3.636954, z: 3.636954} + - time: 2.066667 + value: {x: 3.691490, y: 3.691490, z: 3.691490} + - time: 2.100000 + value: {x: 3.744536, y: 3.744536, z: 3.744536} + - time: 2.133333 + value: {x: 3.796613, y: 3.796613, z: 3.796613} + - time: 2.166667 + value: {x: 3.848183, y: 3.848183, z: 3.848183} + - time: 2.200000 + value: {x: 3.899479, y: 3.899479, z: 3.899479} + - time: 2.233333 + value: {x: 3.949863, y: 3.949863, z: 3.949863} + - time: 2.266667 + value: {x: 3.998956, y: 3.998956, z: 3.998956} + - time: 2.300000 + value: {x: 4.046057, y: 4.046057, z: 4.046057} + - time: 2.333333 + value: {x: 4.090646, y: 4.090646, z: 4.090646} + - time: 2.366667 + value: {x: 4.132399, y: 4.132399, z: 4.132399} + - time: 2.400000 + value: {x: 4.171298, y: 4.171298, z: 4.171298} + - time: 2.433333 + value: {x: 4.208197, y: 4.208197, z: 4.208197} + - time: 2.533333 + value: {x: 4.316267, y: 4.316267, z: 4.316267} + - time: 2.566667 + value: {x: 4.351515, y: 4.351515, z: 4.351515} + - time: 2.600000 + value: {x: 4.385841, y: 4.385841, z: 4.385841} + - time: 2.633333 + value: {x: 4.418590, y: 4.418590, z: 4.418590} + - time: 2.666667 + value: {x: 4.448858, y: 4.448858, z: 4.448858} + - time: 2.700000 + value: {x: 4.475917, y: 4.475917, z: 4.475917} + - time: 2.733333 + value: {x: 4.499378, y: 4.499378, z: 4.499378} + - time: 2.766667 + value: {x: 4.519242, y: 4.519242, z: 4.519242} + - time: 2.800000 + value: {x: 4.535820, y: 4.535820, z: 4.535820} + - time: 2.833333 + value: {x: 4.549440, y: 4.549440, z: 4.549440} + - time: 2.866667 + value: {x: 4.560048, y: 4.560048, z: 4.560048} + - time: 2.900000 + value: {x: 4.567444, y: 4.567444, z: 4.567444} + - time: 2.933333 + value: {x: 4.572215, y: 4.572215, z: 4.572215} + - time: 2.966667 + value: {x: 4.575368, y: 4.575368, z: 4.575368} + - time: 3.000000 + value: {x: 4.577739, y: 4.577739, z: 4.577739} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_10: + position: + - time: 0.000000 + value: {x: 0.095356, y: 2.511905, z: -0.127258} + - time: 0.033333 + value: {x: 0.095356, y: 2.511905, z: -0.127258} + - time: 0.066667 + value: {x: -0.060175, y: 1.579751, z: -0.021829} + - time: 0.100000 + value: {x: -0.224112, y: 0.674692, z: -0.128760} + - time: 0.133333 + value: {x: -0.673908, y: 0.255545, z: -0.553101} + - time: 0.166667 + value: {x: -1.242187, y: 0.245855, z: -0.977513} + - time: 0.200000 + value: {x: -1.650661, y: 0.319772, z: -1.272504} + - time: 0.233333 + value: {x: -1.865823, y: 0.426117, z: -1.407952} + - time: 0.266667 + value: {x: -1.930530, y: 0.499509, z: -1.455933} + - time: 0.300000 + value: {x: -1.943814, y: 0.553920, z: -1.472584} + - time: 0.333333 + value: {x: -1.931783, y: 0.585831, z: -1.476378} + - time: 0.366667 + value: {x: -1.916268, y: 0.589038, z: -1.479607} + - time: 0.400000 + value: {x: -1.918704, y: 0.565903, z: -1.493819} + - time: 0.433333 + value: {x: -1.957248, y: 0.528958, z: -1.526906} + - time: 0.466667 + value: {x: -2.032502, y: 0.493758, z: -1.581001} + - time: 0.500000 + value: {x: -2.131249, y: 0.464843, z: -1.650523} + - time: 0.533333 + value: {x: -2.244061, y: 0.442501, z: -1.732629} + - time: 0.566667 + value: {x: -2.366106, y: 0.426264, z: -1.823446} + - time: 0.600000 + value: {x: -2.493788, y: 0.415872, z: -1.921496} + - time: 0.633333 + value: {x: -2.623774, y: 0.410200, z: -2.024896} + - time: 0.666667 + value: {x: -2.754773, y: 0.408475, z: -2.132089} + - time: 0.700000 + value: {x: -2.884961, y: 0.410400, z: -2.243608} + - time: 0.733333 + value: {x: -3.014924, y: 0.414894, z: -2.356760} + - time: 0.766667 + value: {x: -3.144724, y: 0.421432, z: -2.470683} + - time: 0.800000 + value: {x: -3.275768, y: 0.429325, z: -2.583050} + - time: 0.833333 + value: {x: -3.409401, y: 0.437982, z: -2.691803} + - time: 0.866667 + value: {x: -3.546051, y: 0.446951, z: -2.796140} + - time: 0.900000 + value: {x: -3.685622, y: 0.455889, z: -2.895896} + - time: 0.933333 + value: {x: -3.827030, y: 0.464562, z: -2.992108} + - time: 0.966667 + value: {x: -3.968830, y: 0.472789, z: -3.086296} + - time: 1.000000 + value: {x: -4.108942, y: 0.480544, z: -3.180663} + - time: 1.033333 + value: {x: -4.246368, y: 0.487736, z: -3.276231} + - time: 1.066667 + value: {x: -4.380904, y: 0.494372, z: -3.373092} + - time: 1.100000 + value: {x: -4.512758, y: 0.500524, z: -3.470872} + - time: 1.133333 + value: {x: -4.642355, y: 0.506246, z: -3.568933} + - time: 1.166667 + value: {x: -4.769558, y: 0.511592, z: -3.667212} + - time: 1.200000 + value: {x: -4.894515, y: 0.516742, z: -3.765406} + - time: 1.233333 + value: {x: -5.016200, y: 0.521859, z: -3.864505} + - time: 1.266667 + value: {x: -5.133858, y: 0.527129, z: -3.965163} + - time: 1.300000 + value: {x: -5.247929, y: 0.532751, z: -4.066634} + - time: 1.333333 + value: {x: -5.359151, y: 0.538927, z: -4.167797} + - time: 1.366667 + value: {x: -5.467442, y: 0.545856, z: -4.268449} + - time: 1.400000 + value: {x: -5.572544, y: 0.553725, z: -4.368555} + - time: 1.433333 + value: {x: -5.674623, y: 0.562701, z: -4.467550} + - time: 1.466667 + value: {x: -5.773708, y: 0.572925, z: -4.565002} + - time: 1.500000 + value: {x: -5.869337, y: 0.584507, z: -4.661005} + - time: 1.533333 + value: {x: -5.961237, y: 0.597518, z: -4.755426} + - time: 1.566667 + value: {x: -6.049238, y: 0.611985, z: -4.847996} + - time: 1.600000 + value: {x: -6.133165, y: 0.627900, z: -4.938461} + - time: 1.633333 + value: {x: -6.213173, y: 0.645218, z: -5.026226} + - time: 1.666667 + value: {x: -6.289539, y: 0.663862, z: -5.110634} + - time: 1.700000 + value: {x: -6.362450, y: 0.683771, z: -5.191109} + - time: 1.733333 + value: {x: -6.430628, y: 0.705395, z: -5.266481} + - time: 1.766667 + value: {x: -6.494589, y: 0.728059, z: -5.337654} + - time: 1.800000 + value: {x: -6.554388, y: 0.751560, z: -5.404701} + - time: 1.833333 + value: {x: -6.609488, y: 0.775953, z: -5.467159} + - time: 1.866667 + value: {x: -6.658279, y: 0.801359, z: -5.523581} + - time: 1.900000 + value: {x: -6.702827, y: 0.826858, z: -5.575949} + - time: 1.933333 + value: {x: -6.742033, y: 0.852546, z: -5.623369} + - time: 1.966667 + value: {x: -6.774370, y: 0.877833, z: -5.664764} + - time: 2.000000 + value: {x: -6.803747, y: 0.902422, z: -5.703331} + - time: 2.033333 + value: {x: -6.824724, y: 0.925148, z: -5.734959} + - time: 2.066667 + value: {x: -6.843674, y: 0.946479, z: -5.764441} + - time: 2.100000 + value: {x: -6.856796, y: 0.964898, z: -5.788616} + - time: 2.133333 + value: {x: -6.868372, y: 0.981739, z: -5.811035} + - time: 2.166667 + value: {x: -6.875694, y: 0.995229, z: -5.829441} + - time: 2.200000 + value: {x: -6.882792, y: 1.007958, z: -5.847176} + - time: 2.233333 + value: {x: -6.886332, y: 1.016971, z: -5.861414} + - time: 2.266667 + value: {x: -6.890085, y: 1.025648, z: -5.875343} + - time: 2.300000 + value: {x: -6.892361, y: 1.032166, z: -5.887524} + - time: 2.333333 + value: {x: -6.893961, y: 1.037434, z: -5.898643} + - time: 2.366667 + value: {x: -6.895815, y: 1.042486, z: -5.909487} + - time: 2.400000 + value: {x: -6.896639, y: 1.045722, z: -5.918922} + - time: 2.433333 + value: {x: -6.897482, y: 1.048508, z: -5.927877} + - time: 2.466667 + value: {x: -6.898575, y: 1.051174, z: -5.936554} + - time: 2.500000 + value: {x: -6.899555, y: 1.053255, z: -5.944633} + - time: 2.533333 + value: {x: -6.900322, y: 1.054651, z: -5.952028} + - time: 2.566667 + value: {x: -6.901295, y: 1.055986, z: -5.959114} + - time: 2.600000 + value: {x: -6.902437, y: 1.057256, z: -5.965858} + - time: 2.633333 + value: {x: -6.903723, y: 1.058454, z: -5.972240} + - time: 2.666667 + value: {x: -6.904896, y: 1.059271, z: -5.978041} + - time: 2.700000 + value: {x: -6.906120, y: 1.059987, z: -5.983402} + - time: 2.733333 + value: {x: -6.907394, y: 1.060652, z: -5.988335} + - time: 2.766667 + value: {x: -6.908680, y: 1.061261, z: -5.992804} + - time: 2.800000 + value: {x: -6.909939, y: 1.061808, z: -5.996782} + - time: 2.833333 + value: {x: -6.911119, y: 1.062288, z: -6.000237} + - time: 2.866667 + value: {x: -6.912191, y: 1.062694, z: -6.003136} + - time: 2.900000 + value: {x: -6.913107, y: 1.063021, z: -6.005447} + - time: 2.933333 + value: {x: -6.913815, y: 1.063262, z: -6.007141} + - time: 2.966667 + value: {x: -6.914276, y: 1.063412, z: -6.008183} + - time: 3.000000 + value: {x: -6.914444, y: 1.063463, z: -6.008537} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.249408, y: 0.249408, z: 0.249408} + - time: 0.033333 + value: {x: 0.249527, y: 0.249527, z: 0.249527} + - time: 0.066667 + value: {x: 0.298856, y: 0.298856, z: 0.298856} + - time: 0.100000 + value: {x: 0.362755, y: 0.362755, z: 0.362755} + - time: 0.133333 + value: {x: 0.423816, y: 0.423816, z: 0.423816} + - time: 0.166667 + value: {x: 0.489779, y: 0.489779, z: 0.489779} + - time: 0.200000 + value: {x: 0.569325, y: 0.569325, z: 0.569325} + - time: 0.233333 + value: {x: 0.658105, y: 0.658105, z: 0.658105} + - time: 0.266667 + value: {x: 0.754703, y: 0.754703, z: 0.754703} + - time: 0.300000 + value: {x: 0.857224, y: 0.857224, z: 0.857224} + - time: 0.333333 + value: {x: 0.964939, y: 0.964939, z: 0.964939} + - time: 0.366667 + value: {x: 1.077346, y: 1.077346, z: 1.077346} + - time: 0.400000 + value: {x: 1.193767, y: 1.193767, z: 1.193767} + - time: 0.433333 + value: {x: 1.313351, y: 1.313351, z: 1.313351} + - time: 0.466667 + value: {x: 1.435878, y: 1.435878, z: 1.435878} + - time: 0.500000 + value: {x: 1.561714, y: 1.561714, z: 1.561714} + - time: 0.533333 + value: {x: 1.690996, y: 1.690996, z: 1.690996} + - time: 0.566667 + value: {x: 1.823179, y: 1.823179, z: 1.823179} + - time: 0.600000 + value: {x: 1.957230, y: 1.957230, z: 1.957230} + - time: 0.633333 + value: {x: 2.091713, y: 2.091713, z: 2.091713} + - time: 0.666667 + value: {x: 2.225637, y: 2.225637, z: 2.225637} + - time: 0.700000 + value: {x: 2.357964, y: 2.357964, z: 2.357964} + - time: 0.733333 + value: {x: 2.486784, y: 2.486784, z: 2.486784} + - time: 0.766667 + value: {x: 2.609775, y: 2.609775, z: 2.609775} + - time: 0.800000 + value: {x: 2.726475, y: 2.726475, z: 2.726475} + - time: 0.833333 + value: {x: 2.837840, y: 2.837840, z: 2.837840} + - time: 0.866667 + value: {x: 2.945358, y: 2.945358, z: 2.945358} + - time: 0.900000 + value: {x: 3.050697, y: 3.050697, z: 3.050697} + - time: 0.933333 + value: {x: 3.154260, y: 3.154260, z: 3.154260} + - time: 0.966667 + value: {x: 3.254884, y: 3.254884, z: 3.254884} + - time: 1.000000 + value: {x: 3.351579, y: 3.351579, z: 3.351579} + - time: 1.033333 + value: {x: 3.443656, y: 3.443656, z: 3.443656} + - time: 1.066667 + value: {x: 3.531393, y: 3.531393, z: 3.531393} + - time: 1.100000 + value: {x: 3.617000, y: 3.617000, z: 3.617000} + - time: 1.133333 + value: {x: 3.703827, y: 3.703827, z: 3.703827} + - time: 1.166667 + value: {x: 3.794201, y: 3.794201, z: 3.794201} + - time: 1.200000 + value: {x: 3.887074, y: 3.887074, z: 3.887074} + - time: 1.233333 + value: {x: 3.979653, y: 3.979653, z: 3.979653} + - time: 1.266667 + value: {x: 4.069108, y: 4.069108, z: 4.069108} + - time: 1.300000 + value: {x: 4.154336, y: 4.154336, z: 4.154336} + - time: 1.333333 + value: {x: 4.236311, y: 4.236311, z: 4.236311} + - time: 1.366667 + value: {x: 4.316163, y: 4.316163, z: 4.316163} + - time: 1.400000 + value: {x: 4.394127, y: 4.394127, z: 4.394127} + - time: 1.433333 + value: {x: 4.469040, y: 4.469040, z: 4.469040} + - time: 1.466667 + value: {x: 4.538295, y: 4.538295, z: 4.538295} + - time: 1.500000 + value: {x: 4.599576, y: 4.599576, z: 4.599576} + - time: 1.533333 + value: {x: 4.652151, y: 4.652151, z: 4.652151} + - time: 1.566667 + value: {x: 4.696580, y: 4.696580, z: 4.696580} + - time: 1.600000 + value: {x: 4.733267, y: 4.733267, z: 4.733267} + - time: 1.633333 + value: {x: 4.762767, y: 4.762767, z: 4.762767} + - time: 1.666667 + value: {x: 4.786262, y: 4.786262, z: 4.786262} + - time: 1.700000 + value: {x: 4.805147, y: 4.805147, z: 4.805147} + - time: 1.733333 + value: {x: 4.820886, y: 4.820886, z: 4.820886} + - time: 1.766667 + value: {x: 4.834214, y: 4.834214, z: 4.834214} + - time: 1.800000 + value: {x: 4.845605, y: 4.845605, z: 4.845605} + - time: 1.833333 + value: {x: 4.855381, y: 4.855381, z: 4.855381} + - time: 1.866667 + value: {x: 4.863792, y: 4.863792, z: 4.863792} + - time: 1.900000 + value: {x: 4.870935, y: 4.870935, z: 4.870935} + - time: 1.966667 + value: {x: 4.883805, y: 4.883805, z: 4.883805} + - time: 2.000000 + value: {x: 4.890525, y: 4.890525, z: 4.890525} + - time: 2.033333 + value: {x: 4.898110, y: 4.898110, z: 4.898110} + - time: 2.066667 + value: {x: 4.906025, y: 4.906025, z: 4.906025} + - time: 2.100000 + value: {x: 4.914194, y: 4.914194, z: 4.914194} + - time: 2.133333 + value: {x: 4.922004, y: 4.922004, z: 4.922004} + - time: 2.166667 + value: {x: 4.929551, y: 4.929551, z: 4.929551} + - time: 2.200000 + value: {x: 4.936505, y: 4.936505, z: 4.936505} + - time: 2.233333 + value: {x: 4.942852, y: 4.942852, z: 4.942852} + - time: 2.266667 + value: {x: 4.948186, y: 4.948186, z: 4.948186} + - time: 2.300000 + value: {x: 4.952359, y: 4.952359, z: 4.952359} + - time: 2.333333 + value: {x: 4.955348, y: 4.955348, z: 4.955348} + - time: 2.400000 + value: {x: 4.959371, y: 4.959371, z: 4.959371} + - time: 2.433333 + value: {x: 4.961841, y: 4.961841, z: 4.961841} + - time: 2.466667 + value: {x: 4.965467, y: 4.965467, z: 4.965467} + - time: 2.500000 + value: {x: 4.970246, y: 4.970246, z: 4.970246} + - time: 2.533333 + value: {x: 4.973794, y: 4.973794, z: 4.973794} + - time: 2.566667 + value: {x: 4.973976, y: 4.973976, z: 4.973976} + - time: 2.600000 + value: {x: 4.971313, y: 4.971313, z: 4.971313} + - time: 2.666667 + value: {x: 4.962656, y: 4.962656, z: 4.962656} + - time: 2.700000 + value: {x: 4.959600, y: 4.959600, z: 4.959600} + - time: 2.733333 + value: {x: 4.958642, y: 4.958642, z: 4.958642} + - time: 2.766667 + value: {x: 4.959811, y: 4.959811, z: 4.959811} + - time: 2.800000 + value: {x: 4.962654, y: 4.962654, z: 4.962654} + - time: 2.866667 + value: {x: 4.969464, y: 4.969464, z: 4.969464} + - time: 2.900000 + value: {x: 4.972389, y: 4.972389, z: 4.972389} + - time: 2.933333 + value: {x: 4.975994, y: 4.975994, z: 4.975994} + - time: 2.966667 + value: {x: 4.981713, y: 4.981713, z: 4.981713} + - time: 3.000000 + value: {x: 4.990914, y: 4.990914, z: 4.990914} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_11: + position: + - time: 0.000000 + value: {x: -0.011523, y: 2.511905, z: -0.159024} + - time: 0.033333 + value: {x: -0.011523, y: 2.511905, z: -0.159024} + - time: 0.066667 + value: {x: -0.036591, y: 1.915579, z: -0.006631} + - time: 0.100000 + value: {x: -0.095040, y: 1.296275, z: 0.070882} + - time: 0.133333 + value: {x: -0.230021, y: 0.768014, z: 0.134907} + - time: 0.166667 + value: {x: -0.485157, y: 0.439974, z: 0.194595} + - time: 0.200000 + value: {x: -0.780397, y: 0.309933, z: 0.216261} + - time: 0.233333 + value: {x: -1.006779, y: 0.265766, z: 0.213531} + - time: 0.266667 + value: {x: -1.144169, y: 0.252168, z: 0.207180} + - time: 0.300000 + value: {x: -1.263304, y: 0.245856, z: 0.200360} + - time: 0.333333 + value: {x: -1.382975, y: 0.243893, z: 0.192655} + - time: 0.366667 + value: {x: -1.502825, y: 0.245021, z: 0.184439} + - time: 0.400000 + value: {x: -1.622544, y: 0.248143, z: 0.176239} + - time: 0.433333 + value: {x: -1.741962, y: 0.252903, z: 0.168028} + - time: 0.466667 + value: {x: -1.860955, y: 0.258992, z: 0.159490} + - time: 0.500000 + value: {x: -1.979456, y: 0.265887, z: 0.150451} + - time: 0.533333 + value: {x: -2.097457, y: 0.273091, z: 0.140400} + - time: 0.566667 + value: {x: -2.214877, y: 0.280259, z: 0.129367} + - time: 0.600000 + value: {x: -2.331671, y: 0.287259, z: 0.117648} + - time: 0.633333 + value: {x: -2.447796, y: 0.294042, z: 0.105641} + - time: 0.666667 + value: {x: -2.563221, y: 0.300609, z: 0.093769} + - time: 0.700000 + value: {x: -2.677910, y: 0.306992, z: 0.082073} + - time: 0.733333 + value: {x: -2.791824, y: 0.313243, z: 0.070659} + - time: 0.766667 + value: {x: -2.904925, y: 0.319432, z: 0.059630} + - time: 0.800000 + value: {x: -3.017171, y: 0.325636, z: 0.049045} + - time: 0.833333 + value: {x: -3.128516, y: 0.331942, z: 0.039117} + - time: 0.866667 + value: {x: -3.238908, y: 0.338437, z: 0.030015} + - time: 0.900000 + value: {x: -3.348295, y: 0.345206, z: 0.021766} + - time: 0.933333 + value: {x: -3.456620, y: 0.352324, z: 0.014271} + - time: 0.966667 + value: {x: -3.563818, y: 0.359858, z: 0.007404} + - time: 1.000000 + value: {x: -3.669740, y: 0.367957, z: 0.001094} + - time: 1.033333 + value: {x: -3.774331, y: 0.376643, z: -0.004905} + - time: 1.066667 + value: {x: -3.877525, y: 0.385936, z: -0.010666} + - time: 1.100000 + value: {x: -3.979244, y: 0.395860, z: -0.016248} + - time: 1.133333 + value: {x: -4.079412, y: 0.406424, z: -0.021710} + - time: 1.166667 + value: {x: -4.177873, y: 0.417702, z: -0.027114} + - time: 1.200000 + value: {x: -4.274238, y: 0.429906, z: -0.032332} + - time: 1.233333 + value: {x: -4.368692, y: 0.442784, z: -0.037342} + - time: 1.266667 + value: {x: -4.461205, y: 0.456295, z: -0.042164} + - time: 1.300000 + value: {x: -4.551379, y: 0.470620, z: -0.046812} + - time: 1.333333 + value: {x: -4.638805, y: 0.485859, z: -0.051165} + - time: 1.366667 + value: {x: -4.723994, y: 0.501639, z: -0.055250} + - time: 1.400000 + value: {x: -4.806555, y: 0.518109, z: -0.058992} + - time: 1.433333 + value: {x: -4.885585, y: 0.535538, z: -0.062287} + - time: 1.466667 + value: {x: -4.962296, y: 0.553320, z: -0.065294} + - time: 1.500000 + value: {x: -5.035295, y: 0.571938, z: -0.067762} + - time: 1.533333 + value: {x: -5.104873, y: 0.591119, z: -0.069689} + - time: 1.566667 + value: {x: -5.171801, y: 0.610591, z: -0.071232} + - time: 1.600000 + value: {x: -5.233592, y: 0.630914, z: -0.071809} + - time: 1.633333 + value: {x: -5.293728, y: 0.651115, z: -0.072191} + - time: 1.666667 + value: {x: -5.347325, y: 0.672148, z: -0.071295} + - time: 1.700000 + value: {x: -5.399689, y: 0.692855, z: -0.070321} + - time: 1.733333 + value: {x: -5.445229, y: 0.713950, z: -0.068168} + - time: 1.766667 + value: {x: -5.490042, y: 0.734617, z: -0.066055} + - time: 1.800000 + value: {x: -5.527027, y: 0.755057, z: -0.062918} + - time: 1.833333 + value: {x: -5.563494, y: 0.775045, z: -0.059863} + - time: 1.866667 + value: {x: -5.593435, y: 0.793886, z: -0.056351} + - time: 1.900000 + value: {x: -5.621443, y: 0.812103, z: -0.052801} + - time: 1.933333 + value: {x: -5.646345, y: 0.829032, z: -0.049280} + - time: 1.966667 + value: {x: -5.666725, y: 0.844237, z: -0.045752} + - time: 2.000000 + value: {x: -5.686850, y: 0.859037, z: -0.042333} + - time: 2.033333 + value: {x: -5.702738, y: 0.871322, z: -0.039125} + - time: 2.066667 + value: {x: -5.717117, y: 0.882546, z: -0.036060} + - time: 2.100000 + value: {x: -5.731344, y: 0.893439, z: -0.033102} + - time: 2.133333 + value: {x: -5.742643, y: 0.901977, z: -0.030411} + - time: 2.166667 + value: {x: -5.753086, y: 0.909690, z: -0.027867} + - time: 2.200000 + value: {x: -5.763437, y: 0.917150, z: -0.025425} + - time: 2.233333 + value: {x: -5.772915, y: 0.923670, z: -0.023141} + - time: 2.266667 + value: {x: -5.780972, y: 0.928774, z: -0.021057} + - time: 2.333333 + value: {x: -5.796852, y: 0.938425, z: -0.017177} + - time: 2.366667 + value: {x: -5.804396, y: 0.942728, z: -0.015402} + - time: 2.400000 + value: {x: -5.811005, y: 0.946029, z: -0.013796} + - time: 2.466667 + value: {x: -5.823866, y: 0.952199, z: -0.010856} + - time: 2.533333 + value: {x: -5.836084, y: 0.957761, z: -0.008280} + - time: 2.566667 + value: {x: -5.841663, y: 0.960066, z: -0.007153} + - time: 2.600000 + value: {x: -5.846897, y: 0.962100, z: -0.006128} + - time: 2.633333 + value: {x: -5.851892, y: 0.963995, z: -0.005189} + - time: 2.666667 + value: {x: -5.856615, y: 0.965747, z: -0.004336} + - time: 2.700000 + value: {x: -5.861034, y: 0.967352, z: -0.003569} + - time: 2.733333 + value: {x: -5.865124, y: 0.968806, z: -0.002886} + - time: 2.766667 + value: {x: -5.868855, y: 0.970104, z: -0.002288} + - time: 2.800000 + value: {x: -5.872190, y: 0.971242, z: -0.001773} + - time: 2.833333 + value: {x: -5.875103, y: 0.972217, z: -0.001340} + - time: 2.866667 + value: {x: -5.877563, y: 0.973024, z: -0.000989} + - time: 2.900000 + value: {x: -5.879534, y: 0.973660, z: -0.000718} + - time: 2.933333 + value: {x: -5.880983, y: 0.974118, z: -0.000526} + - time: 2.966667 + value: {x: -5.881880, y: 0.974396, z: -0.000412} + - time: 3.000000 + value: {x: -5.882187, y: 0.974490, z: -0.000374} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.375750, y: 0.375750, z: 0.375750} + - time: 0.033333 + value: {x: 0.376019, y: 0.376019, z: 0.376019} + - time: 0.066667 + value: {x: 0.394196, y: 0.394196, z: 0.394196} + - time: 0.100000 + value: {x: 0.419722, y: 0.419722, z: 0.419722} + - time: 0.133333 + value: {x: 0.450325, y: 0.450325, z: 0.450325} + - time: 0.200000 + value: {x: 0.512030, y: 0.512030, z: 0.512030} + - time: 0.233333 + value: {x: 0.550128, y: 0.550128, z: 0.550128} + - time: 0.266667 + value: {x: 0.595540, y: 0.595540, z: 0.595540} + - time: 0.300000 + value: {x: 0.645659, y: 0.645659, z: 0.645659} + - time: 0.333333 + value: {x: 0.699647, y: 0.699647, z: 0.699647} + - time: 0.366667 + value: {x: 0.757211, y: 0.757211, z: 0.757211} + - time: 0.400000 + value: {x: 0.818313, y: 0.818313, z: 0.818313} + - time: 0.433333 + value: {x: 0.883140, y: 0.883140, z: 0.883140} + - time: 0.466667 + value: {x: 0.951778, y: 0.951778, z: 0.951778} + - time: 0.500000 + value: {x: 1.023902, y: 1.023902, z: 1.023902} + - time: 0.533333 + value: {x: 1.098866, y: 1.098866, z: 1.098866} + - time: 0.566667 + value: {x: 1.176050, y: 1.176050, z: 1.176050} + - time: 0.600000 + value: {x: 1.255243, y: 1.255243, z: 1.255243} + - time: 0.633333 + value: {x: 1.336615, y: 1.336615, z: 1.336615} + - time: 0.666667 + value: {x: 1.420372, y: 1.420372, z: 1.420372} + - time: 0.700000 + value: {x: 1.506397, y: 1.506397, z: 1.506397} + - time: 0.733333 + value: {x: 1.594220, y: 1.594220, z: 1.594220} + - time: 0.766667 + value: {x: 1.683232, y: 1.683232, z: 1.683232} + - time: 0.833333 + value: {x: 1.862539, y: 1.862539, z: 1.862539} + - time: 0.866667 + value: {x: 1.951850, y: 1.951850, z: 1.951850} + - time: 0.900000 + value: {x: 2.039842, y: 2.039842, z: 2.039842} + - time: 0.933333 + value: {x: 2.125801, y: 2.125801, z: 2.125801} + - time: 0.966667 + value: {x: 2.209970, y: 2.209970, z: 2.209970} + - time: 1.000000 + value: {x: 2.293713, y: 2.293713, z: 2.293713} + - time: 1.033333 + value: {x: 2.378569, y: 2.378569, z: 2.378569} + - time: 1.066667 + value: {x: 2.465280, y: 2.465280, z: 2.465280} + - time: 1.100000 + value: {x: 2.553709, y: 2.553709, z: 2.553709} + - time: 1.133333 + value: {x: 2.643261, y: 2.643261, z: 2.643261} + - time: 1.200000 + value: {x: 2.822981, y: 2.822981, z: 2.822981} + - time: 1.233333 + value: {x: 2.912148, y: 2.912148, z: 2.912148} + - time: 1.266667 + value: {x: 2.999584, y: 2.999584, z: 2.999584} + - time: 1.300000 + value: {x: 3.084217, y: 3.084217, z: 3.084217} + - time: 1.333333 + value: {x: 3.165332, y: 3.165332, z: 3.165332} + - time: 1.366667 + value: {x: 3.242898, y: 3.242898, z: 3.242898} + - time: 1.400000 + value: {x: 3.317530, y: 3.317530, z: 3.317530} + - time: 1.433333 + value: {x: 3.389924, y: 3.389924, z: 3.389924} + - time: 1.466667 + value: {x: 3.460561, y: 3.460561, z: 3.460561} + - time: 1.500000 + value: {x: 3.530210, y: 3.530210, z: 3.530210} + - time: 1.566667 + value: {x: 3.668766, y: 3.668766, z: 3.668766} + - time: 1.600000 + value: {x: 3.737576, y: 3.737576, z: 3.737576} + - time: 1.633333 + value: {x: 3.805277, y: 3.805277, z: 3.805277} + - time: 1.666667 + value: {x: 3.871431, y: 3.871431, z: 3.871431} + - time: 1.700000 + value: {x: 3.935205, y: 3.935205, z: 3.935205} + - time: 1.733333 + value: {x: 3.996821, y: 3.996821, z: 3.996821} + - time: 1.766667 + value: {x: 4.056955, y: 4.056955, z: 4.056955} + - time: 1.800000 + value: {x: 4.116819, y: 4.116819, z: 4.116819} + - time: 1.866667 + value: {x: 4.235766, y: 4.235766, z: 4.235766} + - time: 1.900000 + value: {x: 4.294019, y: 4.294019, z: 4.294019} + - time: 1.933333 + value: {x: 4.350286, y: 4.350286, z: 4.350286} + - time: 1.966667 + value: {x: 4.403585, y: 4.403585, z: 4.403585} + - time: 2.000000 + value: {x: 4.453082, y: 4.453082, z: 4.453082} + - time: 2.033333 + value: {x: 4.498715, y: 4.498715, z: 4.498715} + - time: 2.066667 + value: {x: 4.541206, y: 4.541206, z: 4.541206} + - time: 2.100000 + value: {x: 4.581676, y: 4.581676, z: 4.581676} + - time: 2.133333 + value: {x: 4.620902, y: 4.620902, z: 4.620902} + - time: 2.233333 + value: {x: 4.737112, y: 4.737112, z: 4.737112} + - time: 2.266667 + value: {x: 4.776396, y: 4.776396, z: 4.776396} + - time: 2.300000 + value: {x: 4.816492, y: 4.816492, z: 4.816492} + - time: 2.333333 + value: {x: 4.857601, y: 4.857601, z: 4.857601} + - time: 2.366667 + value: {x: 4.899617, y: 4.899617, z: 4.899617} + - time: 2.433333 + value: {x: 4.985028, y: 4.985028, z: 4.985028} + - time: 2.466667 + value: {x: 5.027256, y: 5.027256, z: 5.027256} + - time: 2.500000 + value: {x: 5.068354, y: 5.068354, z: 5.068354} + - time: 2.533333 + value: {x: 5.106805, y: 5.106805, z: 5.106805} + - time: 2.566667 + value: {x: 5.141529, y: 5.141529, z: 5.141529} + - time: 2.600000 + value: {x: 5.173072, y: 5.173072, z: 5.173072} + - time: 2.633333 + value: {x: 5.202189, y: 5.202189, z: 5.202189} + - time: 2.666667 + value: {x: 5.229535, y: 5.229535, z: 5.229535} + - time: 2.700000 + value: {x: 5.255357, y: 5.255357, z: 5.255357} + - time: 2.733333 + value: {x: 5.279293, y: 5.279293, z: 5.279293} + - time: 2.766667 + value: {x: 5.300613, y: 5.300613, z: 5.300613} + - time: 2.800000 + value: {x: 5.319296, y: 5.319296, z: 5.319296} + - time: 2.833333 + value: {x: 5.336347, y: 5.336347, z: 5.336347} + - time: 2.866667 + value: {x: 5.353141, y: 5.353141, z: 5.353141} + - time: 2.900000 + value: {x: 5.370738, y: 5.370738, z: 5.370738} + - time: 2.933333 + value: {x: 5.389923, y: 5.389923, z: 5.389923} + - time: 2.966667 + value: {x: 5.410670, y: 5.410670, z: 5.410670} + - time: 3.000000 + value: {x: 5.432114, y: 5.432114, z: 5.432114} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_12: + position: + - time: 0.000000 + value: {x: -0.110479, y: 2.511905, z: -0.118569} + - time: 0.033333 + value: {x: -0.110479, y: 2.511905, z: -0.118569} + - time: 0.066667 + value: {x: -0.032726, y: 1.915579, z: 0.017713} + - time: 0.100000 + value: {x: -0.024505, y: 1.296275, z: 0.120978} + - time: 0.133333 + value: {x: -0.074238, y: 0.768014, z: 0.274292} + - time: 0.166667 + value: {x: -0.199644, y: 0.439974, z: 0.525164} + - time: 0.200000 + value: {x: -0.373164, y: 0.309932, z: 0.780275} + - time: 0.233333 + value: {x: -0.527539, y: 0.265766, z: 0.949460} + - time: 0.266667 + value: {x: -0.626505, y: 0.252168, z: 1.045597} + - time: 0.300000 + value: {x: -0.714137, y: 0.245856, z: 1.126711} + - time: 0.333333 + value: {x: -0.804686, y: 0.243893, z: 1.205064} + - time: 0.366667 + value: {x: -0.899379, y: 0.245021, z: 1.278565} + - time: 0.400000 + value: {x: -0.996407, y: 0.248143, z: 1.348964} + - time: 0.433333 + value: {x: -1.093992, y: 0.252903, z: 1.418194} + - time: 0.466667 + value: {x: -1.191614, y: 0.258992, z: 1.486701} + - time: 0.500000 + value: {x: -1.289371, y: 0.265887, z: 1.554257} + - time: 0.533333 + value: {x: -1.386507, y: 0.273090, z: 1.621785} + - time: 0.566667 + value: {x: -1.483250, y: 0.280259, z: 1.688875} + - time: 0.600000 + value: {x: -1.579527, y: 0.287259, z: 1.755545} + - time: 0.633333 + value: {x: -1.674594, y: 0.294042, z: 1.822652} + - time: 0.666667 + value: {x: -1.768269, y: 0.300609, z: 1.890368} + - time: 0.700000 + value: {x: -1.861097, y: 0.306992, z: 1.957959} + - time: 0.733333 + value: {x: -1.953682, y: 0.313243, z: 2.024620} + - time: 0.766667 + value: {x: -2.046619, y: 0.319432, z: 2.089550} + - time: 0.800000 + value: {x: -2.140295, y: 0.325636, z: 2.152201} + - time: 0.833333 + value: {x: -2.234442, y: 0.331942, z: 2.212834} + - time: 0.866667 + value: {x: -2.328256, y: 0.338437, z: 2.272362} + - time: 0.900000 + value: {x: -2.420977, y: 0.345206, z: 2.331646} + - time: 0.933333 + value: {x: -2.512181, y: 0.352324, z: 2.391116} + - time: 0.966667 + value: {x: -2.601703, y: 0.359858, z: 2.450878} + - time: 1.000000 + value: {x: -2.689321, y: 0.367957, z: 2.510965} + - time: 1.033333 + value: {x: -2.775343, y: 0.376643, z: 2.570915} + - time: 1.066667 + value: {x: -2.859999, y: 0.385936, z: 2.630331} + - time: 1.100000 + value: {x: -2.943464, y: 0.395860, z: 2.688872} + - time: 1.133333 + value: {x: -3.025794, y: 0.406424, z: 2.746353} + - time: 1.166667 + value: {x: -3.106865, y: 0.417702, z: 2.802675} + - time: 1.200000 + value: {x: -3.186398, y: 0.429905, z: 2.857565} + - time: 1.233333 + value: {x: -3.264297, y: 0.442785, z: 2.911437} + - time: 1.266667 + value: {x: -3.340585, y: 0.456295, z: 2.964216} + - time: 1.300000 + value: {x: -3.415073, y: 0.470620, z: 3.015500} + - time: 1.333333 + value: {x: -3.487674, y: 0.485859, z: 3.064745} + - time: 1.366667 + value: {x: -3.558651, y: 0.501639, z: 3.112442} + - time: 1.400000 + value: {x: -3.627727, y: 0.518109, z: 3.158308} + - time: 1.433333 + value: {x: -3.694196, y: 0.535538, z: 3.201783} + - time: 1.466667 + value: {x: -3.758886, y: 0.553320, z: 3.243771} + - time: 1.500000 + value: {x: -3.820811, y: 0.571938, z: 3.283274} + - time: 1.533333 + value: {x: -3.879892, y: 0.591119, z: 3.320852} + - time: 1.566667 + value: {x: -3.936757, y: 0.610591, z: 3.356959} + - time: 1.600000 + value: {x: -3.989213, y: 0.630913, z: 3.390347} + - time: 1.633333 + value: {x: -4.040227, y: 0.651115, z: 3.422891} + - time: 1.666667 + value: {x: -4.085672, y: 0.672148, z: 3.451921} + - time: 1.700000 + value: {x: -4.130051, y: 0.692854, z: 3.480308} + - time: 1.733333 + value: {x: -4.168796, y: 0.713950, z: 3.504811} + - time: 1.766667 + value: {x: -4.206893, y: 0.734617, z: 3.528957} + - time: 1.800000 + value: {x: -4.238790, y: 0.755057, z: 3.548325} + - time: 1.833333 + value: {x: -4.270203, y: 0.775045, z: 3.567467} + - time: 1.866667 + value: {x: -4.296588, y: 0.793886, z: 3.582447} + - time: 1.900000 + value: {x: -4.321419, y: 0.812103, z: 3.596278} + - time: 1.933333 + value: {x: -4.343815, y: 0.829032, z: 3.608177} + - time: 1.966667 + value: {x: -4.362712, y: 0.844237, z: 3.617209} + - time: 2.000000 + value: {x: -4.381317, y: 0.859037, z: 3.626200} + - time: 2.033333 + value: {x: -4.396596, y: 0.871322, z: 3.632565} + - time: 2.066667 + value: {x: -4.410625, y: 0.882546, z: 3.638079} + - time: 2.100000 + value: {x: -4.424435, y: 0.893438, z: 3.643620} + - time: 2.133333 + value: {x: -4.435882, y: 0.901977, z: 3.647426} + - time: 2.166667 + value: {x: -4.446566, y: 0.909690, z: 3.650815} + - time: 2.200000 + value: {x: -4.457076, y: 0.917150, z: 3.654272} + - time: 2.233333 + value: {x: -4.466800, y: 0.923670, z: 3.657313} + - time: 2.266667 + value: {x: -4.475313, y: 0.928774, z: 3.659593} + - time: 2.333333 + value: {x: -4.491848, y: 0.938425, z: 3.664392} + - time: 2.366667 + value: {x: -4.499647, y: 0.942728, z: 3.666739} + - time: 2.433333 + value: {x: -4.513361, y: 0.949188, z: 3.670615} + - time: 2.500000 + value: {x: -4.526245, y: 0.955058, z: 3.674660} + - time: 2.533333 + value: {x: -4.532324, y: 0.957761, z: 3.676703} + - time: 2.566667 + value: {x: -4.537956, y: 0.960066, z: 3.678607} + - time: 2.600000 + value: {x: -4.543219, y: 0.962100, z: 3.680424} + - time: 2.633333 + value: {x: -4.548191, y: 0.963995, z: 3.682213} + - time: 2.666667 + value: {x: -4.552851, y: 0.965747, z: 3.683956} + - time: 2.700000 + value: {x: -4.557180, y: 0.967352, z: 3.685631} + - time: 2.733333 + value: {x: -4.561153, y: 0.968805, z: 3.687222} + - time: 2.766667 + value: {x: -4.564747, y: 0.970104, z: 3.688704} + - time: 2.800000 + value: {x: -4.567940, y: 0.971243, z: 3.690063} + - time: 2.833333 + value: {x: -4.570709, y: 0.972217, z: 3.691270} + - time: 2.866667 + value: {x: -4.573030, y: 0.973025, z: 3.692311} + - time: 2.900000 + value: {x: -4.574877, y: 0.973660, z: 3.693161} + - time: 2.933333 + value: {x: -4.576227, y: 0.974118, z: 3.693795} + - time: 2.966667 + value: {x: -4.577055, y: 0.974396, z: 3.694193} + - time: 3.000000 + value: {x: -4.577337, y: 0.974490, z: 3.694332} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.391086, y: 0.391086, z: 0.391086} + - time: 0.033333 + value: {x: 0.391425, y: 0.391425, z: 0.391425} + - time: 0.066667 + value: {x: 0.405901, y: 0.405901, z: 0.405901} + - time: 0.100000 + value: {x: 0.425891, y: 0.425891, z: 0.425891} + - time: 0.133333 + value: {x: 0.450249, y: 0.450249, z: 0.450249} + - time: 0.200000 + value: {x: 0.503794, y: 0.503794, z: 0.503794} + - time: 0.233333 + value: {x: 0.533696, y: 0.533696, z: 0.533696} + - time: 0.266667 + value: {x: 0.569198, y: 0.569198, z: 0.569198} + - time: 0.300000 + value: {x: 0.609298, y: 0.609298, z: 0.609298} + - time: 0.333333 + value: {x: 0.653205, y: 0.653205, z: 0.653205} + - time: 0.366667 + value: {x: 0.700113, y: 0.700113, z: 0.700113} + - time: 0.400000 + value: {x: 0.749374, y: 0.749374, z: 0.749374} + - time: 0.433333 + value: {x: 0.800771, y: 0.800771, z: 0.800771} + - time: 0.466667 + value: {x: 0.854269, y: 0.854269, z: 0.854269} + - time: 0.500000 + value: {x: 0.910042, y: 0.910042, z: 0.910042} + - time: 0.533333 + value: {x: 0.968580, y: 0.968580, z: 0.968580} + - time: 0.566667 + value: {x: 1.030096, y: 1.030096, z: 1.030096} + - time: 0.600000 + value: {x: 1.094549, y: 1.094549, z: 1.094549} + - time: 0.633333 + value: {x: 1.161921, y: 1.161921, z: 1.161921} + - time: 0.666667 + value: {x: 1.232144, y: 1.232144, z: 1.232144} + - time: 0.700000 + value: {x: 1.304931, y: 1.304931, z: 1.304931} + - time: 0.733333 + value: {x: 1.379617, y: 1.379617, z: 1.379617} + - time: 0.766667 + value: {x: 1.455405, y: 1.455405, z: 1.455405} + - time: 0.833333 + value: {x: 1.607614, y: 1.607614, z: 1.607614} + - time: 0.866667 + value: {x: 1.683397, y: 1.683397, z: 1.683397} + - time: 0.900000 + value: {x: 1.758908, y: 1.758908, z: 1.758908} + - time: 0.933333 + value: {x: 1.833939, y: 1.833939, z: 1.833939} + - time: 0.966667 + value: {x: 1.908270, y: 1.908270, z: 1.908270} + - time: 1.000000 + value: {x: 1.982111, y: 1.982111, z: 1.982111} + - time: 1.033333 + value: {x: 2.056400, y: 2.056400, z: 2.056400} + - time: 1.066667 + value: {x: 2.132306, y: 2.132306, z: 2.132306} + - time: 1.100000 + value: {x: 2.210643, y: 2.210643, z: 2.210643} + - time: 1.133333 + value: {x: 2.291439, y: 2.291439, z: 2.291439} + - time: 1.166667 + value: {x: 2.373947, y: 2.373947, z: 2.373947} + - time: 1.200000 + value: {x: 2.457258, y: 2.457258, z: 2.457258} + - time: 1.233333 + value: {x: 2.540808, y: 2.540808, z: 2.540808} + - time: 1.266667 + value: {x: 2.623879, y: 2.623879, z: 2.623879} + - time: 1.300000 + value: {x: 2.705452, y: 2.705452, z: 2.705452} + - time: 1.333333 + value: {x: 2.784760, y: 2.784760, z: 2.784760} + - time: 1.366667 + value: {x: 2.861610, y: 2.861610, z: 2.861610} + - time: 1.400000 + value: {x: 2.936006, y: 2.936006, z: 2.936006} + - time: 1.433333 + value: {x: 3.008233, y: 3.008233, z: 3.008233} + - time: 1.466667 + value: {x: 3.078748, y: 3.078748, z: 3.078748} + - time: 1.500000 + value: {x: 3.148061, y: 3.148061, z: 3.148061} + - time: 1.533333 + value: {x: 3.216516, y: 3.216516, z: 3.216516} + - time: 1.566667 + value: {x: 3.284040, y: 3.284040, z: 3.284040} + - time: 1.600000 + value: {x: 3.350566, y: 3.350566, z: 3.350566} + - time: 1.633333 + value: {x: 3.415605, y: 3.415605, z: 3.415605} + - time: 1.666667 + value: {x: 3.479225, y: 3.479225, z: 3.479225} + - time: 1.700000 + value: {x: 3.541003, y: 3.541003, z: 3.541003} + - time: 1.733333 + value: {x: 3.601482, y: 3.601482, z: 3.601482} + - time: 1.833333 + value: {x: 3.779181, y: 3.779181, z: 3.779181} + - time: 1.866667 + value: {x: 3.839432, y: 3.839432, z: 3.839432} + - time: 1.900000 + value: {x: 3.900850, y: 3.900850, z: 3.900850} + - time: 1.933333 + value: {x: 3.964133, y: 3.964133, z: 3.964133} + - time: 1.966667 + value: {x: 4.029546, y: 4.029546, z: 4.029546} + - time: 2.000000 + value: {x: 4.096068, y: 4.096068, z: 4.096068} + - time: 2.033333 + value: {x: 4.162107, y: 4.162107, z: 4.162107} + - time: 2.066667 + value: {x: 4.225913, y: 4.225913, z: 4.225913} + - time: 2.100000 + value: {x: 4.286359, y: 4.286359, z: 4.286359} + - time: 2.133333 + value: {x: 4.343176, y: 4.343176, z: 4.343176} + - time: 2.166667 + value: {x: 4.396844, y: 4.396844, z: 4.396844} + - time: 2.200000 + value: {x: 4.448039, y: 4.448039, z: 4.448039} + - time: 2.233333 + value: {x: 4.497395, y: 4.497395, z: 4.497395} + - time: 2.266667 + value: {x: 4.545427, y: 4.545427, z: 4.545427} + - time: 2.333333 + value: {x: 4.639761, y: 4.639761, z: 4.639761} + - time: 2.366667 + value: {x: 4.687616, y: 4.687616, z: 4.687616} + - time: 2.400000 + value: {x: 4.736441, y: 4.736441, z: 4.736441} + - time: 2.466667 + value: {x: 4.835649, y: 4.835649, z: 4.835649} + - time: 2.500000 + value: {x: 4.884889, y: 4.884889, z: 4.884889} + - time: 2.533333 + value: {x: 4.932396, y: 4.932396, z: 4.932396} + - time: 2.566667 + value: {x: 4.976973, y: 4.976973, z: 4.976973} + - time: 2.600000 + value: {x: 5.018431, y: 5.018431, z: 5.018431} + - time: 2.633333 + value: {x: 5.056801, y: 5.056801, z: 5.056801} + - time: 2.666667 + value: {x: 5.092497, y: 5.092497, z: 5.092497} + - time: 2.700000 + value: {x: 5.126190, y: 5.126190, z: 5.126190} + - time: 2.733333 + value: {x: 5.158599, y: 5.158599, z: 5.158599} + - time: 2.766667 + value: {x: 5.190252, y: 5.190252, z: 5.190252} + - time: 2.800000 + value: {x: 5.221221, y: 5.221221, z: 5.221221} + - time: 2.833333 + value: {x: 5.251029, y: 5.251029, z: 5.251029} + - time: 2.866667 + value: {x: 5.278859, y: 5.278859, z: 5.278859} + - time: 2.900000 + value: {x: 5.303503, y: 5.303503, z: 5.303503} + - time: 2.933333 + value: {x: 5.324395, y: 5.324395, z: 5.324395} + - time: 2.966667 + value: {x: 5.341682, y: 5.341682, z: 5.341682} + - time: 3.000000 + value: {x: 5.355857, y: 5.355857, z: 5.355857} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_13: + position: + - time: 0.000000 + value: {x: -0.163947, y: 2.511905, z: -0.023657} + - time: 0.033333 + value: {x: -0.163947, y: 2.511905, z: -0.023657} + - time: 0.066667 + value: {x: -0.016448, y: 1.915579, z: 0.033880} + - time: 0.100000 + value: {x: 0.061367, y: 1.296275, z: 0.110501} + - time: 0.133333 + value: {x: 0.144002, y: 0.768014, z: 0.266464} + - time: 0.166667 + value: {x: 0.285413, y: 0.439974, z: 0.558068} + - time: 0.200000 + value: {x: 0.408132, y: 0.309932, z: 0.886665} + - time: 0.233333 + value: {x: 0.458394, y: 0.265766, z: 1.129148} + - time: 0.266667 + value: {x: 0.481094, y: 0.252168, z: 1.274621} + - time: 0.300000 + value: {x: 0.492045, y: 0.245856, z: 1.398878} + - time: 0.333333 + value: {x: 0.489915, y: 0.243893, z: 1.520855} + - time: 0.366667 + value: {x: 0.473150, y: 0.245021, z: 1.639851} + - time: 0.400000 + value: {x: 0.451481, y: 0.248143, z: 1.757652} + - time: 0.433333 + value: {x: 0.431744, y: 0.252903, z: 1.875563} + - time: 0.466667 + value: {x: 0.416894, y: 0.258992, z: 1.994095} + - time: 0.500000 + value: {x: 0.407527, y: 0.265887, z: 2.113310} + - time: 0.533333 + value: {x: 0.402323, y: 0.273090, z: 2.232912} + - time: 0.566667 + value: {x: 0.398408, y: 0.280259, z: 2.352199} + - time: 0.600000 + value: {x: 0.393175, y: 0.287259, z: 2.470559} + - time: 0.633333 + value: {x: 0.385014, y: 0.294042, z: 2.587602} + - time: 0.666667 + value: {x: 0.371663, y: 0.300609, z: 2.702807} + - time: 0.700000 + value: {x: 0.351757, y: 0.306992, z: 2.815841} + - time: 0.733333 + value: {x: 0.324955, y: 0.313243, z: 2.926591} + - time: 0.766667 + value: {x: 0.289877, y: 0.319432, z: 3.034721} + - time: 0.800000 + value: {x: 0.247218, y: 0.325636, z: 3.140336} + - time: 0.833333 + value: {x: 0.200456, y: 0.331942, z: 3.244143} + - time: 0.866667 + value: {x: 0.152473, y: 0.338437, z: 3.346710} + - time: 0.900000 + value: {x: 0.105646, y: 0.345206, z: 3.448501} + - time: 0.933333 + value: {x: 0.061279, y: 0.352324, z: 3.549735} + - time: 0.966667 + value: {x: 0.020032, y: 0.359858, z: 3.650492} + - time: 1.000000 + value: {x: -0.017279, y: 0.367957, z: 3.750793} + - time: 1.033333 + value: {x: -0.050891, y: 0.376643, z: 3.850533} + - time: 1.066667 + value: {x: -0.081069, y: 0.385936, z: 3.949588} + - time: 1.100000 + value: {x: -0.108089, y: 0.395860, z: 4.047814} + - time: 1.133333 + value: {x: -0.132287, y: 0.406424, z: 4.145065} + - time: 1.166667 + value: {x: -0.153850, y: 0.417702, z: 4.241139} + - time: 1.200000 + value: {x: -0.173145, y: 0.429905, z: 4.335559} + - time: 1.233333 + value: {x: -0.191271, y: 0.442785, z: 4.428276} + - time: 1.266667 + value: {x: -0.208627, y: 0.456295, z: 4.519175} + - time: 1.300000 + value: {x: -0.225655, y: 0.470620, z: 4.607751} + - time: 1.333333 + value: {x: -0.242793, y: 0.485859, z: 4.693492} + - time: 1.366667 + value: {x: -0.260108, y: 0.501639, z: 4.776905} + - time: 1.400000 + value: {x: -0.277793, y: 0.518109, z: 4.857550} + - time: 1.433333 + value: {x: -0.296463, y: 0.535538, z: 4.934370} + - time: 1.466667 + value: {x: -0.315554, y: 0.553320, z: 5.008726} + - time: 1.500000 + value: {x: -0.335743, y: 0.571938, z: 5.079046} + - time: 1.533333 + value: {x: -0.356985, y: 0.591119, z: 5.145639} + - time: 1.566667 + value: {x: -0.378841, y: 0.610591, z: 5.209388} + - time: 1.600000 + value: {x: -0.403004, y: 0.630913, z: 5.267385} + - time: 1.633333 + value: {x: -0.427270, y: 0.651115, z: 5.323664} + - time: 1.666667 + value: {x: -0.455056, y: 0.672148, z: 5.372491} + - time: 1.700000 + value: {x: -0.482624, y: 0.692855, z: 5.420104} + - time: 1.733333 + value: {x: -0.513587, y: 0.713950, z: 5.460003} + - time: 1.766667 + value: {x: -0.543927, y: 0.734617, z: 5.499290} + - time: 1.800000 + value: {x: -0.577291, y: 0.755057, z: 5.529918} + - time: 1.833333 + value: {x: -0.609870, y: 0.775045, z: 5.560182} + - time: 1.866667 + value: {x: -0.643738, y: 0.793886, z: 5.583494} + - time: 1.900000 + value: {x: -0.677272, y: 0.812103, z: 5.604899} + - time: 1.933333 + value: {x: -0.710359, y: 0.829032, z: 5.623224} + - time: 1.966667 + value: {x: -0.743216, y: 0.844238, z: 5.636968} + - time: 2.000000 + value: {x: -0.775126, y: 0.859037, z: 5.650661} + - time: 2.033333 + value: {x: -0.806174, y: 0.871322, z: 5.660202} + - time: 2.066667 + value: {x: -0.836281, y: 0.882547, z: 5.668406} + - time: 2.100000 + value: {x: -0.865403, y: 0.893439, z: 5.676664} + - time: 2.133333 + value: {x: -0.893239, y: 0.901977, z: 5.682206} + - time: 2.166667 + value: {x: -0.920001, y: 0.909690, z: 5.687102} + - time: 2.200000 + value: {x: -0.945761, y: 0.917150, z: 5.692124} + - time: 2.233333 + value: {x: -0.970321, y: 0.923670, z: 5.696511} + - time: 2.266667 + value: {x: -0.993541, y: 0.928774, z: 5.699732} + - time: 2.300000 + value: {x: -1.015755, y: 0.933694, z: 5.703101} + - time: 2.333333 + value: {x: -1.036959, y: 0.938425, z: 5.706594} + - time: 2.366667 + value: {x: -1.057066, y: 0.942728, z: 5.709965} + - time: 2.400000 + value: {x: -1.075880, y: 0.946029, z: 5.712658} + - time: 2.433333 + value: {x: -1.093683, y: 0.949188, z: 5.715460} + - time: 2.466667 + value: {x: -1.110470, y: 0.952198, z: 5.718340} + - time: 2.500000 + value: {x: -1.126236, y: 0.955058, z: 5.721277} + - time: 2.533333 + value: {x: -1.140980, y: 0.957761, z: 5.724243} + - time: 2.566667 + value: {x: -1.154607, y: 0.960066, z: 5.727005} + - time: 2.600000 + value: {x: -1.167165, y: 0.962100, z: 5.729647} + - time: 2.633333 + value: {x: -1.178705, y: 0.963995, z: 5.732262} + - time: 2.666667 + value: {x: -1.189226, y: 0.965747, z: 5.734816} + - time: 2.700000 + value: {x: -1.198729, y: 0.967352, z: 5.737286} + - time: 2.733333 + value: {x: -1.207214, y: 0.968806, z: 5.739635} + - time: 2.766667 + value: {x: -1.214683, y: 0.970104, z: 5.741835} + - time: 2.800000 + value: {x: -1.221141, y: 0.971243, z: 5.743853} + - time: 2.833333 + value: {x: -1.226588, y: 0.972218, z: 5.745655} + - time: 2.866667 + value: {x: -1.231031, y: 0.973024, z: 5.747211} + - time: 2.900000 + value: {x: -1.234475, y: 0.973659, z: 5.748484} + - time: 2.933333 + value: {x: -1.236925, y: 0.974118, z: 5.749437} + - time: 2.966667 + value: {x: -1.238390, y: 0.974396, z: 5.750036} + - time: 3.000000 + value: {x: -1.238877, y: 0.974490, z: 5.750244} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.321508, y: 0.321508, z: 0.321508} + - time: 0.033333 + value: {x: 0.321860, y: 0.321860, z: 0.321860} + - time: 0.066667 + value: {x: 0.339978, y: 0.339978, z: 0.339978} + - time: 0.100000 + value: {x: 0.365481, y: 0.365481, z: 0.365481} + - time: 0.133333 + value: {x: 0.396942, y: 0.396942, z: 0.396942} + - time: 0.166667 + value: {x: 0.433073, y: 0.433073, z: 0.433073} + - time: 0.200000 + value: {x: 0.471632, y: 0.471632, z: 0.471632} + - time: 0.233333 + value: {x: 0.513893, y: 0.513893, z: 0.513893} + - time: 0.266667 + value: {x: 0.561234, y: 0.561234, z: 0.561234} + - time: 0.300000 + value: {x: 0.614187, y: 0.614187, z: 0.614187} + - time: 0.333333 + value: {x: 0.672853, y: 0.672853, z: 0.672853} + - time: 0.366667 + value: {x: 0.736939, y: 0.736939, z: 0.736939} + - time: 0.400000 + value: {x: 0.805535, y: 0.805535, z: 0.805535} + - time: 0.433333 + value: {x: 0.877594, y: 0.877594, z: 0.877594} + - time: 0.466667 + value: {x: 0.952481, y: 0.952481, z: 0.952481} + - time: 0.500000 + value: {x: 1.030198, y: 1.030198, z: 1.030198} + - time: 0.533333 + value: {x: 1.110841, y: 1.110841, z: 1.110841} + - time: 0.566667 + value: {x: 1.194499, y: 1.194499, z: 1.194499} + - time: 0.600000 + value: {x: 1.281216, y: 1.281216, z: 1.281216} + - time: 0.633333 + value: {x: 1.370858, y: 1.370858, z: 1.370858} + - time: 0.666667 + value: {x: 1.463130, y: 1.463130, z: 1.463130} + - time: 0.700000 + value: {x: 1.557729, y: 1.557729, z: 1.557729} + - time: 0.733333 + value: {x: 1.654089, y: 1.654089, z: 1.654089} + - time: 0.766667 + value: {x: 1.751097, y: 1.751097, z: 1.751097} + - time: 0.800000 + value: {x: 1.847465, y: 1.847465, z: 1.847465} + - time: 0.833333 + value: {x: 1.942068, y: 1.942068, z: 1.942068} + - time: 0.866667 + value: {x: 2.034152, y: 2.034152, z: 2.034152} + - time: 0.900000 + value: {x: 2.123397, y: 2.123397, z: 2.123397} + - time: 0.933333 + value: {x: 2.210056, y: 2.210056, z: 2.210056} + - time: 0.966667 + value: {x: 2.294949, y: 2.294949, z: 2.294949} + - time: 1.000000 + value: {x: 2.379590, y: 2.379590, z: 2.379590} + - time: 1.033333 + value: {x: 2.464609, y: 2.464609, z: 2.464609} + - time: 1.066667 + value: {x: 2.549014, y: 2.549014, z: 2.549014} + - time: 1.100000 + value: {x: 2.631220, y: 2.631220, z: 2.631220} + - time: 1.133333 + value: {x: 2.710076, y: 2.710076, z: 2.710076} + - time: 1.166667 + value: {x: 2.785015, y: 2.785015, z: 2.785015} + - time: 1.200000 + value: {x: 2.856262, y: 2.856262, z: 2.856262} + - time: 1.233333 + value: {x: 2.924586, y: 2.924586, z: 2.924586} + - time: 1.266667 + value: {x: 2.990640, y: 2.990640, z: 2.990640} + - time: 1.300000 + value: {x: 3.055128, y: 3.055128, z: 3.055128} + - time: 1.333333 + value: {x: 3.118642, y: 3.118642, z: 3.118642} + - time: 1.366667 + value: {x: 3.181175, y: 3.181175, z: 3.181175} + - time: 1.400000 + value: {x: 3.241646, y: 3.241646, z: 3.241646} + - time: 1.433333 + value: {x: 3.298416, y: 3.298416, z: 3.298416} + - time: 1.466667 + value: {x: 3.350796, y: 3.350796, z: 3.350796} + - time: 1.500000 + value: {x: 3.398040, y: 3.398040, z: 3.398040} + - time: 1.533333 + value: {x: 3.439949, y: 3.439949, z: 3.439949} + - time: 1.566667 + value: {x: 3.476272, y: 3.476272, z: 3.476272} + - time: 1.600000 + value: {x: 3.506963, y: 3.506963, z: 3.506963} + - time: 1.633333 + value: {x: 3.533540, y: 3.533540, z: 3.533540} + - time: 1.666667 + value: {x: 3.556815, y: 3.556815, z: 3.556815} + - time: 1.700000 + value: {x: 3.578316, y: 3.578316, z: 3.578316} + - time: 1.733333 + value: {x: 3.598619, y: 3.598619, z: 3.598619} + - time: 1.766667 + value: {x: 3.618068, y: 3.618068, z: 3.618068} + - time: 1.800000 + value: {x: 3.636560, y: 3.636560, z: 3.636560} + - time: 1.833333 + value: {x: 3.653661, y: 3.653661, z: 3.653661} + - time: 1.866667 + value: {x: 3.669349, y: 3.669349, z: 3.669349} + - time: 1.900000 + value: {x: 3.683585, y: 3.683585, z: 3.683585} + - time: 1.933333 + value: {x: 3.696829, y: 3.696829, z: 3.696829} + - time: 1.966667 + value: {x: 3.709605, y: 3.709605, z: 3.709605} + - time: 2.000000 + value: {x: 3.722109, y: 3.722109, z: 3.722109} + - time: 2.066667 + value: {x: 3.747634, y: 3.747634, z: 3.747634} + - time: 2.100000 + value: {x: 3.759601, y: 3.759601, z: 3.759601} + - time: 2.133333 + value: {x: 3.770657, y: 3.770657, z: 3.770657} + - time: 2.166667 + value: {x: 3.780087, y: 3.780087, z: 3.780087} + - time: 2.200000 + value: {x: 3.787594, y: 3.787594, z: 3.787594} + - time: 2.233333 + value: {x: 3.793520, y: 3.793520, z: 3.793520} + - time: 2.266667 + value: {x: 3.798494, y: 3.798494, z: 3.798494} + - time: 2.333333 + value: {x: 3.807937, y: 3.807937, z: 3.807937} + - time: 2.366667 + value: {x: 3.813199, y: 3.813199, z: 3.813199} + - time: 2.400000 + value: {x: 3.818751, y: 3.818751, z: 3.818751} + - time: 2.433333 + value: {x: 3.824910, y: 3.824910, z: 3.824910} + - time: 2.466667 + value: {x: 3.832593, y: 3.832593, z: 3.832593} + - time: 2.500000 + value: {x: 3.842355, y: 3.842355, z: 3.842355} + - time: 2.533333 + value: {x: 3.852510, y: 3.852510, z: 3.852510} + - time: 2.566667 + value: {x: 3.860880, y: 3.860880, z: 3.860880} + - time: 2.600000 + value: {x: 3.866858, y: 3.866858, z: 3.866858} + - time: 2.633333 + value: {x: 3.869956, y: 3.869956, z: 3.869956} + - time: 2.666667 + value: {x: 3.870052, y: 3.870052, z: 3.870052} + - time: 2.700000 + value: {x: 3.867069, y: 3.867069, z: 3.867069} + - time: 2.733333 + value: {x: 3.861433, y: 3.861433, z: 3.861433} + - time: 2.766667 + value: {x: 3.854634, y: 3.854634, z: 3.854634} + - time: 2.800000 + value: {x: 3.849095, y: 3.849095, z: 3.849095} + - time: 2.833333 + value: {x: 3.847179, y: 3.847179, z: 3.847179} + - time: 2.866667 + value: {x: 3.850437, y: 3.850437, z: 3.850437} + - time: 2.900000 + value: {x: 3.859258, y: 3.859258, z: 3.859258} + - time: 2.933333 + value: {x: 3.872908, y: 3.872908, z: 3.872908} + - time: 2.966667 + value: {x: 3.889719, y: 3.889719, z: 3.889719} + - time: 3.000000 + value: {x: 3.907544, y: 3.907544, z: 3.907544} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_14: + position: + - time: 0.000000 + value: {x: -0.144832, y: 2.511905, z: 0.085741} + - time: 0.033333 + value: {x: -0.144832, y: 2.511905, z: 0.085741} + - time: 0.066667 + value: {x: 0.002737, y: 1.915579, z: 0.039580} + - time: 0.100000 + value: {x: 0.102428, y: 1.296275, z: 0.054861} + - time: 0.133333 + value: {x: 0.243086, y: 0.768014, z: 0.135206} + - time: 0.166667 + value: {x: 0.504825, y: 0.439974, z: 0.289152} + - time: 0.200000 + value: {x: 0.804853, y: 0.309932, z: 0.468733} + - time: 0.233333 + value: {x: 1.011740, y: 0.265766, z: 0.618084} + - time: 0.266667 + value: {x: 1.129708, y: 0.252168, z: 0.712540} + - time: 0.300000 + value: {x: 1.223888, y: 0.245856, z: 0.798528} + - time: 0.333333 + value: {x: 1.309831, y: 0.243893, z: 0.889258} + - time: 0.366667 + value: {x: 1.387604, y: 0.245021, z: 0.984298} + - time: 0.400000 + value: {x: 1.460747, y: 0.248143, z: 1.081519} + - time: 0.433333 + value: {x: 1.532756, y: 0.252903, z: 1.178975} + - time: 0.466667 + value: {x: 1.605419, y: 0.258992, z: 1.275624} + - time: 0.500000 + value: {x: 1.680605, y: 0.265887, z: 1.370456} + - time: 0.533333 + value: {x: 1.758050, y: 0.273091, z: 1.463588} + - time: 0.566667 + value: {x: 1.835051, y: 0.280259, z: 1.556296} + - time: 0.600000 + value: {x: 1.909237, y: 0.287259, z: 1.649717} + - time: 0.633333 + value: {x: 1.979329, y: 0.294042, z: 1.744450} + - time: 0.666667 + value: {x: 2.045295, y: 0.300609, z: 1.840474} + - time: 0.700000 + value: {x: 2.107114, y: 0.306992, z: 1.937760} + - time: 0.733333 + value: {x: 2.164389, y: 0.313243, z: 2.036463} + - time: 0.766667 + value: {x: 2.216872, y: 0.319432, z: 2.136667} + - time: 0.800000 + value: {x: 2.264993, y: 0.325636, z: 2.238108} + - time: 0.833333 + value: {x: 2.309974, y: 0.331942, z: 2.340118} + - time: 0.866667 + value: {x: 2.353305, y: 0.338437, z: 2.441892} + - time: 0.900000 + value: {x: 2.396157, y: 0.345206, z: 2.542784} + - time: 0.933333 + value: {x: 2.439105, y: 0.352324, z: 2.642437} + - time: 0.966667 + value: {x: 2.482266, y: 0.359858, z: 2.740721} + - time: 1.000000 + value: {x: 2.525527, y: 0.367957, z: 2.837526} + - time: 1.033333 + value: {x: 2.568566, y: 0.376643, z: 2.932955} + - time: 1.066667 + value: {x: 2.611464, y: 0.385936, z: 3.026891} + - time: 1.100000 + value: {x: 2.654319, y: 0.395860, z: 3.119195} + - time: 1.133333 + value: {x: 2.697209, y: 0.406424, z: 3.209748} + - time: 1.166667 + value: {x: 2.740220, y: 0.417702, z: 3.298328} + - time: 1.200000 + value: {x: 2.783065, y: 0.429905, z: 3.384647} + - time: 1.233333 + value: {x: 2.825206, y: 0.442784, z: 3.469180} + - time: 1.266667 + value: {x: 2.866431, y: 0.456295, z: 3.552001} + - time: 1.300000 + value: {x: 2.906236, y: 0.470620, z: 3.632917} + - time: 1.333333 + value: {x: 2.944035, y: 0.485859, z: 3.711767} + - time: 1.366667 + value: {x: 2.980030, y: 0.501639, z: 3.789021} + - time: 1.400000 + value: {x: 3.013656, y: 0.518109, z: 3.864523} + - time: 1.433333 + value: {x: 3.043367, y: 0.535538, z: 3.938042} + - time: 1.466667 + value: {x: 3.070719, y: 0.553320, z: 4.010154} + - time: 1.500000 + value: {x: 3.093546, y: 0.571938, z: 4.080385} + - time: 1.533333 + value: {x: 3.112155, y: 0.591119, z: 4.148907} + - time: 1.566667 + value: {x: 3.127816, y: 0.610591, z: 4.215949} + - time: 1.600000 + value: {x: 3.137322, y: 0.630913, z: 4.280334} + - time: 1.633333 + value: {x: 3.145681, y: 0.651115, z: 4.343443} + - time: 1.666667 + value: {x: 3.146747, y: 0.672148, z: 4.402903} + - time: 1.700000 + value: {x: 3.147434, y: 0.692854, z: 4.461170} + - time: 1.733333 + value: {x: 3.141254, y: 0.713950, z: 4.515254} + - time: 1.766667 + value: {x: 3.135355, y: 0.734617, z: 4.568382} + - time: 1.800000 + value: {x: 3.122308, y: 0.755057, z: 4.616344} + - time: 1.833333 + value: {x: 3.109809, y: 0.775045, z: 4.663449} + - time: 1.866667 + value: {x: 3.092458, y: 0.793886, z: 4.705693} + - time: 1.900000 + value: {x: 3.074415, y: 0.812103, z: 4.746120} + - time: 1.933333 + value: {x: 3.055066, y: 0.829032, z: 4.783725} + - time: 1.966667 + value: {x: 3.033367, y: 0.844237, z: 4.817450} + - time: 2.000000 + value: {x: 3.012520, y: 0.859037, z: 4.850463} + - time: 2.033333 + value: {x: 2.990018, y: 0.871322, z: 4.879565} + - time: 2.066667 + value: {x: 2.967597, y: 0.882546, z: 4.906936} + - time: 2.100000 + value: {x: 2.946124, y: 0.893439, z: 4.933662} + - time: 2.133333 + value: {x: 2.924100, y: 0.901977, z: 4.957386} + - time: 2.166667 + value: {x: 2.902657, y: 0.909690, z: 4.979860} + - time: 2.200000 + value: {x: 2.882219, y: 0.917150, z: 5.001726} + - time: 2.233333 + value: {x: 2.862415, y: 0.923670, z: 5.022295} + - time: 2.266667 + value: {x: 2.842985, y: 0.928774, z: 5.041085} + - time: 2.300000 + value: {x: 2.824586, y: 0.933694, z: 5.059280} + - time: 2.333333 + value: {x: 2.807207, y: 0.938425, z: 5.076858} + - time: 2.366667 + value: {x: 2.790746, y: 0.942728, z: 5.093581} + - time: 2.400000 + value: {x: 2.774969, y: 0.946029, z: 5.108913} + - time: 2.433333 + value: {x: 2.760207, y: 0.949188, z: 5.123614} + - time: 2.466667 + value: {x: 2.746446, y: 0.952198, z: 5.137657} + - time: 2.500000 + value: {x: 2.733674, y: 0.955057, z: 5.151024} + - time: 2.533333 + value: {x: 2.721877, y: 0.957761, z: 5.163690} + - time: 2.566667 + value: {x: 2.710964, y: 0.960066, z: 5.175423} + - time: 2.600000 + value: {x: 2.700959, y: 0.962100, z: 5.186316} + - time: 2.633333 + value: {x: 2.691890, y: 0.963995, z: 5.196466} + - time: 2.666667 + value: {x: 2.683735, y: 0.965747, z: 5.205853} + - time: 2.700000 + value: {x: 2.676476, y: 0.967352, z: 5.214453} + - time: 2.733333 + value: {x: 2.670092, y: 0.968806, z: 5.222243} + - time: 2.766667 + value: {x: 2.664557, y: 0.970104, z: 5.229198} + - time: 2.800000 + value: {x: 2.659850, y: 0.971243, z: 5.235303} + - time: 2.833333 + value: {x: 2.655945, y: 0.972217, z: 5.240527} + - time: 2.866667 + value: {x: 2.652818, y: 0.973024, z: 5.244855} + - time: 2.900000 + value: {x: 2.650436, y: 0.973660, z: 5.248257} + - time: 2.933333 + value: {x: 2.648774, y: 0.974118, z: 5.250715} + - time: 2.966667 + value: {x: 2.647800, y: 0.974396, z: 5.252209} + - time: 3.000000 + value: {x: 2.647482, y: 0.974490, z: 5.252711} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.213468, y: 0.213468, z: 0.213468} + - time: 0.033333 + value: {x: 0.213744, y: 0.213744, z: 0.213744} + - time: 0.066667 + value: {x: 0.232809, y: 0.232809, z: 0.232809} + - time: 0.100000 + value: {x: 0.260381, y: 0.260381, z: 0.260381} + - time: 0.133333 + value: {x: 0.294310, y: 0.294310, z: 0.294310} + - time: 0.166667 + value: {x: 0.333681, y: 0.333681, z: 0.333681} + - time: 0.200000 + value: {x: 0.376143, y: 0.376143, z: 0.376143} + - time: 0.233333 + value: {x: 0.422715, y: 0.422715, z: 0.422715} + - time: 0.266667 + value: {x: 0.474480, y: 0.474480, z: 0.474480} + - time: 0.300000 + value: {x: 0.531856, y: 0.531856, z: 0.531856} + - time: 0.333333 + value: {x: 0.594778, y: 0.594778, z: 0.594778} + - time: 0.366667 + value: {x: 0.662727, y: 0.662727, z: 0.662727} + - time: 0.400000 + value: {x: 0.734707, y: 0.734707, z: 0.734707} + - time: 0.433333 + value: {x: 0.809931, y: 0.809931, z: 0.809931} + - time: 0.466667 + value: {x: 0.888240, y: 0.888240, z: 0.888240} + - time: 0.500000 + value: {x: 0.969870, y: 0.969870, z: 0.969870} + - time: 0.533333 + value: {x: 1.055153, y: 1.055153, z: 1.055153} + - time: 0.566667 + value: {x: 1.144306, y: 1.144306, z: 1.144306} + - time: 0.600000 + value: {x: 1.236966, y: 1.236966, z: 1.236966} + - time: 0.633333 + value: {x: 1.332115, y: 1.332115, z: 1.332115} + - time: 0.666667 + value: {x: 1.428548, y: 1.428548, z: 1.428548} + - time: 0.700000 + value: {x: 1.525495, y: 1.525495, z: 1.525495} + - time: 0.733333 + value: {x: 1.622833, y: 1.622833, z: 1.622833} + - time: 0.766667 + value: {x: 1.720699, y: 1.720699, z: 1.720699} + - time: 0.800000 + value: {x: 1.819150, y: 1.819150, z: 1.819150} + - time: 0.833333 + value: {x: 1.917859, y: 1.917859, z: 1.917859} + - time: 0.866667 + value: {x: 2.016147, y: 2.016147, z: 2.016147} + - time: 0.900000 + value: {x: 2.113548, y: 2.113548, z: 2.113548} + - time: 0.933333 + value: {x: 2.209848, y: 2.209848, z: 2.209848} + - time: 0.966667 + value: {x: 2.304730, y: 2.304730, z: 2.304730} + - time: 1.000000 + value: {x: 2.397573, y: 2.397573, z: 2.397573} + - time: 1.033333 + value: {x: 2.487756, y: 2.487756, z: 2.487756} + - time: 1.066667 + value: {x: 2.574660, y: 2.574660, z: 2.574660} + - time: 1.100000 + value: {x: 2.657928, y: 2.657928, z: 2.657928} + - time: 1.133333 + value: {x: 2.737480, y: 2.737480, z: 2.737480} + - time: 1.166667 + value: {x: 2.813453, y: 2.813453, z: 2.813453} + - time: 1.200000 + value: {x: 2.886424, y: 2.886424, z: 2.886424} + - time: 1.233333 + value: {x: 2.956372, y: 2.956372, z: 2.956372} + - time: 1.266667 + value: {x: 3.022938, y: 3.022938, z: 3.022938} + - time: 1.300000 + value: {x: 3.085530, y: 3.085530, z: 3.085530} + - time: 1.333333 + value: {x: 3.143322, y: 3.143322, z: 3.143322} + - time: 1.366667 + value: {x: 3.195405, y: 3.195405, z: 3.195405} + - time: 1.400000 + value: {x: 3.240837, y: 3.240837, z: 3.240837} + - time: 1.433333 + value: {x: 3.279102, y: 3.279102, z: 3.279102} + - time: 1.466667 + value: {x: 3.310436, y: 3.310436, z: 3.310436} + - time: 1.500000 + value: {x: 3.336165, y: 3.336165, z: 3.336165} + - time: 1.533333 + value: {x: 3.357739, y: 3.357739, z: 3.357739} + - time: 1.566667 + value: {x: 3.376767, y: 3.376767, z: 3.376767} + - time: 1.600000 + value: {x: 3.394312, y: 3.394312, z: 3.394312} + - time: 1.633333 + value: {x: 3.410785, y: 3.410785, z: 3.410785} + - time: 1.666667 + value: {x: 3.425554, y: 3.425554, z: 3.425554} + - time: 1.700000 + value: {x: 3.437658, y: 3.437658, z: 3.437658} + - time: 1.733333 + value: {x: 3.445907, y: 3.445907, z: 3.445907} + - time: 1.766667 + value: {x: 3.449676, y: 3.449676, z: 3.449676} + - time: 1.800000 + value: {x: 3.449464, y: 3.449464, z: 3.449464} + - time: 1.833333 + value: {x: 3.446070, y: 3.446070, z: 3.446070} + - time: 1.866667 + value: {x: 3.441102, y: 3.441102, z: 3.441102} + - time: 1.900000 + value: {x: 3.435136, y: 3.435136, z: 3.435136} + - time: 1.933333 + value: {x: 3.428577, y: 3.428577, z: 3.428577} + - time: 1.966667 + value: {x: 3.421613, y: 3.421613, z: 3.421613} + - time: 2.033333 + value: {x: 3.406301, y: 3.406301, z: 3.406301} + - time: 2.066667 + value: {x: 3.398141, y: 3.398141, z: 3.398141} + - time: 2.100000 + value: {x: 3.388843, y: 3.388843, z: 3.388843} + - time: 2.133333 + value: {x: 3.377696, y: 3.377696, z: 3.377696} + - time: 2.166667 + value: {x: 3.363967, y: 3.363967, z: 3.363967} + - time: 2.200000 + value: {x: 3.347333, y: 3.347333, z: 3.347333} + - time: 2.233333 + value: {x: 3.327835, y: 3.327835, z: 3.327835} + - time: 2.266667 + value: {x: 3.305989, y: 3.305989, z: 3.305989} + - time: 2.300000 + value: {x: 3.282605, y: 3.282605, z: 3.282605} + - time: 2.366667 + value: {x: 3.234493, y: 3.234493, z: 3.234493} + - time: 2.400000 + value: {x: 3.211782, y: 3.211782, z: 3.211782} + - time: 2.433333 + value: {x: 3.191050, y: 3.191050, z: 3.191050} + - time: 2.466667 + value: {x: 3.172920, y: 3.172920, z: 3.172920} + - time: 2.500000 + value: {x: 3.157897, y: 3.157897, z: 3.157897} + - time: 2.533333 + value: {x: 3.144794, y: 3.144794, z: 3.144794} + - time: 2.566667 + value: {x: 3.132743, y: 3.132743, z: 3.132743} + - time: 2.600000 + value: {x: 3.122045, y: 3.122045, z: 3.122045} + - time: 2.633333 + value: {x: 3.112489, y: 3.112489, z: 3.112489} + - time: 2.666667 + value: {x: 3.103707, y: 3.103707, z: 3.103707} + - time: 2.700000 + value: {x: 3.095372, y: 3.095372, z: 3.095372} + - time: 2.733333 + value: {x: 3.087308, y: 3.087308, z: 3.087308} + - time: 2.766667 + value: {x: 3.079620, y: 3.079620, z: 3.079620} + - time: 2.800000 + value: {x: 3.072662, y: 3.072662, z: 3.072662} + - time: 2.833333 + value: {x: 3.066884, y: 3.066884, z: 3.066884} + - time: 2.866667 + value: {x: 3.062824, y: 3.062824, z: 3.062824} + - time: 2.900000 + value: {x: 3.060922, y: 3.060922, z: 3.060922} + - time: 2.933333 + value: {x: 3.061531, y: 3.061531, z: 3.061531} + - time: 2.966667 + value: {x: 3.064945, y: 3.064945, z: 3.064945} + - time: 3.000000 + value: {x: 3.071558, y: 3.071558, z: 3.071558} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_15: + position: + - time: 0.000000 + value: {x: -0.059178, y: 2.511905, z: 0.158350} + - time: 0.033333 + value: {x: -0.059178, y: 2.511905, z: 0.158350} + - time: 0.066667 + value: {x: 0.022757, y: 1.915579, z: 0.038409} + - time: 0.100000 + value: {x: 0.099176, y: 1.296275, z: 0.011428} + - time: 0.133333 + value: {x: 0.229107, y: 0.768014, z: 0.051744} + - time: 0.166667 + value: {x: 0.465467, y: 0.439974, z: 0.148297} + - time: 0.200000 + value: {x: 0.744492, y: 0.309932, z: 0.247874} + - time: 0.233333 + value: {x: 0.960424, y: 0.265766, z: 0.319857} + - time: 0.266667 + value: {x: 1.091651, y: 0.252168, z: 0.363147} + - time: 0.300000 + value: {x: 1.205866, y: 0.245856, z: 0.399751} + - time: 0.333333 + value: {x: 1.320721, y: 0.243893, z: 0.436242} + - time: 0.366667 + value: {x: 1.435438, y: 0.245021, z: 0.473470} + - time: 0.400000 + value: {x: 1.550106, y: 0.248143, z: 0.510488} + - time: 0.433333 + value: {x: 1.664112, y: 0.252903, z: 0.548240} + - time: 0.466667 + value: {x: 1.777070, y: 0.258992, z: 0.587270} + - time: 0.500000 + value: {x: 1.888875, y: 0.265887, z: 0.627654} + - time: 0.533333 + value: {x: 1.999909, y: 0.273090, z: 0.668523} + - time: 0.566667 + value: {x: 2.110315, y: 0.280259, z: 0.709374} + - time: 0.600000 + value: {x: 2.220404, y: 0.287259, z: 0.749405} + - time: 0.633333 + value: {x: 2.330447, y: 0.294042, z: 0.787921} + - time: 0.666667 + value: {x: 2.440398, y: 0.300609, z: 0.824945} + - time: 0.700000 + value: {x: 2.549849, y: 0.306992, z: 0.861287} + - time: 0.733333 + value: {x: 2.658281, y: 0.313243, z: 0.898003} + - time: 0.766667 + value: {x: 2.765495, y: 0.319432, z: 0.935436} + - time: 0.800000 + value: {x: 2.871659, y: 0.325636, z: 0.973110} + - time: 0.833333 + value: {x: 2.976909, y: 0.331942, z: 1.010620} + - time: 0.866667 + value: {x: 3.081226, y: 0.338437, z: 1.047878} + - time: 0.900000 + value: {x: 3.184515, y: 0.345206, z: 1.084976} + - time: 0.933333 + value: {x: 3.286565, y: 0.352324, z: 1.122227} + - time: 0.966667 + value: {x: 3.387162, y: 0.359858, z: 1.159956} + - time: 1.000000 + value: {x: 3.486243, y: 0.367957, z: 1.197937} + - time: 1.033333 + value: {x: 3.583794, y: 0.376643, z: 1.236072} + - time: 1.066667 + value: {x: 3.679832, y: 0.385936, z: 1.274160} + - time: 1.100000 + value: {x: 3.774262, y: 0.395860, z: 1.312219} + - time: 1.133333 + value: {x: 3.866941, y: 0.406424, z: 1.350384} + - time: 1.166667 + value: {x: 3.957561, y: 0.417702, z: 1.388958} + - time: 1.200000 + value: {x: 4.045566, y: 0.429906, z: 1.428226} + - time: 1.233333 + value: {x: 4.131400, y: 0.442785, z: 1.467648} + - time: 1.266667 + value: {x: 4.215100, y: 0.456295, z: 1.507079} + - time: 1.300000 + value: {x: 4.296259, y: 0.470620, z: 1.546451} + - time: 1.333333 + value: {x: 4.374458, y: 0.485859, z: 1.585692} + - time: 1.366667 + value: {x: 4.450294, y: 0.501639, z: 1.624731} + - time: 1.400000 + value: {x: 4.523306, y: 0.518109, z: 1.663627} + - time: 1.433333 + value: {x: 4.592579, y: 0.535538, z: 1.702226} + - time: 1.466667 + value: {x: 4.659560, y: 0.553320, z: 1.740261} + - time: 1.500000 + value: {x: 4.722853, y: 0.571938, z: 1.777441} + - time: 1.533333 + value: {x: 4.782877, y: 0.591119, z: 1.813546} + - time: 1.566667 + value: {x: 4.840405, y: 0.610591, z: 1.848740} + - time: 1.600000 + value: {x: 4.892992, y: 0.630913, z: 1.882389} + - time: 1.633333 + value: {x: 4.944087, y: 0.651115, z: 1.915320} + - time: 1.666667 + value: {x: 4.988881, y: 0.672148, z: 1.946319} + - time: 1.700000 + value: {x: 5.032602, y: 0.692854, z: 1.976690} + - time: 1.733333 + value: {x: 5.069717, y: 0.713950, z: 2.005108} + - time: 1.766667 + value: {x: 5.106271, y: 0.734617, z: 2.033002} + - time: 1.800000 + value: {x: 5.135217, y: 0.755057, z: 2.058725} + - time: 1.833333 + value: {x: 5.163814, y: 0.775045, z: 2.083958} + - time: 1.866667 + value: {x: 5.186144, y: 0.793886, z: 2.107211} + - time: 1.900000 + value: {x: 5.206739, y: 0.812103, z: 2.129611} + - time: 1.933333 + value: {x: 5.224501, y: 0.829032, z: 2.150738} + - time: 1.966667 + value: {x: 5.238062, y: 0.844238, z: 2.170168} + - time: 2.000000 + value: {x: 5.251551, y: 0.859037, z: 2.189150} + - time: 2.033333 + value: {x: 5.261225, y: 0.871322, z: 2.206285} + - time: 2.066667 + value: {x: 5.269648, y: 0.882547, z: 2.222522} + - time: 2.100000 + value: {x: 5.278099, y: 0.893439, z: 2.238336} + - time: 2.133333 + value: {x: 5.284031, y: 0.901977, z: 2.252609} + - time: 2.166667 + value: {x: 5.289345, y: 0.909690, z: 2.266172} + - time: 2.200000 + value: {x: 5.294744, y: 0.917150, z: 2.279327} + - time: 2.233333 + value: {x: 5.299530, y: 0.923670, z: 2.291719} + - time: 2.266667 + value: {x: 5.303213, y: 0.928774, z: 2.303098} + - time: 2.300000 + value: {x: 5.307005, y: 0.933694, z: 2.314078} + - time: 2.333333 + value: {x: 5.310877, y: 0.938425, z: 2.324649} + - time: 2.366667 + value: {x: 5.314608, y: 0.942728, z: 2.334686} + - time: 2.400000 + value: {x: 5.317682, y: 0.946029, z: 2.343904} + - time: 2.433333 + value: {x: 5.320826, y: 0.949188, z: 2.352710} + - time: 2.466667 + value: {x: 5.324011, y: 0.952199, z: 2.361092} + - time: 2.500000 + value: {x: 5.327215, y: 0.955057, z: 2.369039} + - time: 2.533333 + value: {x: 5.330416, y: 0.957761, z: 2.376542} + - time: 2.566667 + value: {x: 5.333395, y: 0.960066, z: 2.383482} + - time: 2.600000 + value: {x: 5.336229, y: 0.962100, z: 2.389908} + - time: 2.633333 + value: {x: 5.339008, y: 0.963995, z: 2.395874} + - time: 2.666667 + value: {x: 5.341700, y: 0.965747, z: 2.401368} + - time: 2.700000 + value: {x: 5.344276, y: 0.967352, z: 2.406384} + - time: 2.733333 + value: {x: 5.346716, y: 0.968806, z: 2.410911} + - time: 2.766667 + value: {x: 5.348984, y: 0.970104, z: 2.414939} + - time: 2.800000 + value: {x: 5.351049, y: 0.971243, z: 2.418458} + - time: 2.833333 + value: {x: 5.352888, y: 0.972217, z: 2.421460} + - time: 2.866667 + value: {x: 5.354465, y: 0.973024, z: 2.423937} + - time: 2.900000 + value: {x: 5.355749, y: 0.973660, z: 2.425878} + - time: 2.933333 + value: {x: 5.356707, y: 0.974118, z: 2.427275} + - time: 2.966667 + value: {x: 5.357307, y: 0.974396, z: 2.428120} + - time: 3.000000 + value: {x: 5.357515, y: 0.974490, z: 2.428403} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.384053, y: 0.384053, z: 0.384053} + - time: 0.033333 + value: {x: 0.384141, y: 0.384141, z: 0.384141} + - time: 0.066667 + value: {x: 0.407066, y: 0.407066, z: 0.407066} + - time: 0.100000 + value: {x: 0.436932, y: 0.436932, z: 0.436932} + - time: 0.133333 + value: {x: 0.471211, y: 0.471211, z: 0.471211} + - time: 0.166667 + value: {x: 0.508925, y: 0.508925, z: 0.508925} + - time: 0.200000 + value: {x: 0.548340, y: 0.548340, z: 0.548340} + - time: 0.233333 + value: {x: 0.590803, y: 0.590803, z: 0.590803} + - time: 0.266667 + value: {x: 0.636717, y: 0.636717, z: 0.636717} + - time: 0.300000 + value: {x: 0.686359, y: 0.686359, z: 0.686359} + - time: 0.333333 + value: {x: 0.739765, y: 0.739765, z: 0.739765} + - time: 0.366667 + value: {x: 0.797244, y: 0.797244, z: 0.797244} + - time: 0.400000 + value: {x: 0.858999, y: 0.858999, z: 0.858999} + - time: 0.433333 + value: {x: 0.924897, y: 0.924897, z: 0.924897} + - time: 0.466667 + value: {x: 0.994261, y: 0.994261, z: 0.994261} + - time: 0.500000 + value: {x: 1.065881, y: 1.065881, z: 1.065881} + - time: 0.533333 + value: {x: 1.138538, y: 1.138538, z: 1.138538} + - time: 0.566667 + value: {x: 1.211693, y: 1.211693, z: 1.211693} + - time: 0.600000 + value: {x: 1.285595, y: 1.285595, z: 1.285595} + - time: 0.633333 + value: {x: 1.360843, y: 1.360843, z: 1.360843} + - time: 0.666667 + value: {x: 1.438156, y: 1.438156, z: 1.438156} + - time: 0.700000 + value: {x: 1.518066, y: 1.518066, z: 1.518066} + - time: 0.733333 + value: {x: 1.600443, y: 1.600443, z: 1.600443} + - time: 0.766667 + value: {x: 1.684679, y: 1.684679, z: 1.684679} + - time: 0.800000 + value: {x: 1.769973, y: 1.769973, z: 1.769973} + - time: 0.833333 + value: {x: 1.855532, y: 1.855532, z: 1.855532} + - time: 0.866667 + value: {x: 1.940816, y: 1.940816, z: 1.940816} + - time: 0.966667 + value: {x: 2.195566, y: 2.195566, z: 2.195566} + - time: 1.000000 + value: {x: 2.279700, y: 2.279700, z: 2.279700} + - time: 1.033333 + value: {x: 2.362431, y: 2.362431, z: 2.362431} + - time: 1.066667 + value: {x: 2.443130, y: 2.443130, z: 2.443130} + - time: 1.100000 + value: {x: 2.521328, y: 2.521328, z: 2.521328} + - time: 1.133333 + value: {x: 2.596725, y: 2.596725, z: 2.596725} + - time: 1.166667 + value: {x: 2.669327, y: 2.669327, z: 2.669327} + - time: 1.200000 + value: {x: 2.740054, y: 2.740054, z: 2.740054} + - time: 1.233333 + value: {x: 2.809802, y: 2.809802, z: 2.809802} + - time: 1.266667 + value: {x: 2.878653, y: 2.878653, z: 2.878653} + - time: 1.300000 + value: {x: 2.946944, y: 2.946944, z: 2.946944} + - time: 1.333333 + value: {x: 3.014828, y: 3.014828, z: 3.014828} + - time: 1.366667 + value: {x: 3.081710, y: 3.081710, z: 3.081710} + - time: 1.400000 + value: {x: 3.146770, y: 3.146770, z: 3.146770} + - time: 1.433333 + value: {x: 3.209305, y: 3.209305, z: 3.209305} + - time: 1.466667 + value: {x: 3.269214, y: 3.269214, z: 3.269214} + - time: 1.500000 + value: {x: 3.326775, y: 3.326775, z: 3.326775} + - time: 1.533333 + value: {x: 3.382383, y: 3.382383, z: 3.382383} + - time: 1.600000 + value: {x: 3.490969, y: 3.490969, z: 3.490969} + - time: 1.633333 + value: {x: 3.546491, y: 3.546491, z: 3.546491} + - time: 1.666667 + value: {x: 3.604614, y: 3.604614, z: 3.604614} + - time: 1.700000 + value: {x: 3.664960, y: 3.664960, z: 3.664960} + - time: 1.733333 + value: {x: 3.727570, y: 3.727570, z: 3.727570} + - time: 1.766667 + value: {x: 3.791109, y: 3.791109, z: 3.791109} + - time: 1.800000 + value: {x: 3.854344, y: 3.854344, z: 3.854344} + - time: 1.833333 + value: {x: 3.915170, y: 3.915170, z: 3.915170} + - time: 1.866667 + value: {x: 3.972307, y: 3.972307, z: 3.972307} + - time: 1.900000 + value: {x: 4.025400, y: 4.025400, z: 4.025400} + - time: 1.933333 + value: {x: 4.074887, y: 4.074887, z: 4.074887} + - time: 1.966667 + value: {x: 4.120700, y: 4.120700, z: 4.120700} + - time: 2.000000 + value: {x: 4.162717, y: 4.162717, z: 4.162717} + - time: 2.033333 + value: {x: 4.201163, y: 4.201163, z: 4.201163} + - time: 2.066667 + value: {x: 4.236942, y: 4.236942, z: 4.236942} + - time: 2.100000 + value: {x: 4.271001, y: 4.271001, z: 4.271001} + - time: 2.166667 + value: {x: 4.337477, y: 4.337477, z: 4.337477} + - time: 2.200000 + value: {x: 4.371696, y: 4.371696, z: 4.371696} + - time: 2.233333 + value: {x: 4.407157, y: 4.407157, z: 4.407157} + - time: 2.266667 + value: {x: 4.443686, y: 4.443686, z: 4.443686} + - time: 2.333333 + value: {x: 4.517730, y: 4.517730, z: 4.517730} + - time: 2.366667 + value: {x: 4.553724, y: 4.553724, z: 4.553724} + - time: 2.400000 + value: {x: 4.587977, y: 4.587977, z: 4.587977} + - time: 2.433333 + value: {x: 4.619910, y: 4.619910, z: 4.619910} + - time: 2.466667 + value: {x: 4.649391, y: 4.649391, z: 4.649391} + - time: 2.500000 + value: {x: 4.676855, y: 4.676855, z: 4.676855} + - time: 2.533333 + value: {x: 4.702000, y: 4.702000, z: 4.702000} + - time: 2.566667 + value: {x: 4.724452, y: 4.724452, z: 4.724452} + - time: 2.600000 + value: {x: 4.744372, y: 4.744372, z: 4.744372} + - time: 2.633333 + value: {x: 4.761848, y: 4.761848, z: 4.761848} + - time: 2.666667 + value: {x: 4.777315, y: 4.777315, z: 4.777315} + - time: 2.733333 + value: {x: 4.806000, y: 4.806000, z: 4.806000} + - time: 2.766667 + value: {x: 4.821221, y: 4.821221, z: 4.821221} + - time: 2.800000 + value: {x: 4.837579, y: 4.837579, z: 4.837579} + - time: 2.833333 + value: {x: 4.854527, y: 4.854527, z: 4.854527} + - time: 2.866667 + value: {x: 4.871123, y: 4.871123, z: 4.871123} + - time: 2.900000 + value: {x: 4.886727, y: 4.886727, z: 4.886727} + - time: 2.933333 + value: {x: 4.901305, y: 4.901305, z: 4.901305} + - time: 2.966667 + value: {x: 4.915105, y: 4.915105, z: 4.915105} + - time: 3.000000 + value: {x: 4.928235, y: 4.928235, z: 4.928235} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_16: + position: + - time: 0.000000 + value: {x: 0.053122, y: 2.511905, z: 0.159386} + - time: 0.033333 + value: {x: 0.053122, y: 2.511905, z: 0.159386} + - time: 0.066667 + value: {x: 0.043940, y: 1.915579, z: 0.023762} + - time: 0.100000 + value: {x: 0.092696, y: 1.296275, z: -0.021148} + - time: 0.133333 + value: {x: 0.236822, y: 0.768014, z: -0.002958} + - time: 0.166667 + value: {x: 0.516376, y: 0.439974, z: 0.059000} + - time: 0.200000 + value: {x: 0.829574, y: 0.309933, z: 0.090876} + - time: 0.233333 + value: {x: 1.062595, y: 0.265766, z: 0.087746} + - time: 0.266667 + value: {x: 1.201591, y: 0.252168, z: 0.076479} + - time: 0.300000 + value: {x: 1.320961, y: 0.245856, z: 0.062231} + - time: 0.333333 + value: {x: 1.439829, y: 0.243893, z: 0.043904} + - time: 0.366667 + value: {x: 1.558124, y: 0.245021, z: 0.022644} + - time: 0.400000 + value: {x: 1.675809, y: 0.248143, z: -0.000449} + - time: 0.433333 + value: {x: 1.792724, y: 0.252903, z: -0.025324} + - time: 0.466667 + value: {x: 1.908864, y: 0.258992, z: -0.051491} + - time: 0.500000 + value: {x: 2.024407, y: 0.265887, z: -0.078008} + - time: 0.533333 + value: {x: 2.139345, y: 0.273091, z: -0.104858} + - time: 0.566667 + value: {x: 2.253580, y: 0.280259, z: -0.132115} + - time: 0.600000 + value: {x: 2.367110, y: 0.287259, z: -0.159591} + - time: 0.633333 + value: {x: 2.479890, y: 0.294042, z: -0.187299} + - time: 0.666667 + value: {x: 2.591888, y: 0.300609, z: -0.215232} + - time: 0.700000 + value: {x: 2.703084, y: 0.306992, z: -0.243328} + - time: 0.733333 + value: {x: 2.813454, y: 0.313243, z: -0.271524} + - time: 0.766667 + value: {x: 2.922998, y: 0.319432, z: -0.299666} + - time: 0.800000 + value: {x: 3.031719, y: 0.325636, z: -0.327575} + - time: 0.833333 + value: {x: 3.139613, y: 0.331942, z: -0.355082} + - time: 0.866667 + value: {x: 3.246634, y: 0.338437, z: -0.382161} + - time: 0.900000 + value: {x: 3.352705, y: 0.345206, z: -0.408900} + - time: 0.933333 + value: {x: 3.457722, y: 0.352324, z: -0.435473} + - time: 0.966667 + value: {x: 3.561547, y: 0.359858, z: -0.462148} + - time: 1.000000 + value: {x: 3.663949, y: 0.367957, z: -0.489233} + - time: 1.033333 + value: {x: 3.764879, y: 0.376643, z: -0.516698} + - time: 1.066667 + value: {x: 3.864317, y: 0.385936, z: -0.544350} + - time: 1.100000 + value: {x: 3.962240, y: 0.395860, z: -0.571966} + - time: 1.133333 + value: {x: 4.058615, y: 0.406424, z: -0.599379} + - time: 1.166667 + value: {x: 4.153305, y: 0.417702, z: -0.626484} + - time: 1.200000 + value: {x: 4.245905, y: 0.429906, z: -0.653304} + - time: 1.233333 + value: {x: 4.336581, y: 0.442785, z: -0.679927} + - time: 1.266667 + value: {x: 4.425303, y: 0.456295, z: -0.706360} + - time: 1.300000 + value: {x: 4.511647, y: 0.470620, z: -0.732636} + - time: 1.333333 + value: {x: 4.595218, y: 0.485859, z: -0.758661} + - time: 1.366667 + value: {x: 4.676553, y: 0.501639, z: -0.784402} + - time: 1.400000 + value: {x: 4.755247, y: 0.518109, z: -0.809857} + - time: 1.433333 + value: {x: 4.830361, y: 0.535538, z: -0.835055} + - time: 1.466667 + value: {x: 4.903152, y: 0.553320, z: -0.859972} + - time: 1.500000 + value: {x: 4.972165, y: 0.571938, z: -0.884676} + - time: 1.533333 + value: {x: 5.037726, y: 0.591119, z: -0.909049} + - time: 1.566667 + value: {x: 5.100645, y: 0.610591, z: -0.933072} + - time: 1.600000 + value: {x: 5.158350, y: 0.630913, z: -0.956733} + - time: 1.633333 + value: {x: 5.214445, y: 0.651114, z: -0.980009} + - time: 1.666667 + value: {x: 5.263844, y: 0.672148, z: -1.003065} + - time: 1.700000 + value: {x: 5.312069, y: 0.692855, z: -1.025720} + - time: 1.733333 + value: {x: 5.353323, y: 0.713950, z: -1.048091} + - time: 1.766667 + value: {x: 5.393936, y: 0.734617, z: -1.070029} + - time: 1.800000 + value: {x: 5.426567, y: 0.755057, z: -1.091568} + - time: 1.833333 + value: {x: 5.458780, y: 0.775045, z: -1.112652} + - time: 1.866667 + value: {x: 5.484392, y: 0.793886, z: -1.133210} + - time: 1.900000 + value: {x: 5.508133, y: 0.812103, z: -1.153280} + - time: 1.933333 + value: {x: 5.528818, y: 0.829032, z: -1.172752} + - time: 1.966667 + value: {x: 5.545002, y: 0.844238, z: -1.191557} + - time: 2.000000 + value: {x: 5.561056, y: 0.859037, z: -1.209869} + - time: 2.033333 + value: {x: 5.572956, y: 0.871322, z: -1.227309} + - time: 2.066667 + value: {x: 5.583458, y: 0.882547, z: -1.244124} + - time: 2.100000 + value: {x: 5.593937, y: 0.893438, z: -1.260437} + - time: 2.133333 + value: {x: 5.601622, y: 0.901977, z: -1.275845} + - time: 2.166667 + value: {x: 5.608582, y: 0.909690, z: -1.290638} + - time: 2.200000 + value: {x: 5.615580, y: 0.917150, z: -1.304922} + - time: 2.233333 + value: {x: 5.621845, y: 0.923670, z: -1.318544} + - time: 2.266667 + value: {x: 5.626841, y: 0.928774, z: -1.331401} + - time: 2.300000 + value: {x: 5.631901, y: 0.933694, z: -1.343743} + - time: 2.333333 + value: {x: 5.636997, y: 0.938425, z: -1.355561} + - time: 2.366667 + value: {x: 5.641884, y: 0.942728, z: -1.366797} + - time: 2.400000 + value: {x: 5.645990, y: 0.946029, z: -1.377316} + - time: 2.433333 + value: {x: 5.650120, y: 0.949187, z: -1.387305} + - time: 2.466667 + value: {x: 5.654247, y: 0.952199, z: -1.396758} + - time: 2.500000 + value: {x: 5.658352, y: 0.955058, z: -1.405668} + - time: 2.533333 + value: {x: 5.662401, y: 0.957761, z: -1.414031} + - time: 2.566667 + value: {x: 5.666157, y: 0.960066, z: -1.421782} + - time: 2.600000 + value: {x: 5.669712, y: 0.962100, z: -1.428950} + - time: 2.633333 + value: {x: 5.673161, y: 0.963995, z: -1.435563} + - time: 2.666667 + value: {x: 5.676472, y: 0.965747, z: -1.441615} + - time: 2.700000 + value: {x: 5.679619, y: 0.967352, z: -1.447104} + - time: 2.733333 + value: {x: 5.682571, y: 0.968806, z: -1.452025} + - time: 2.766667 + value: {x: 5.685295, y: 0.970104, z: -1.456376} + - time: 2.800000 + value: {x: 5.687767, y: 0.971243, z: -1.460154} + - time: 2.833333 + value: {x: 5.689949, y: 0.972218, z: -1.463355} + - time: 2.866667 + value: {x: 5.691809, y: 0.973024, z: -1.465976} + - time: 2.900000 + value: {x: 5.693317, y: 0.973659, z: -1.468018} + - time: 2.933333 + value: {x: 5.694437, y: 0.974118, z: -1.469477} + - time: 2.966667 + value: {x: 5.695135, y: 0.974396, z: -1.470354} + - time: 3.000000 + value: {x: 5.695377, y: 0.974490, z: -1.470646} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.494671, y: 0.494671, z: 0.494671} + - time: 0.033333 + value: {x: 0.494557, y: 0.494557, z: 0.494557} + - time: 0.066667 + value: {x: 0.518386, y: 0.518386, z: 0.518386} + - time: 0.100000 + value: {x: 0.550604, y: 0.550604, z: 0.550604} + - time: 0.133333 + value: {x: 0.588329, y: 0.588329, z: 0.588329} + - time: 0.166667 + value: {x: 0.630085, y: 0.630085, z: 0.630085} + - time: 0.200000 + value: {x: 0.674477, y: 0.674477, z: 0.674477} + - time: 0.233333 + value: {x: 0.722519, y: 0.722519, z: 0.722519} + - time: 0.266667 + value: {x: 0.774625, y: 0.774625, z: 0.774625} + - time: 0.300000 + value: {x: 0.830893, y: 0.830893, z: 0.830893} + - time: 0.333333 + value: {x: 0.891054, y: 0.891054, z: 0.891054} + - time: 0.366667 + value: {x: 0.955196, y: 0.955196, z: 0.955196} + - time: 0.400000 + value: {x: 1.023670, y: 1.023670, z: 1.023670} + - time: 0.433333 + value: {x: 1.096815, y: 1.096815, z: 1.096815} + - time: 0.466667 + value: {x: 1.174553, y: 1.174553, z: 1.174553} + - time: 0.500000 + value: {x: 1.256145, y: 1.256145, z: 1.256145} + - time: 0.533333 + value: {x: 1.340641, y: 1.340641, z: 1.340641} + - time: 0.566667 + value: {x: 1.427376, y: 1.427376, z: 1.427376} + - time: 0.600000 + value: {x: 1.515887, y: 1.515887, z: 1.515887} + - time: 0.633333 + value: {x: 1.605658, y: 1.605658, z: 1.605658} + - time: 0.666667 + value: {x: 1.696207, y: 1.696207, z: 1.696207} + - time: 0.766667 + value: {x: 1.968992, y: 1.968992, z: 1.968992} + - time: 0.800000 + value: {x: 2.060624, y: 2.060624, z: 2.060624} + - time: 0.833333 + value: {x: 2.153703, y: 2.153703, z: 2.153703} + - time: 0.866667 + value: {x: 2.248769, y: 2.248769, z: 2.248769} + - time: 0.900000 + value: {x: 2.345901, y: 2.345901, z: 2.345901} + - time: 0.933333 + value: {x: 2.444684, y: 2.444684, z: 2.444684} + - time: 0.966667 + value: {x: 2.544419, y: 2.544419, z: 2.544419} + - time: 1.066667 + value: {x: 2.844513, y: 2.844513, z: 2.844513} + - time: 1.100000 + value: {x: 2.943662, y: 2.943662, z: 2.943662} + - time: 1.133333 + value: {x: 3.041090, y: 3.041090, z: 3.041090} + - time: 1.166667 + value: {x: 3.135906, y: 3.135906, z: 3.135906} + - time: 1.200000 + value: {x: 3.227788, y: 3.227788, z: 3.227788} + - time: 1.233333 + value: {x: 3.316819, y: 3.316819, z: 3.316819} + - time: 1.266667 + value: {x: 3.402743, y: 3.402743, z: 3.402743} + - time: 1.300000 + value: {x: 3.485674, y: 3.485674, z: 3.485674} + - time: 1.333333 + value: {x: 3.566327, y: 3.566327, z: 3.566327} + - time: 1.366667 + value: {x: 3.645516, y: 3.645516, z: 3.645516} + - time: 1.400000 + value: {x: 3.723668, y: 3.723668, z: 3.723668} + - time: 1.433333 + value: {x: 3.800852, y: 3.800852, z: 3.800852} + - time: 1.466667 + value: {x: 3.876907, y: 3.876907, z: 3.876907} + - time: 1.500000 + value: {x: 3.951479, y: 3.951479, z: 3.951479} + - time: 1.533333 + value: {x: 4.024113, y: 4.024113, z: 4.024113} + - time: 1.566667 + value: {x: 4.094436, y: 4.094436, z: 4.094436} + - time: 1.600000 + value: {x: 4.162593, y: 4.162593, z: 4.162593} + - time: 1.633333 + value: {x: 4.229204, y: 4.229204, z: 4.229204} + - time: 1.666667 + value: {x: 4.294782, y: 4.294782, z: 4.294782} + - time: 1.700000 + value: {x: 4.359576, y: 4.359576, z: 4.359576} + - time: 1.733333 + value: {x: 4.423642, y: 4.423642, z: 4.423642} + - time: 1.766667 + value: {x: 4.486776, y: 4.486776, z: 4.486776} + - time: 1.800000 + value: {x: 4.548870, y: 4.548870, z: 4.548870} + - time: 1.833333 + value: {x: 4.609184, y: 4.609184, z: 4.609184} + - time: 1.866667 + value: {x: 4.667839, y: 4.667839, z: 4.667839} + - time: 1.900000 + value: {x: 4.725140, y: 4.725140, z: 4.725140} + - time: 1.966667 + value: {x: 4.838589, y: 4.838589, z: 4.838589} + - time: 2.000000 + value: {x: 4.895589, y: 4.895589, z: 4.895589} + - time: 2.066667 + value: {x: 5.010744, y: 5.010744, z: 5.010744} + - time: 2.133333 + value: {x: 5.125535, y: 5.125535, z: 5.125535} + - time: 2.200000 + value: {x: 5.239439, y: 5.239439, z: 5.239439} + - time: 2.233333 + value: {x: 5.295706, y: 5.295706, z: 5.295706} + - time: 2.266667 + value: {x: 5.350821, y: 5.350821, z: 5.350821} + - time: 2.300000 + value: {x: 5.404101, y: 5.404101, z: 5.404101} + - time: 2.333333 + value: {x: 5.454957, y: 5.454957, z: 5.454957} + - time: 2.366667 + value: {x: 5.502946, y: 5.502946, z: 5.502946} + - time: 2.400000 + value: {x: 5.547674, y: 5.547674, z: 5.547674} + - time: 2.433333 + value: {x: 5.588803, y: 5.588803, z: 5.588803} + - time: 2.466667 + value: {x: 5.625931, y: 5.625931, z: 5.625931} + - time: 2.500000 + value: {x: 5.659157, y: 5.659157, z: 5.659157} + - time: 2.533333 + value: {x: 5.687938, y: 5.687938, z: 5.687938} + - time: 2.566667 + value: {x: 5.712142, y: 5.712142, z: 5.712142} + - time: 2.600000 + value: {x: 5.732907, y: 5.732907, z: 5.732907} + - time: 2.633333 + value: {x: 5.751096, y: 5.751096, z: 5.751096} + - time: 2.666667 + value: {x: 5.767375, y: 5.767375, z: 5.767375} + - time: 2.700000 + value: {x: 5.782048, y: 5.782048, z: 5.782048} + - time: 2.733333 + value: {x: 5.794898, y: 5.794898, z: 5.794898} + - time: 2.766667 + value: {x: 5.805373, y: 5.805373, z: 5.805373} + - time: 2.800000 + value: {x: 5.813214, y: 5.813214, z: 5.813214} + - time: 2.833333 + value: {x: 5.818628, y: 5.818628, z: 5.818628} + - time: 2.866667 + value: {x: 5.822237, y: 5.822237, z: 5.822237} + - time: 2.900000 + value: {x: 5.825040, y: 5.825040, z: 5.825040} + - time: 2.933333 + value: {x: 5.828378, y: 5.828378, z: 5.828378} + - time: 2.966667 + value: {x: 5.833660, y: 5.833660, z: 5.833660} + - time: 3.000000 + value: {x: 5.841788, y: 5.841788, z: 5.841788} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_17: + position: + - time: 0.000000 + value: {x: 0.139333, y: 2.511905, z: 0.089125} + - time: 0.033333 + value: {x: 0.139333, y: 2.511905, z: 0.089125} + - time: 0.066667 + value: {x: 0.049709, y: 1.915579, z: -0.008659} + - time: 0.100000 + value: {x: 0.066016, y: 1.296275, z: -0.069348} + - time: 0.133333 + value: {x: 0.201649, y: 0.768014, z: -0.136750} + - time: 0.166667 + value: {x: 0.464828, y: 0.439974, z: -0.259098} + - time: 0.200000 + value: {x: 0.729891, y: 0.309932, z: -0.430001} + - time: 0.233333 + value: {x: 0.906661, y: 0.265766, z: -0.580708} + - time: 0.266667 + value: {x: 1.005236, y: 0.252168, z: -0.678636} + - time: 0.300000 + value: {x: 1.087544, y: 0.245856, z: -0.765906} + - time: 0.333333 + value: {x: 1.167092, y: 0.243893, z: -0.855893} + - time: 0.366667 + value: {x: 1.243166, y: 0.245021, z: -0.948683} + - time: 0.400000 + value: {x: 1.315552, y: 0.248143, z: -1.044049} + - time: 0.433333 + value: {x: 1.384632, y: 0.252903, z: -1.141496} + - time: 0.466667 + value: {x: 1.451281, y: 0.258992, z: -1.240216} + - time: 0.500000 + value: {x: 1.516540, y: 0.265887, z: -1.339358} + - time: 0.533333 + value: {x: 1.581219, y: 0.273090, z: -1.438306} + - time: 0.566667 + value: {x: 1.645989, y: 0.280259, z: -1.536463} + - time: 0.600000 + value: {x: 1.711284, y: 0.287259, z: -1.633450} + - time: 0.633333 + value: {x: 1.777407, y: 0.294042, z: -1.728989} + - time: 0.666667 + value: {x: 1.844194, y: 0.300609, z: -1.823163} + - time: 0.700000 + value: {x: 1.911261, y: 0.306992, z: -1.916211} + - time: 0.733333 + value: {x: 1.978222, y: 0.313243, z: -2.008374} + - time: 0.766667 + value: {x: 2.044545, y: 0.319432, z: -2.099998} + - time: 0.800000 + value: {x: 2.109848, y: 0.325636, z: -2.191313} + - time: 0.833333 + value: {x: 2.173870, y: 0.331942, z: -2.282458} + - time: 0.866667 + value: {x: 2.236371, y: 0.338437, z: -2.373546} + - time: 0.900000 + value: {x: 2.297263, y: 0.345206, z: -2.464578} + - time: 0.933333 + value: {x: 2.356519, y: 0.352324, z: -2.555500} + - time: 0.966667 + value: {x: 2.414187, y: 0.359858, z: -2.646198} + - time: 1.000000 + value: {x: 2.470155, y: 0.367957, z: -2.736569} + - time: 1.033333 + value: {x: 2.524620, y: 0.376643, z: -2.826400} + - time: 1.066667 + value: {x: 2.577698, y: 0.385936, z: -2.915520} + - time: 1.100000 + value: {x: 2.629457, y: 0.395860, z: -3.003783} + - time: 1.133333 + value: {x: 2.679948, y: 0.406424, z: -3.091055} + - time: 1.166667 + value: {x: 2.729125, y: 0.417702, z: -3.177178} + - time: 1.200000 + value: {x: 2.776808, y: 0.429906, z: -3.261798} + - time: 1.233333 + value: {x: 2.823303, y: 0.442785, z: -3.344921} + - time: 1.266667 + value: {x: 2.868690, y: 0.456295, z: -3.426451} + - time: 1.300000 + value: {x: 2.912852, y: 0.470620, z: -3.505975} + - time: 1.333333 + value: {x: 2.955619, y: 0.485859, z: -3.583112} + - time: 1.366667 + value: {x: 2.997240, y: 0.501639, z: -3.658314} + - time: 1.400000 + value: {x: 3.037470, y: 0.518109, z: -3.731275} + - time: 1.433333 + value: {x: 3.075915, y: 0.535538, z: -3.801165} + - time: 1.466667 + value: {x: 3.113323, y: 0.553320, z: -3.868935} + - time: 1.500000 + value: {x: 3.149150, y: 0.571938, z: -3.933257} + - time: 1.533333 + value: {x: 3.183499, y: 0.591119, z: -3.994412} + - time: 1.566667 + value: {x: 3.216704, y: 0.610591, z: -4.053121} + - time: 1.600000 + value: {x: 3.247490, y: 0.630913, z: -4.107224} + - time: 1.633333 + value: {x: 3.277516, y: 0.651115, z: -4.159833} + - time: 1.666667 + value: {x: 3.304103, y: 0.672148, z: -4.206851} + - time: 1.700000 + value: {x: 3.330079, y: 0.692855, z: -4.252782} + - time: 1.733333 + value: {x: 3.352155, y: 0.713950, z: -4.293113} + - time: 1.766667 + value: {x: 3.373919, y: 0.734617, z: -4.332768} + - time: 1.800000 + value: {x: 3.391026, y: 0.755057, z: -4.366134} + - time: 1.833333 + value: {x: 3.407953, y: 0.775045, z: -4.398986} + - time: 1.866667 + value: {x: 3.420934, y: 0.793886, z: -4.426644} + - time: 1.900000 + value: {x: 3.432849, y: 0.812103, z: -4.452682} + - time: 1.933333 + value: {x: 3.442979, y: 0.829032, z: -4.476178} + - time: 1.966667 + value: {x: 3.450441, y: 0.844237, z: -4.496018} + - time: 2.000000 + value: {x: 3.457901, y: 0.859037, z: -4.515548} + - time: 2.033333 + value: {x: 3.462918, y: 0.871322, z: -4.531612} + - time: 2.066667 + value: {x: 3.467165, y: 0.882546, z: -4.546370} + - time: 2.100000 + value: {x: 3.471475, y: 0.893439, z: -4.560890} + - time: 2.133333 + value: {x: 3.474172, y: 0.901977, z: -4.572963} + - time: 2.166667 + value: {x: 3.476506, y: 0.909690, z: -4.584234} + - time: 2.200000 + value: {x: 3.478944, y: 0.917150, z: -4.595320} + - time: 2.233333 + value: {x: 3.481029, y: 0.923670, z: -4.605577} + - time: 2.266667 + value: {x: 3.482445, y: 0.928774, z: -4.614559} + - time: 2.333333 + value: {x: 3.485608, y: 0.938425, z: -4.631991} + - time: 2.366667 + value: {x: 3.487197, y: 0.942728, z: -4.640210} + - time: 2.400000 + value: {x: 3.488415, y: 0.946029, z: -4.647536} + - time: 2.466667 + value: {x: 3.491105, y: 0.952198, z: -4.661562} + - time: 2.500000 + value: {x: 3.492544, y: 0.955057, z: -4.668218} + - time: 2.533333 + value: {x: 3.494025, y: 0.957761, z: -4.674609} + - time: 2.566667 + value: {x: 3.495408, y: 0.960066, z: -4.680533} + - time: 2.600000 + value: {x: 3.496743, y: 0.962100, z: -4.686064} + - time: 2.633333 + value: {x: 3.498084, y: 0.963995, z: -4.691287} + - time: 2.666667 + value: {x: 3.499413, y: 0.965747, z: -4.696181} + - time: 2.700000 + value: {x: 3.500712, y: 0.967352, z: -4.700723} + - time: 2.733333 + value: {x: 3.501962, y: 0.968806, z: -4.704889} + - time: 2.766667 + value: {x: 3.503142, y: 0.970104, z: -4.708656} + - time: 2.800000 + value: {x: 3.504235, y: 0.971243, z: -4.712003} + - time: 2.833333 + value: {x: 3.505219, y: 0.972218, z: -4.714902} + - time: 2.866667 + value: {x: 3.506073, y: 0.973024, z: -4.717331} + - time: 2.900000 + value: {x: 3.506775, y: 0.973660, z: -4.719264} + - time: 2.933333 + value: {x: 3.507305, y: 0.974118, z: -4.720675} + - time: 2.966667 + value: {x: 3.507640, y: 0.974396, z: -4.721542} + - time: 3.000000 + value: {x: 3.507757, y: 0.974490, z: -4.721837} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.234476, y: 0.234476, z: 0.234476} + - time: 0.033333 + value: {x: 0.234274, y: 0.234274, z: 0.234274} + - time: 0.066667 + value: {x: 0.255630, y: 0.255630, z: 0.255630} + - time: 0.100000 + value: {x: 0.287160, y: 0.287160, z: 0.287160} + - time: 0.133333 + value: {x: 0.325735, y: 0.325735, z: 0.325735} + - time: 0.166667 + value: {x: 0.367278, y: 0.367278, z: 0.367278} + - time: 0.200000 + value: {x: 0.410203, y: 0.410203, z: 0.410203} + - time: 0.233333 + value: {x: 0.458090, y: 0.458090, z: 0.458090} + - time: 0.266667 + value: {x: 0.511333, y: 0.511333, z: 0.511333} + - time: 0.300000 + value: {x: 0.569506, y: 0.569506, z: 0.569506} + - time: 0.333333 + value: {x: 0.632252, y: 0.632252, z: 0.632252} + - time: 0.366667 + value: {x: 0.699232, y: 0.699232, z: 0.699232} + - time: 0.400000 + value: {x: 0.770175, y: 0.770175, z: 0.770175} + - time: 0.433333 + value: {x: 0.844883, y: 0.844883, z: 0.844883} + - time: 0.466667 + value: {x: 0.923179, y: 0.923179, z: 0.923179} + - time: 0.500000 + value: {x: 1.004664, y: 1.004664, z: 1.004664} + - time: 0.533333 + value: {x: 1.088546, y: 1.088546, z: 1.088546} + - time: 0.566667 + value: {x: 1.174194, y: 1.174194, z: 1.174194} + - time: 0.600000 + value: {x: 1.261430, y: 1.261430, z: 1.261430} + - time: 0.633333 + value: {x: 1.350302, y: 1.350302, z: 1.350302} + - time: 0.666667 + value: {x: 1.440732, y: 1.440732, z: 1.440732} + - time: 0.700000 + value: {x: 1.532643, y: 1.532643, z: 1.532643} + - time: 0.733333 + value: {x: 1.626100, y: 1.626100, z: 1.626100} + - time: 0.766667 + value: {x: 1.720928, y: 1.720928, z: 1.720928} + - time: 0.833333 + value: {x: 1.911990, y: 1.911990, z: 1.911990} + - time: 0.866667 + value: {x: 2.006313, y: 2.006313, z: 2.006313} + - time: 0.900000 + value: {x: 2.098572, y: 2.098572, z: 2.098572} + - time: 0.933333 + value: {x: 2.188267, y: 2.188267, z: 2.188267} + - time: 0.966667 + value: {x: 2.275400, y: 2.275400, z: 2.275400} + - time: 1.000000 + value: {x: 2.360190, y: 2.360190, z: 2.360190} + - time: 1.033333 + value: {x: 2.442834, y: 2.442834, z: 2.442834} + - time: 1.066667 + value: {x: 2.523150, y: 2.523150, z: 2.523150} + - time: 1.100000 + value: {x: 2.601166, y: 2.601166, z: 2.601166} + - time: 1.133333 + value: {x: 2.676830, y: 2.676830, z: 2.676830} + - time: 1.166667 + value: {x: 2.749780, y: 2.749780, z: 2.749780} + - time: 1.200000 + value: {x: 2.819788, y: 2.819788, z: 2.819788} + - time: 1.233333 + value: {x: 2.886689, y: 2.886689, z: 2.886689} + - time: 1.266667 + value: {x: 2.949949, y: 2.949949, z: 2.949949} + - time: 1.300000 + value: {x: 3.009187, y: 3.009187, z: 3.009187} + - time: 1.333333 + value: {x: 3.064331, y: 3.064331, z: 3.064331} + - time: 1.366667 + value: {x: 3.115752, y: 3.115752, z: 3.115752} + - time: 1.400000 + value: {x: 3.164897, y: 3.164897, z: 3.164897} + - time: 1.433333 + value: {x: 3.213002, y: 3.213002, z: 3.213002} + - time: 1.466667 + value: {x: 3.259843, y: 3.259843, z: 3.259843} + - time: 1.500000 + value: {x: 3.304266, y: 3.304266, z: 3.304266} + - time: 1.533333 + value: {x: 3.344495, y: 3.344495, z: 3.344495} + - time: 1.566667 + value: {x: 3.379051, y: 3.379051, z: 3.379051} + - time: 1.600000 + value: {x: 3.406949, y: 3.406949, z: 3.406949} + - time: 1.633333 + value: {x: 3.429218, y: 3.429218, z: 3.429218} + - time: 1.666667 + value: {x: 3.446741, y: 3.446741, z: 3.446741} + - time: 1.700000 + value: {x: 3.460919, y: 3.460919, z: 3.460919} + - time: 1.733333 + value: {x: 3.472344, y: 3.472344, z: 3.472344} + - time: 1.766667 + value: {x: 3.481637, y: 3.481637, z: 3.481637} + - time: 1.800000 + value: {x: 3.489539, y: 3.489539, z: 3.489539} + - time: 1.833333 + value: {x: 3.496215, y: 3.496215, z: 3.496215} + - time: 1.866667 + value: {x: 3.502197, y: 3.502197, z: 3.502197} + - time: 1.900000 + value: {x: 3.507390, y: 3.507390, z: 3.507390} + - time: 1.933333 + value: {x: 3.511548, y: 3.511548, z: 3.511548} + - time: 1.966667 + value: {x: 3.514213, y: 3.514213, z: 3.514213} + - time: 2.000000 + value: {x: 3.514626, y: 3.514626, z: 3.514626} + - time: 2.033333 + value: {x: 3.512380, y: 3.512380, z: 3.512380} + - time: 2.066667 + value: {x: 3.507237, y: 3.507237, z: 3.507237} + - time: 2.100000 + value: {x: 3.499636, y: 3.499636, z: 3.499636} + - time: 2.133333 + value: {x: 3.490812, y: 3.490812, z: 3.490812} + - time: 2.166667 + value: {x: 3.482270, y: 3.482270, z: 3.482270} + - time: 2.200000 + value: {x: 3.475013, y: 3.475013, z: 3.475013} + - time: 2.233333 + value: {x: 3.469282, y: 3.469282, z: 3.469282} + - time: 2.266667 + value: {x: 3.464972, y: 3.464972, z: 3.464972} + - time: 2.300000 + value: {x: 3.462003, y: 3.462003, z: 3.462003} + - time: 2.333333 + value: {x: 3.460541, y: 3.460541, z: 3.460541} + - time: 2.366667 + value: {x: 3.460626, y: 3.460626, z: 3.460626} + - time: 2.400000 + value: {x: 3.461946, y: 3.461946, z: 3.461946} + - time: 2.433333 + value: {x: 3.463746, y: 3.463746, z: 3.463746} + - time: 2.466667 + value: {x: 3.465028, y: 3.465028, z: 3.465028} + - time: 2.500000 + value: {x: 3.464897, y: 3.464897, z: 3.464897} + - time: 2.533333 + value: {x: 3.460921, y: 3.460921, z: 3.460921} + - time: 2.566667 + value: {x: 3.450961, y: 3.450961, z: 3.450961} + - time: 2.600000 + value: {x: 3.434863, y: 3.434863, z: 3.434863} + - time: 2.633333 + value: {x: 3.413237, y: 3.413237, z: 3.413237} + - time: 2.666667 + value: {x: 3.387646, y: 3.387646, z: 3.387646} + - time: 2.700000 + value: {x: 3.360279, y: 3.360279, z: 3.360279} + - time: 2.733333 + value: {x: 3.333553, y: 3.333553, z: 3.333553} + - time: 2.766667 + value: {x: 3.309615, y: 3.309615, z: 3.309615} + - time: 2.800000 + value: {x: 3.289824, y: 3.289824, z: 3.289824} + - time: 2.833333 + value: {x: 3.274640, y: 3.274640, z: 3.274640} + - time: 2.866667 + value: {x: 3.264110, y: 3.264110, z: 3.264110} + - time: 2.900000 + value: {x: 3.257924, y: 3.257924, z: 3.257924} + - time: 2.933333 + value: {x: 3.255756, y: 3.255756, z: 3.255756} + - time: 2.966667 + value: {x: 3.257555, y: 3.257555, z: 3.257555} + - time: 3.000000 + value: {x: 3.263478, y: 3.263478, z: 3.263478} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_18: + position: + - time: 0.000000 + value: {x: 0.160925, y: 2.511905, z: -0.017996} + - time: 0.033333 + value: {x: 0.160925, y: 2.511905, z: -0.017996} + - time: 0.066667 + value: {x: 0.028786, y: 1.915579, z: -0.037776} + - time: 0.100000 + value: {x: 0.000607, y: 1.296275, z: -0.095137} + - time: 0.133333 + value: {x: 0.050919, y: 0.768014, z: -0.232244} + - time: 0.166667 + value: {x: 0.165184, y: 0.439974, z: -0.492174} + - time: 0.200000 + value: {x: 0.252962, y: 0.309933, z: -0.791179} + - time: 0.233333 + value: {x: 0.293495, y: 0.265766, z: -1.019375} + - time: 0.266667 + value: {x: 0.308325, y: 0.252168, z: -1.157472} + - time: 0.300000 + value: {x: 0.316166, y: 0.245856, z: -1.277020} + - time: 0.333333 + value: {x: 0.319627, y: 0.243893, z: -1.396927} + - time: 0.366667 + value: {x: 0.319624, y: 0.245021, z: -1.516875} + - time: 0.400000 + value: {x: 0.317066, y: 0.248143, z: -1.636588} + - time: 0.433333 + value: {x: 0.312577, y: 0.252903, z: -1.755924} + - time: 0.466667 + value: {x: 0.307314, y: 0.258992, z: -1.874801} + - time: 0.500000 + value: {x: 0.301855, y: 0.265887, z: -1.993180} + - time: 0.533333 + value: {x: 0.296157, y: 0.273091, z: -2.111046} + - time: 0.566667 + value: {x: 0.290026, y: 0.280259, z: -2.228315} + - time: 0.600000 + value: {x: 0.283500, y: 0.287259, z: -2.344939} + - time: 0.633333 + value: {x: 0.276495, y: 0.294042, z: -2.460877} + - time: 0.666667 + value: {x: 0.269005, y: 0.300609, z: -2.576093} + - time: 0.700000 + value: {x: 0.261096, y: 0.306992, z: -2.690556} + - time: 0.733333 + value: {x: 0.252720, y: 0.313243, z: -2.804225} + - time: 0.766667 + value: {x: 0.243871, y: 0.319432, z: -2.917061} + - time: 0.800000 + value: {x: 0.234687, y: 0.325636, z: -3.029028} + - time: 0.833333 + value: {x: 0.225333, y: 0.331942, z: -3.140086} + - time: 0.866667 + value: {x: 0.215891, y: 0.338437, z: -3.250187} + - time: 0.900000 + value: {x: 0.206346, y: 0.345206, z: -3.359280} + - time: 0.933333 + value: {x: 0.196697, y: 0.352324, z: -3.467304} + - time: 0.966667 + value: {x: 0.187062, y: 0.359858, z: -3.574200} + - time: 1.000000 + value: {x: 0.177910, y: 0.367957, z: -3.679839} + - time: 1.033333 + value: {x: 0.169504, y: 0.376643, z: -3.784177} + - time: 1.066667 + value: {x: 0.161659, y: 0.385936, z: -3.887139} + - time: 1.100000 + value: {x: 0.154183, y: 0.395860, z: -3.988638} + - time: 1.133333 + value: {x: 0.146941, y: 0.406424, z: -4.088597} + - time: 1.166667 + value: {x: 0.139867, y: 0.417702, z: -4.186853} + - time: 1.200000 + value: {x: 0.133008, y: 0.429905, z: -4.283020} + - time: 1.233333 + value: {x: 0.126125, y: 0.442785, z: -4.377274} + - time: 1.266667 + value: {x: 0.119178, y: 0.456295, z: -4.469583} + - time: 1.300000 + value: {x: 0.112075, y: 0.470620, z: -4.559544} + - time: 1.333333 + value: {x: 0.104736, y: 0.485859, z: -4.646745} + - time: 1.366667 + value: {x: 0.097272, y: 0.501639, z: -4.731704} + - time: 1.400000 + value: {x: 0.089628, y: 0.518109, z: -4.814023} + - time: 1.433333 + value: {x: 0.081650, y: 0.535538, z: -4.892797} + - time: 1.466667 + value: {x: 0.073518, y: 0.553320, z: -4.969244} + - time: 1.500000 + value: {x: 0.064915, y: 0.571938, z: -5.041957} + - time: 1.533333 + value: {x: 0.055944, y: 0.591119, z: -5.111230} + - time: 1.566667 + value: {x: 0.046772, y: 0.610591, z: -5.177845} + - time: 1.600000 + value: {x: 0.036956, y: 0.630913, z: -5.239291} + - time: 1.633333 + value: {x: 0.027174, y: 0.651115, z: -5.299083} + - time: 1.666667 + value: {x: 0.016666, y: 0.672148, z: -5.352303} + - time: 1.700000 + value: {x: 0.006315, y: 0.692854, z: -5.404291} + - time: 1.733333 + value: {x: -0.004611, y: 0.713950, z: -5.449430} + - time: 1.766667 + value: {x: -0.015297, y: 0.734617, z: -5.493849} + - time: 1.800000 + value: {x: -0.026438, y: 0.755057, z: -5.530416} + - time: 1.833333 + value: {x: -0.037305, y: 0.775045, z: -5.566477} + - time: 1.866667 + value: {x: -0.048274, y: 0.793886, z: -5.596004} + - time: 1.900000 + value: {x: -0.059047, y: 0.812103, z: -5.623603} + - time: 1.933333 + value: {x: -0.069607, y: 0.829032, z: -5.648101} + - time: 1.966667 + value: {x: -0.079991, y: 0.844238, z: -5.668077} + - time: 2.000000 + value: {x: -0.090066, y: 0.859037, z: -5.687815} + - time: 2.033333 + value: {x: -0.099805, y: 0.871322, z: -5.703325} + - time: 2.066667 + value: {x: -0.109221, y: 0.882547, z: -5.717339} + - time: 2.100000 + value: {x: -0.118320, y: 0.893438, z: -5.731211} + - time: 2.133333 + value: {x: -0.127006, y: 0.901977, z: -5.742170} + - time: 2.166667 + value: {x: -0.135348, y: 0.909690, z: -5.752285} + - time: 2.200000 + value: {x: -0.143369, y: 0.917150, z: -5.762325} + - time: 2.233333 + value: {x: -0.151023, y: 0.923670, z: -5.771502} + - time: 2.266667 + value: {x: -0.158280, y: 0.928774, z: -5.779272} + - time: 2.300000 + value: {x: -0.165215, y: 0.933694, z: -5.786989} + - time: 2.333333 + value: {x: -0.171827, y: 0.938425, z: -5.794624} + - time: 2.366667 + value: {x: -0.178098, y: 0.942728, z: -5.801922} + - time: 2.400000 + value: {x: -0.183989, y: 0.946029, z: -5.808300} + - time: 2.433333 + value: {x: -0.189556, y: 0.949187, z: -5.814581} + - time: 2.466667 + value: {x: -0.194799, y: 0.952198, z: -5.820738} + - time: 2.500000 + value: {x: -0.199718, y: 0.955058, z: -5.826748} + - time: 2.533333 + value: {x: -0.204310, y: 0.957761, z: -5.832584} + - time: 2.566667 + value: {x: -0.208562, y: 0.960066, z: -5.837996} + - time: 2.600000 + value: {x: -0.212482, y: 0.962100, z: -5.843079} + - time: 2.633333 + value: {x: -0.216078, y: 0.963995, z: -5.847933} + - time: 2.666667 + value: {x: -0.219352, y: 0.965747, z: -5.852526} + - time: 2.700000 + value: {x: -0.222305, y: 0.967352, z: -5.856831} + - time: 2.733333 + value: {x: -0.224938, y: 0.968806, z: -5.860819} + - time: 2.766667 + value: {x: -0.227251, y: 0.970104, z: -5.864458} + - time: 2.800000 + value: {x: -0.229249, y: 0.971243, z: -5.867716} + - time: 2.833333 + value: {x: -0.230931, y: 0.972218, z: -5.870565} + - time: 2.866667 + value: {x: -0.232300, y: 0.973025, z: -5.872972} + - time: 2.900000 + value: {x: -0.233360, y: 0.973660, z: -5.874903} + - time: 2.933333 + value: {x: -0.234112, y: 0.974118, z: -5.876322} + - time: 2.966667 + value: {x: -0.234562, y: 0.974396, z: -5.877201} + - time: 3.000000 + value: {x: -0.234710, y: 0.974490, z: -5.877502} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.362842, y: 0.362842, z: 0.362842} + - time: 0.033333 + value: {x: 0.362728, y: 0.362728, z: 0.362728} + - time: 0.066667 + value: {x: 0.379064, y: 0.379064, z: 0.379064} + - time: 0.100000 + value: {x: 0.403527, y: 0.403527, z: 0.403527} + - time: 0.133333 + value: {x: 0.432951, y: 0.432951, z: 0.432951} + - time: 0.166667 + value: {x: 0.461919, y: 0.461919, z: 0.461919} + - time: 0.200000 + value: {x: 0.489715, y: 0.489715, z: 0.489715} + - time: 0.233333 + value: {x: 0.520713, y: 0.520713, z: 0.520713} + - time: 0.266667 + value: {x: 0.555807, y: 0.555807, z: 0.555807} + - time: 0.300000 + value: {x: 0.594697, y: 0.594697, z: 0.594697} + - time: 0.333333 + value: {x: 0.637337, y: 0.637337, z: 0.637337} + - time: 0.366667 + value: {x: 0.683658, y: 0.683658, z: 0.683658} + - time: 0.400000 + value: {x: 0.733391, y: 0.733391, z: 0.733391} + - time: 0.433333 + value: {x: 0.786055, y: 0.786055, z: 0.786055} + - time: 0.466667 + value: {x: 0.841041, y: 0.841041, z: 0.841041} + - time: 0.500000 + value: {x: 0.897832, y: 0.897832, z: 0.897832} + - time: 0.533333 + value: {x: 0.956439, y: 0.956439, z: 0.956439} + - time: 0.566667 + value: {x: 1.017518, y: 1.017518, z: 1.017518} + - time: 0.600000 + value: {x: 1.082001, y: 1.082001, z: 1.082001} + - time: 0.633333 + value: {x: 1.150350, y: 1.150350, z: 1.150350} + - time: 0.666667 + value: {x: 1.222085, y: 1.222085, z: 1.222085} + - time: 0.700000 + value: {x: 1.296105, y: 1.296105, z: 1.296105} + - time: 0.733333 + value: {x: 1.371223, y: 1.371223, z: 1.371223} + - time: 0.766667 + value: {x: 1.446797, y: 1.446797, z: 1.446797} + - time: 0.800000 + value: {x: 1.522943, y: 1.522943, z: 1.522943} + - time: 0.833333 + value: {x: 1.599842, y: 1.599842, z: 1.599842} + - time: 0.933333 + value: {x: 1.832185, y: 1.832185, z: 1.832185} + - time: 0.966667 + value: {x: 1.909301, y: 1.909301, z: 1.909301} + - time: 1.000000 + value: {x: 1.985879, y: 1.985879, z: 1.985879} + - time: 1.033333 + value: {x: 2.061445, y: 2.061445, z: 2.061445} + - time: 1.066667 + value: {x: 2.135464, y: 2.135464, z: 2.135464} + - time: 1.100000 + value: {x: 2.207536, y: 2.207536, z: 2.207536} + - time: 1.133333 + value: {x: 2.277550, y: 2.277550, z: 2.277550} + - time: 1.166667 + value: {x: 2.345715, y: 2.345715, z: 2.345715} + - time: 1.200000 + value: {x: 2.412597, y: 2.412597, z: 2.412597} + - time: 1.233333 + value: {x: 2.478831, y: 2.478831, z: 2.478831} + - time: 1.266667 + value: {x: 2.544552, y: 2.544552, z: 2.544552} + - time: 1.300000 + value: {x: 2.609845, y: 2.609845, z: 2.609845} + - time: 1.333333 + value: {x: 2.674861, y: 2.674861, z: 2.674861} + - time: 1.433333 + value: {x: 2.868732, y: 2.868732, z: 2.868732} + - time: 1.466667 + value: {x: 2.933886, y: 2.933886, z: 2.933886} + - time: 1.500000 + value: {x: 3.000426, y: 3.000426, z: 3.000426} + - time: 1.533333 + value: {x: 3.068141, y: 3.068141, z: 3.068141} + - time: 1.566667 + value: {x: 3.136410, y: 3.136410, z: 3.136410} + - time: 1.600000 + value: {x: 3.204195, y: 3.204195, z: 3.204195} + - time: 1.633333 + value: {x: 3.270274, y: 3.270274, z: 3.270274} + - time: 1.666667 + value: {x: 3.333599, y: 3.333599, z: 3.333599} + - time: 1.700000 + value: {x: 3.394059, y: 3.394059, z: 3.394059} + - time: 1.733333 + value: {x: 3.452037, y: 3.452037, z: 3.452037} + - time: 1.800000 + value: {x: 3.566211, y: 3.566211, z: 3.566211} + - time: 1.833333 + value: {x: 3.624182, y: 3.624182, z: 3.624182} + - time: 1.866667 + value: {x: 3.682731, y: 3.682731, z: 3.682731} + - time: 1.900000 + value: {x: 3.740912, y: 3.740912, z: 3.740912} + - time: 1.933333 + value: {x: 3.797465, y: 3.797465, z: 3.797465} + - time: 1.966667 + value: {x: 3.851202, y: 3.851202, z: 3.851202} + - time: 2.000000 + value: {x: 3.901341, y: 3.901341, z: 3.901341} + - time: 2.033333 + value: {x: 3.947837, y: 3.947837, z: 3.947837} + - time: 2.066667 + value: {x: 3.991362, y: 3.991362, z: 3.991362} + - time: 2.100000 + value: {x: 4.033008, y: 4.033008, z: 4.033008} + - time: 2.133333 + value: {x: 4.073517, y: 4.073517, z: 4.073517} + - time: 2.233333 + value: {x: 4.193640, y: 4.193640, z: 4.193640} + - time: 2.266667 + value: {x: 4.233435, y: 4.233435, z: 4.233435} + - time: 2.300000 + value: {x: 4.272594, y: 4.272594, z: 4.272594} + - time: 2.333333 + value: {x: 4.310647, y: 4.310647, z: 4.310647} + - time: 2.366667 + value: {x: 4.347355, y: 4.347355, z: 4.347355} + - time: 2.400000 + value: {x: 4.382717, y: 4.382717, z: 4.382717} + - time: 2.433333 + value: {x: 4.416868, y: 4.416868, z: 4.416868} + - time: 2.466667 + value: {x: 4.449579, y: 4.449579, z: 4.449579} + - time: 2.500000 + value: {x: 4.480500, y: 4.480500, z: 4.480500} + - time: 2.533333 + value: {x: 4.508671, y: 4.508671, z: 4.508671} + - time: 2.566667 + value: {x: 4.533517, y: 4.533517, z: 4.533517} + - time: 2.600000 + value: {x: 4.555696, y: 4.555696, z: 4.555696} + - time: 2.633333 + value: {x: 4.576101, y: 4.576101, z: 4.576101} + - time: 2.666667 + value: {x: 4.595662, y: 4.595662, z: 4.595662} + - time: 2.800000 + value: {x: 4.672712, y: 4.672712, z: 4.672712} + - time: 2.833333 + value: {x: 4.691670, y: 4.691670, z: 4.691670} + - time: 2.866667 + value: {x: 4.709744, y: 4.709744, z: 4.709744} + - time: 2.900000 + value: {x: 4.726344, y: 4.726344, z: 4.726344} + - time: 2.933333 + value: {x: 4.741231, y: 4.741231, z: 4.741231} + - time: 2.966667 + value: {x: 4.754402, y: 4.754402, z: 4.754402} + - time: 3.000000 + value: {x: 4.765959, y: 4.765959, z: 4.765959} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_19: + position: + - time: 0.000000 + value: {x: 0.111932, y: 2.511905, z: -0.113304} + - time: 0.033333 + value: {x: 0.111932, y: 2.511905, z: -0.113304} + - time: 0.066667 + value: {x: -0.009949, y: 1.915579, z: -0.039922} + - time: 0.100000 + value: {x: -0.083677, y: 1.296275, z: -0.053058} + - time: 0.133333 + value: {x: -0.168800, y: 0.768014, z: -0.157933} + - time: 0.166667 + value: {x: -0.299109, y: 0.439974, z: -0.382943} + - time: 0.200000 + value: {x: -0.466170, y: 0.309933, z: -0.629083} + - time: 0.233333 + value: {x: -0.606284, y: 0.265766, z: -0.807298} + - time: 0.266667 + value: {x: -0.692158, y: 0.252168, z: -0.914719} + - time: 0.300000 + value: {x: -0.767018, y: 0.245856, z: -1.007522} + - time: 0.333333 + value: {x: -0.844486, y: 0.243894, z: -1.098753} + - time: 0.366667 + value: {x: -0.925180, y: 0.245021, z: -1.187400} + - time: 0.400000 + value: {x: -1.008386, y: 0.248143, z: -1.273672} + - time: 0.433333 + value: {x: -1.093161, y: 0.252903, z: -1.358171} + - time: 0.466667 + value: {x: -1.178109, y: 0.258992, z: -1.441952} + - time: 0.500000 + value: {x: -1.261266, y: 0.265887, z: -1.526650} + - time: 0.533333 + value: {x: -1.341453, y: 0.273091, z: -1.613280} + - time: 0.566667 + value: {x: -1.418767, y: 0.280259, z: -1.701654} + - time: 0.600000 + value: {x: -1.494103, y: 0.287259, z: -1.790927} + - time: 0.633333 + value: {x: -1.568182, y: 0.294042, z: -1.880413} + - time: 0.666667 + value: {x: -1.641711, y: 0.300609, z: -1.969449} + - time: 0.700000 + value: {x: -1.715472, y: 0.306992, z: -2.057302} + - time: 0.733333 + value: {x: -1.790005, y: 0.313243, z: -2.143452} + - time: 0.766667 + value: {x: -1.865532, y: 0.319432, z: -2.227650} + - time: 0.800000 + value: {x: -1.942054, y: 0.325636, z: -2.309841} + - time: 0.833333 + value: {x: -2.019491, y: 0.331942, z: -2.390033} + - time: 0.866667 + value: {x: -2.097703, y: 0.338437, z: -2.468279} + - time: 0.900000 + value: {x: -2.176476, y: 0.345206, z: -2.544702} + - time: 0.933333 + value: {x: -2.255573, y: 0.352324, z: -2.619426} + - time: 0.966667 + value: {x: -2.334688, y: 0.359858, z: -2.692638} + - time: 1.000000 + value: {x: -2.413632, y: 0.367957, z: -2.764303} + - time: 1.033333 + value: {x: -2.492167, y: 0.376643, z: -2.834558} + - time: 1.066667 + value: {x: -2.569955, y: 0.385936, z: -2.903611} + - time: 1.100000 + value: {x: -2.646635, y: 0.395860, z: -2.971672} + - time: 1.133333 + value: {x: -2.721675, y: 0.406424, z: -3.039109} + - time: 1.166667 + value: {x: -2.794100, y: 0.417702, z: -3.106566} + - time: 1.200000 + value: {x: -2.863827, y: 0.429905, z: -3.173598} + - time: 1.233333 + value: {x: -2.930725, y: 0.442785, z: -3.240568} + - time: 1.266667 + value: {x: -2.994799, y: 0.456295, z: -3.307431} + - time: 1.300000 + value: {x: -3.055441, y: 0.470620, z: -3.374190} + - time: 1.333333 + value: {x: -3.112283, y: 0.485859, z: -3.440622} + - time: 1.366667 + value: {x: -3.166794, y: 0.501639, z: -3.506123} + - time: 1.400000 + value: {x: -3.218800, y: 0.518109, z: -3.570321} + - time: 1.433333 + value: {x: -3.267922, y: 0.535538, z: -3.632352} + - time: 1.466667 + value: {x: -3.315325, y: 0.553320, z: -3.692808} + - time: 1.500000 + value: {x: -3.359951, y: 0.571938, z: -3.750761} + - time: 1.533333 + value: {x: -3.402230, y: 0.591119, z: -3.806220} + - time: 1.566667 + value: {x: -3.442721, y: 0.610591, z: -3.859725} + - time: 1.600000 + value: {x: -3.479827, y: 0.630913, z: -3.909365} + - time: 1.633333 + value: {x: -3.515904, y: 0.651115, z: -3.957705} + - time: 1.666667 + value: {x: -3.547790, y: 0.672148, z: -4.001028} + - time: 1.700000 + value: {x: -3.578958, y: 0.692855, z: -4.043334} + - time: 1.733333 + value: {x: -3.605972, y: 0.713949, z: -4.080210} + - time: 1.766667 + value: {x: -3.632582, y: 0.734617, z: -4.116475} + - time: 1.800000 + value: {x: -3.654514, y: 0.755057, z: -4.146428} + - time: 1.833333 + value: {x: -3.676168, y: 0.775045, z: -4.175939} + - time: 1.866667 + value: {x: -3.694053, y: 0.793886, z: -4.200076} + - time: 1.900000 + value: {x: -3.710834, y: 0.812103, z: -4.222610} + - time: 1.933333 + value: {x: -3.725857, y: 0.829032, z: -4.242556} + - time: 1.966667 + value: {x: -3.738313, y: 0.844238, z: -4.258736} + - time: 2.000000 + value: {x: -3.750631, y: 0.859037, z: -4.274699} + - time: 2.033333 + value: {x: -3.760502, y: 0.871322, z: -4.287175} + - time: 2.066667 + value: {x: -3.769506, y: 0.882546, z: -4.298403} + - time: 2.100000 + value: {x: -3.778425, y: 0.893439, z: -4.309504} + - time: 2.133333 + value: {x: -3.785585, y: 0.901977, z: -4.318253} + - time: 2.166667 + value: {x: -3.792235, y: 0.909690, z: -4.326309} + - time: 2.200000 + value: {x: -3.798835, y: 0.917150, z: -4.334290} + - time: 2.233333 + value: {x: -3.804881, y: 0.923670, z: -4.341593} + - time: 2.266667 + value: {x: -3.810026, y: 0.928774, z: -4.347794} + - time: 2.333333 + value: {x: -3.820188, y: 0.938425, z: -4.360006} + - time: 2.366667 + value: {x: -3.825013, y: 0.942728, z: -4.365808} + - time: 2.400000 + value: {x: -3.829211, y: 0.946029, z: -4.370918} + - time: 2.466667 + value: {x: -3.837399, y: 0.952198, z: -4.380844} + - time: 2.533333 + value: {x: -3.845198, y: 0.957761, z: -4.390255} + - time: 2.566667 + value: {x: -3.848742, y: 0.960066, z: -4.394566} + - time: 2.633333 + value: {x: -3.855232, y: 0.963995, z: -4.402479} + - time: 2.700000 + value: {x: -3.861050, y: 0.967352, z: -4.409536} + - time: 2.733333 + value: {x: -3.863659, y: 0.968806, z: -4.412687} + - time: 2.766667 + value: {x: -3.866039, y: 0.970104, z: -4.415560} + - time: 2.800000 + value: {x: -3.868174, y: 0.971243, z: -4.418127} + - time: 2.833333 + value: {x: -3.870039, y: 0.972218, z: -4.420368} + - time: 2.866667 + value: {x: -3.871614, y: 0.973024, z: -4.422256} + - time: 2.900000 + value: {x: -3.872877, y: 0.973660, z: -4.423769} + - time: 2.933333 + value: {x: -3.873810, y: 0.974118, z: -4.424881} + - time: 2.966667 + value: {x: -3.874384, y: 0.974396, z: -4.425568} + - time: 3.000000 + value: {x: -3.874580, y: 0.974490, z: -4.425802} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.445164, y: 0.445164, z: 0.445164} + - time: 0.033333 + value: {x: 0.445245, y: 0.445245, z: 0.445245} + - time: 0.066667 + value: {x: 0.464094, y: 0.464094, z: 0.464094} + - time: 0.100000 + value: {x: 0.492122, y: 0.492122, z: 0.492122} + - time: 0.133333 + value: {x: 0.526026, y: 0.526026, z: 0.526026} + - time: 0.166667 + value: {x: 0.561613, y: 0.561613, z: 0.561613} + - time: 0.200000 + value: {x: 0.599658, y: 0.599658, z: 0.599658} + - time: 0.233333 + value: {x: 0.643168, y: 0.643168, z: 0.643168} + - time: 0.266667 + value: {x: 0.692433, y: 0.692433, z: 0.692433} + - time: 0.300000 + value: {x: 0.746579, y: 0.746579, z: 0.746579} + - time: 0.333333 + value: {x: 0.805048, y: 0.805048, z: 0.805048} + - time: 0.366667 + value: {x: 0.867478, y: 0.867478, z: 0.867478} + - time: 0.400000 + value: {x: 0.933566, y: 0.933566, z: 0.933566} + - time: 0.433333 + value: {x: 1.003164, y: 1.003164, z: 1.003164} + - time: 0.466667 + value: {x: 1.076298, y: 1.076298, z: 1.076298} + - time: 0.500000 + value: {x: 1.153070, y: 1.153070, z: 1.153070} + - time: 0.533333 + value: {x: 1.233499, y: 1.233499, z: 1.233499} + - time: 0.566667 + value: {x: 1.317310, y: 1.317310, z: 1.317310} + - time: 0.600000 + value: {x: 1.404142, y: 1.404142, z: 1.404142} + - time: 0.633333 + value: {x: 1.493636, y: 1.493636, z: 1.493636} + - time: 0.666667 + value: {x: 1.585259, y: 1.585259, z: 1.585259} + - time: 0.700000 + value: {x: 1.678368, y: 1.678368, z: 1.678368} + - time: 0.733333 + value: {x: 1.772589, y: 1.772589, z: 1.772589} + - time: 0.766667 + value: {x: 1.867811, y: 1.867811, z: 1.867811} + - time: 0.800000 + value: {x: 1.963957, y: 1.963957, z: 1.963957} + - time: 0.866667 + value: {x: 2.157946, y: 2.157946, z: 2.157946} + - time: 0.900000 + value: {x: 2.254216, y: 2.254216, z: 2.254216} + - time: 0.933333 + value: {x: 2.348717, y: 2.348717, z: 2.348717} + - time: 0.966667 + value: {x: 2.441031, y: 2.441031, z: 2.441031} + - time: 1.000000 + value: {x: 2.531534, y: 2.531534, z: 2.531534} + - time: 1.066667 + value: {x: 2.710567, y: 2.710567, z: 2.710567} + - time: 1.100000 + value: {x: 2.801203, y: 2.801203, z: 2.801203} + - time: 1.133333 + value: {x: 2.893323, y: 2.893323, z: 2.893323} + - time: 1.166667 + value: {x: 2.986130, y: 2.986130, z: 2.986130} + - time: 1.200000 + value: {x: 3.078176, y: 3.078176, z: 3.078176} + - time: 1.233333 + value: {x: 3.168191, y: 3.168191, z: 3.168191} + - time: 1.266667 + value: {x: 3.254909, y: 3.254909, z: 3.254909} + - time: 1.300000 + value: {x: 3.337935, y: 3.337935, z: 3.337935} + - time: 1.333333 + value: {x: 3.418286, y: 3.418286, z: 3.418286} + - time: 1.366667 + value: {x: 3.497911, y: 3.497911, z: 3.497911} + - time: 1.400000 + value: {x: 3.578004, y: 3.578004, z: 3.578004} + - time: 1.433333 + value: {x: 3.658991, y: 3.658991, z: 3.658991} + - time: 1.466667 + value: {x: 3.740506, y: 3.740506, z: 3.740506} + - time: 1.500000 + value: {x: 3.821561, y: 3.821561, z: 3.821561} + - time: 1.533333 + value: {x: 3.900411, y: 3.900411, z: 3.900411} + - time: 1.566667 + value: {x: 3.975029, y: 3.975029, z: 3.975029} + - time: 1.600000 + value: {x: 4.044199, y: 4.044199, z: 4.044199} + - time: 1.633333 + value: {x: 4.107694, y: 4.107694, z: 4.107694} + - time: 1.666667 + value: {x: 4.166253, y: 4.166253, z: 4.166253} + - time: 1.700000 + value: {x: 4.220476, y: 4.220476, z: 4.220476} + - time: 1.733333 + value: {x: 4.271375, y: 4.271375, z: 4.271375} + - time: 1.766667 + value: {x: 4.320268, y: 4.320268, z: 4.320268} + - time: 1.800000 + value: {x: 4.368763, y: 4.368763, z: 4.368763} + - time: 1.833333 + value: {x: 4.417922, y: 4.417922, z: 4.417922} + - time: 1.900000 + value: {x: 4.517968, y: 4.517968, z: 4.517968} + - time: 1.933333 + value: {x: 4.566476, y: 4.566476, z: 4.566476} + - time: 1.966667 + value: {x: 4.611763, y: 4.611763, z: 4.611763} + - time: 2.000000 + value: {x: 4.652494, y: 4.652494, z: 4.652494} + - time: 2.033333 + value: {x: 4.687695, y: 4.687695, z: 4.687695} + - time: 2.066667 + value: {x: 4.716606, y: 4.716606, z: 4.716606} + - time: 2.100000 + value: {x: 4.739505, y: 4.739505, z: 4.739505} + - time: 2.133333 + value: {x: 4.757809, y: 4.757809, z: 4.757809} + - time: 2.166667 + value: {x: 4.773938, y: 4.773938, z: 4.773938} + - time: 2.200000 + value: {x: 4.790510, y: 4.790510, z: 4.790510} + - time: 2.233333 + value: {x: 4.809482, y: 4.809482, z: 4.809482} + - time: 2.266667 + value: {x: 4.831723, y: 4.831723, z: 4.831723} + - time: 2.300000 + value: {x: 4.856876, y: 4.856876, z: 4.856876} + - time: 2.333333 + value: {x: 4.884084, y: 4.884084, z: 4.884084} + - time: 2.366667 + value: {x: 4.912894, y: 4.912894, z: 4.912894} + - time: 2.400000 + value: {x: 4.943107, y: 4.943107, z: 4.943107} + - time: 2.433333 + value: {x: 4.974583, y: 4.974583, z: 4.974583} + - time: 2.466667 + value: {x: 5.007453, y: 5.007453, z: 5.007453} + - time: 2.500000 + value: {x: 5.042085, y: 5.042085, z: 5.042085} + - time: 2.533333 + value: {x: 5.077726, y: 5.077726, z: 5.077726} + - time: 2.600000 + value: {x: 5.149504, y: 5.149504, z: 5.149504} + - time: 2.633333 + value: {x: 5.185024, y: 5.185024, z: 5.185024} + - time: 2.666667 + value: {x: 5.219225, y: 5.219225, z: 5.219225} + - time: 2.700000 + value: {x: 5.251043, y: 5.251043, z: 5.251043} + - time: 2.733333 + value: {x: 5.279532, y: 5.279532, z: 5.279532} + - time: 2.766667 + value: {x: 5.303852, y: 5.303852, z: 5.303852} + - time: 2.800000 + value: {x: 5.323387, y: 5.323387, z: 5.323387} + - time: 2.833333 + value: {x: 5.337827, y: 5.337827, z: 5.337827} + - time: 2.866667 + value: {x: 5.347315, y: 5.347315, z: 5.347315} + - time: 2.900000 + value: {x: 5.352551, y: 5.352551, z: 5.352551} + - time: 2.933333 + value: {x: 5.354904, y: 5.354904, z: 5.354904} + - time: 3.000000 + value: {x: 5.357121, y: 5.357121, z: 5.357121} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_2: + position: + - time: 0.000000 + value: {x: -0.152201, y: 2.511905, z: -0.062050} + - time: 0.033333 + value: {x: -0.152201, y: 2.511905, z: -0.062050} + - time: 0.066667 + value: {x: 0.017076, y: 1.579751, z: 0.074979} + - time: 0.100000 + value: {x: 0.089139, y: 0.674691, z: 0.326516} + - time: 0.133333 + value: {x: 0.165194, y: 0.255545, z: 1.052547} + - time: 0.166667 + value: {x: 0.054733, y: 0.245855, z: 1.786510} + - time: 0.200000 + value: {x: -0.121311, y: 0.319771, z: 2.259156} + - time: 0.233333 + value: {x: -0.212514, y: 0.426117, z: 2.494296} + - time: 0.266667 + value: {x: -0.254941, y: 0.499509, z: 2.562928} + - time: 0.300000 + value: {x: -0.284118, y: 0.553920, z: 2.571920} + - time: 0.333333 + value: {x: -0.307646, y: 0.585830, z: 2.552998} + - time: 0.366667 + value: {x: -0.334967, y: 0.589037, z: 2.528865} + - time: 0.400000 + value: {x: -0.371562, y: 0.565902, z: 2.523299} + - time: 0.433333 + value: {x: -0.418892, y: 0.528958, z: 2.556623} + - time: 0.466667 + value: {x: -0.476705, y: 0.493757, z: 2.631027} + - time: 0.500000 + value: {x: -0.542242, y: 0.464843, z: 2.732671} + - time: 0.533333 + value: {x: -0.615284, y: 0.442501, z: 2.851654} + - time: 0.566667 + value: {x: -0.696302, y: 0.426263, z: 2.980848} + - time: 0.600000 + value: {x: -0.784894, y: 0.415872, z: 3.116344} + - time: 0.633333 + value: {x: -0.877711, y: 0.410200, z: 3.255612} + - time: 0.666667 + value: {x: -0.971691, y: 0.408474, z: 3.397933} + - time: 0.700000 + value: {x: -1.066741, y: 0.410400, z: 3.542209} + - time: 0.733333 + value: {x: -1.163215, y: 0.414894, z: 3.686788} + - time: 0.766667 + value: {x: -1.261418, y: 0.421432, z: 3.830943} + - time: 0.800000 + value: {x: -1.360069, y: 0.429325, z: 3.974784} + - time: 0.833333 + value: {x: -1.458102, y: 0.437982, z: 4.118468} + - time: 0.866667 + value: {x: -1.553782, y: 0.446951, z: 4.262616} + - time: 0.900000 + value: {x: -1.645169, y: 0.455888, z: 4.407986} + - time: 0.933333 + value: {x: -1.731800, y: 0.464561, z: 4.554648} + - time: 0.966667 + value: {x: -1.814202, y: 0.472789, z: 4.702242} + - time: 1.000000 + value: {x: -1.893983, y: 0.480544, z: 4.849836} + - time: 1.033333 + value: {x: -1.972016, y: 0.487736, z: 4.996911} + - time: 1.066667 + value: {x: -2.048924, y: 0.494372, z: 5.143052} + - time: 1.100000 + value: {x: -2.125417, y: 0.500524, z: 5.287812} + - time: 1.133333 + value: {x: -2.201982, y: 0.506246, z: 5.430847} + - time: 1.166667 + value: {x: -2.278859, y: 0.511592, z: 5.571875} + - time: 1.200000 + value: {x: -2.356151, y: 0.516741, z: 5.710741} + - time: 1.233333 + value: {x: -2.433988, y: 0.521859, z: 5.847252} + - time: 1.266667 + value: {x: -2.512137, y: 0.527129, z: 5.981361} + - time: 1.300000 + value: {x: -2.590216, y: 0.532751, z: 6.113087} + - time: 1.333333 + value: {x: -2.667888, y: 0.538927, z: 6.242387} + - time: 1.366667 + value: {x: -2.744854, y: 0.545856, z: 6.369198} + - time: 1.400000 + value: {x: -2.820688, y: 0.553725, z: 6.493481} + - time: 1.433333 + value: {x: -2.894953, y: 0.562701, z: 6.615185} + - time: 1.466667 + value: {x: -2.967243, y: 0.572925, z: 6.734209} + - time: 1.500000 + value: {x: -3.037372, y: 0.584507, z: 6.850336} + - time: 1.533333 + value: {x: -3.105228, y: 0.597517, z: 6.963287} + - time: 1.566667 + value: {x: -3.170757, y: 0.611985, z: 7.072746} + - time: 1.600000 + value: {x: -3.234051, y: 0.627900, z: 7.178341} + - time: 1.633333 + value: {x: -3.295300, y: 0.645218, z: 7.279673} + - time: 1.666667 + value: {x: -3.354544, y: 0.663862, z: 7.376472} + - time: 1.700000 + value: {x: -3.411578, y: 0.683771, z: 7.468575} + - time: 1.733333 + value: {x: -3.465618, y: 0.705395, z: 7.554443} + - time: 1.766667 + value: {x: -3.516923, y: 0.728059, z: 7.635036} + - time: 1.800000 + value: {x: -3.565503, y: 0.751560, z: 7.710457} + - time: 1.833333 + value: {x: -3.611027, y: 0.775952, z: 7.780071} + - time: 1.866667 + value: {x: -3.652657, y: 0.801359, z: 7.841877} + - time: 1.900000 + value: {x: -3.691608, y: 0.826858, z: 7.898472} + - time: 1.933333 + value: {x: -3.727314, y: 0.852546, z: 7.948555} + - time: 1.966667 + value: {x: -3.758980, y: 0.877833, z: 7.990437} + - time: 2.000000 + value: {x: -3.788647, y: 0.902422, z: 8.028751} + - time: 2.033333 + value: {x: -3.813313, y: 0.925148, z: 8.057384} + - time: 2.066667 + value: {x: -3.836437, y: 0.946478, z: 8.083500} + - time: 2.100000 + value: {x: -3.855940, y: 0.964898, z: 8.102619} + - time: 2.133333 + value: {x: -3.874130, y: 0.981739, z: 8.119801} + - time: 2.166667 + value: {x: -3.889467, y: 0.995229, z: 8.131866} + - time: 2.200000 + value: {x: -3.904230, y: 1.007958, z: 8.143543} + - time: 2.233333 + value: {x: -3.916471, y: 1.016971, z: 8.150906} + - time: 2.266667 + value: {x: -3.928389, y: 1.025647, z: 8.158386} + - time: 2.300000 + value: {x: -3.938957, y: 1.032166, z: 8.164001} + - time: 2.333333 + value: {x: -3.948664, y: 1.037434, z: 8.168705} + - time: 2.366667 + value: {x: -3.958073, y: 1.042487, z: 8.173565} + - time: 2.400000 + value: {x: -3.966383, y: 1.045722, z: 8.177067} + - time: 2.433333 + value: {x: -3.974251, y: 1.048508, z: 8.180450} + - time: 2.466667 + value: {x: -3.981821, y: 1.051174, z: 8.183990} + - time: 2.500000 + value: {x: -3.988869, y: 1.053255, z: 8.187252} + - time: 2.533333 + value: {x: -3.995331, y: 1.054651, z: 8.190125} + - time: 2.566667 + value: {x: -4.001478, y: 1.055986, z: 8.193100} + - time: 2.600000 + value: {x: -4.007288, y: 1.057256, z: 8.196136} + - time: 2.633333 + value: {x: -4.012747, y: 1.058454, z: 8.199196} + - time: 2.666667 + value: {x: -4.017696, y: 1.059271, z: 8.201984} + - time: 2.700000 + value: {x: -4.022249, y: 1.059987, z: 8.204697} + - time: 2.733333 + value: {x: -4.026405, y: 1.060652, z: 8.207329} + - time: 2.766667 + value: {x: -4.030148, y: 1.061261, z: 8.209839} + - time: 2.800000 + value: {x: -4.033457, y: 1.061808, z: 8.212173} + - time: 2.833333 + value: {x: -4.036314, y: 1.062288, z: 8.214294} + - time: 2.866667 + value: {x: -4.038696, y: 1.062694, z: 8.216141} + - time: 2.900000 + value: {x: -4.040585, y: 1.063021, z: 8.217670} + - time: 2.933333 + value: {x: -4.041960, y: 1.063262, z: 8.218830} + - time: 2.966667 + value: {x: -4.042801, y: 1.063412, z: 8.219566} + - time: 3.000000 + value: {x: -4.043085, y: 1.063463, z: 8.219822} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.415721, y: 0.415721, z: 0.415721} + - time: 0.033333 + value: {x: 0.416074, y: 0.416074, z: 0.416074} + - time: 0.066667 + value: {x: 0.457207, y: 0.457207, z: 0.457207} + - time: 0.100000 + value: {x: 0.509519, y: 0.509519, z: 0.509519} + - time: 0.133333 + value: {x: 0.564224, y: 0.564224, z: 0.564224} + - time: 0.166667 + value: {x: 0.617386, y: 0.617386, z: 0.617386} + - time: 0.200000 + value: {x: 0.682223, y: 0.682223, z: 0.682223} + - time: 0.233333 + value: {x: 0.755260, y: 0.755260, z: 0.755260} + - time: 0.266667 + value: {x: 0.838554, y: 0.838554, z: 0.838554} + - time: 0.300000 + value: {x: 0.930230, y: 0.930230, z: 0.930230} + - time: 0.333333 + value: {x: 1.029326, y: 1.029326, z: 1.029326} + - time: 0.366667 + value: {x: 1.134551, y: 1.134551, z: 1.134551} + - time: 0.400000 + value: {x: 1.244255, y: 1.244255, z: 1.244255} + - time: 0.433333 + value: {x: 1.357066, y: 1.357066, z: 1.357066} + - time: 0.466667 + value: {x: 1.472656, y: 1.472656, z: 1.472656} + - time: 0.500000 + value: {x: 1.591438, y: 1.591438, z: 1.591438} + - time: 0.533333 + value: {x: 1.713328, y: 1.713328, z: 1.713328} + - time: 0.566667 + value: {x: 1.837728, y: 1.837728, z: 1.837728} + - time: 0.600000 + value: {x: 1.964360, y: 1.964360, z: 1.964360} + - time: 0.633333 + value: {x: 2.093024, y: 2.093024, z: 2.093024} + - time: 0.666667 + value: {x: 2.222726, y: 2.222726, z: 2.222726} + - time: 0.700000 + value: {x: 2.351293, y: 2.351293, z: 2.351293} + - time: 0.733333 + value: {x: 2.476543, y: 2.476543, z: 2.476543} + - time: 0.766667 + value: {x: 2.597125, y: 2.597125, z: 2.597125} + - time: 0.800000 + value: {x: 2.713964, y: 2.713964, z: 2.713964} + - time: 0.833333 + value: {x: 2.828538, y: 2.828538, z: 2.828538} + - time: 0.866667 + value: {x: 2.941392, y: 2.941392, z: 2.941392} + - time: 0.900000 + value: {x: 3.051310, y: 3.051310, z: 3.051310} + - time: 0.933333 + value: {x: 3.156682, y: 3.156682, z: 3.156682} + - time: 0.966667 + value: {x: 3.257189, y: 3.257189, z: 3.257189} + - time: 1.000000 + value: {x: 3.355540, y: 3.355540, z: 3.355540} + - time: 1.033333 + value: {x: 3.455596, y: 3.455596, z: 3.455596} + - time: 1.066667 + value: {x: 3.559246, y: 3.559246, z: 3.559246} + - time: 1.100000 + value: {x: 3.666017, y: 3.666017, z: 3.666017} + - time: 1.133333 + value: {x: 3.774012, y: 3.774012, z: 3.774012} + - time: 1.166667 + value: {x: 3.880785, y: 3.880785, z: 3.880785} + - time: 1.200000 + value: {x: 3.984472, y: 3.984472, z: 3.984472} + - time: 1.233333 + value: {x: 4.084220, y: 4.084220, z: 4.084220} + - time: 1.266667 + value: {x: 4.180740, y: 4.180740, z: 4.180740} + - time: 1.300000 + value: {x: 4.275403, y: 4.275403, z: 4.275403} + - time: 1.333333 + value: {x: 4.368000, y: 4.368000, z: 4.368000} + - time: 1.366667 + value: {x: 4.457176, y: 4.457176, z: 4.457176} + - time: 1.400000 + value: {x: 4.541500, y: 4.541500, z: 4.541500} + - time: 1.433333 + value: {x: 4.620730, y: 4.620730, z: 4.620730} + - time: 1.466667 + value: {x: 4.696779, y: 4.696779, z: 4.696779} + - time: 1.533333 + value: {x: 4.847025, y: 4.847025, z: 4.847025} + - time: 1.566667 + value: {x: 4.921736, y: 4.921736, z: 4.921736} + - time: 1.600000 + value: {x: 4.994276, y: 4.994276, z: 4.994276} + - time: 1.633333 + value: {x: 5.062388, y: 5.062388, z: 5.062388} + - time: 1.666667 + value: {x: 5.124476, y: 5.124476, z: 5.124476} + - time: 1.700000 + value: {x: 5.180327, y: 5.180327, z: 5.180327} + - time: 1.733333 + value: {x: 5.230880, y: 5.230880, z: 5.230880} + - time: 1.766667 + value: {x: 5.277474, y: 5.277474, z: 5.277474} + - time: 1.800000 + value: {x: 5.321435, y: 5.321435, z: 5.321435} + - time: 1.833333 + value: {x: 5.364244, y: 5.364244, z: 5.364244} + - time: 1.866667 + value: {x: 5.406662, y: 5.406662, z: 5.406662} + - time: 1.900000 + value: {x: 5.448214, y: 5.448214, z: 5.448214} + - time: 1.933333 + value: {x: 5.487783, y: 5.487783, z: 5.487783} + - time: 1.966667 + value: {x: 5.524017, y: 5.524017, z: 5.524017} + - time: 2.000000 + value: {x: 5.556031, y: 5.556031, z: 5.556031} + - time: 2.033333 + value: {x: 5.583856, y: 5.583856, z: 5.583856} + - time: 2.066667 + value: {x: 5.608017, y: 5.608017, z: 5.608017} + - time: 2.100000 + value: {x: 5.630013, y: 5.630013, z: 5.630013} + - time: 2.133333 + value: {x: 5.651185, y: 5.651185, z: 5.651185} + - time: 2.166667 + value: {x: 5.673272, y: 5.673272, z: 5.673272} + - time: 2.200000 + value: {x: 5.696679, y: 5.696679, z: 5.696679} + - time: 2.233333 + value: {x: 5.722258, y: 5.722258, z: 5.722258} + - time: 2.300000 + value: {x: 5.775162, y: 5.775162, z: 5.775162} + - time: 2.333333 + value: {x: 5.800110, y: 5.800110, z: 5.800110} + - time: 2.366667 + value: {x: 5.822300, y: 5.822300, z: 5.822300} + - time: 2.400000 + value: {x: 5.841924, y: 5.841924, z: 5.841924} + - time: 2.433333 + value: {x: 5.859577, y: 5.859577, z: 5.859577} + - time: 2.466667 + value: {x: 5.876734, y: 5.876734, z: 5.876734} + - time: 2.533333 + value: {x: 5.913412, y: 5.913412, z: 5.913412} + - time: 2.566667 + value: {x: 5.930969, y: 5.930969, z: 5.930969} + - time: 2.600000 + value: {x: 5.948049, y: 5.948049, z: 5.948049} + - time: 2.633333 + value: {x: 5.964876, y: 5.964876, z: 5.964876} + - time: 2.666667 + value: {x: 5.981193, y: 5.981193, z: 5.981193} + - time: 2.700000 + value: {x: 5.996625, y: 5.996625, z: 5.996625} + - time: 2.733333 + value: {x: 6.010697, y: 6.010697, z: 6.010697} + - time: 2.766667 + value: {x: 6.022766, y: 6.022766, z: 6.022766} + - time: 2.800000 + value: {x: 6.031975, y: 6.031975, z: 6.031975} + - time: 2.833333 + value: {x: 6.037785, y: 6.037785, z: 6.037785} + - time: 2.866667 + value: {x: 6.040339, y: 6.040339, z: 6.040339} + - time: 2.900000 + value: {x: 6.040371, y: 6.040371, z: 6.040371} + - time: 2.933333 + value: {x: 6.039230, y: 6.039230, z: 6.039230} + - time: 2.966667 + value: {x: 6.038514, y: 6.038514, z: 6.038514} + - time: 3.000000 + value: {x: 6.039588, y: 6.039588, z: 6.039588} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_3: + position: + - time: 0.000000 + value: {x: -0.164718, y: 2.511905, z: 0.028021} + - time: 0.033333 + value: {x: -0.164718, y: 2.511905, z: 0.028021} + - time: 0.066667 + value: {x: 0.050166, y: 1.579751, z: 0.055026} + - time: 0.100000 + value: {x: 0.249598, y: 0.674692, z: 0.229961} + - time: 0.133333 + value: {x: 0.820437, y: 0.255545, z: 0.793912} + - time: 0.166667 + value: {x: 1.294517, y: 0.245855, z: 1.457431} + - time: 0.200000 + value: {x: 1.539369, y: 0.319771, z: 1.937295} + - time: 0.233333 + value: {x: 1.587130, y: 0.426117, z: 2.185024} + - time: 0.266667 + value: {x: 1.562757, y: 0.499509, z: 2.268169} + - time: 0.300000 + value: {x: 1.518711, y: 0.553920, z: 2.293619} + - time: 0.333333 + value: {x: 1.467114, y: 0.585831, z: 2.292146} + - time: 0.366667 + value: {x: 1.415660, y: 0.589038, z: 2.287643} + - time: 0.400000 + value: {x: 1.372507, y: 0.565903, z: 2.303168} + - time: 0.433333 + value: {x: 1.348088, y: 0.528958, z: 2.356655} + - time: 0.466667 + value: {x: 1.343950, y: 0.493758, z: 2.449811} + - time: 0.500000 + value: {x: 1.347606, y: 0.464843, z: 2.570179} + - time: 0.533333 + value: {x: 1.352037, y: 0.442501, z: 2.709434} + - time: 0.566667 + value: {x: 1.355472, y: 0.426264, z: 2.861535} + - time: 0.600000 + value: {x: 1.361016, y: 0.415872, z: 3.022469} + - time: 0.633333 + value: {x: 1.369766, y: 0.410200, z: 3.188360} + - time: 0.666667 + value: {x: 1.380657, y: 0.408474, z: 3.357304} + - time: 0.700000 + value: {x: 1.393242, y: 0.410400, z: 3.528318} + - time: 0.733333 + value: {x: 1.408063, y: 0.414894, z: 3.700012} + - time: 0.766667 + value: {x: 1.425338, y: 0.421432, z: 3.871849} + - time: 0.800000 + value: {x: 1.443606, y: 0.429325, z: 4.043502} + - time: 0.833333 + value: {x: 1.461493, y: 0.437982, z: 4.214775} + - time: 0.866667 + value: {x: 1.477671, y: 0.446951, z: 4.385594} + - time: 0.900000 + value: {x: 1.491243, y: 0.455888, z: 4.555870} + - time: 0.933333 + value: {x: 1.502495, y: 0.464562, z: 4.725434} + - time: 0.966667 + value: {x: 1.510015, y: 0.472789, z: 4.894332} + - time: 1.000000 + value: {x: 1.513103, y: 0.480544, z: 5.062510} + - time: 1.033333 + value: {x: 1.510641, y: 0.487736, z: 5.229999} + - time: 1.066667 + value: {x: 1.504300, y: 0.494372, z: 5.396534} + - time: 1.100000 + value: {x: 1.496152, y: 0.500524, z: 5.561821} + - time: 1.133333 + value: {x: 1.486778, y: 0.506246, z: 5.725704} + - time: 1.166667 + value: {x: 1.475898, y: 0.511592, z: 5.888066} + - time: 1.200000 + value: {x: 1.463770, y: 0.516741, z: 6.048791} + - time: 1.233333 + value: {x: 1.451019, y: 0.521859, z: 6.207694} + - time: 1.266667 + value: {x: 1.438495, y: 0.527129, z: 6.364549} + - time: 1.300000 + value: {x: 1.426659, y: 0.532751, z: 6.519151} + - time: 1.333333 + value: {x: 1.415691, y: 0.538927, z: 6.671302} + - time: 1.366667 + value: {x: 1.405600, y: 0.545856, z: 6.820805} + - time: 1.400000 + value: {x: 1.396260, y: 0.553725, z: 6.967453} + - time: 1.433333 + value: {x: 1.387417, y: 0.562701, z: 7.111028} + - time: 1.466667 + value: {x: 1.378835, y: 0.572925, z: 7.251289} + - time: 1.500000 + value: {x: 1.370331, y: 0.584507, z: 7.387966} + - time: 1.533333 + value: {x: 1.361766, y: 0.597518, z: 7.520778} + - time: 1.566667 + value: {x: 1.353031, y: 0.611985, z: 7.649427} + - time: 1.600000 + value: {x: 1.344095, y: 0.627900, z: 7.773618} + - time: 1.633333 + value: {x: 1.334921, y: 0.645218, z: 7.893082} + - time: 1.666667 + value: {x: 1.325456, y: 0.663862, z: 8.007601} + - time: 1.700000 + value: {x: 1.315628, y: 0.683771, z: 8.116940} + - time: 1.733333 + value: {x: 1.305036, y: 0.705395, z: 8.219402} + - time: 1.766667 + value: {x: 1.293833, y: 0.728059, z: 8.315958} + - time: 1.800000 + value: {x: 1.282015, y: 0.751560, z: 8.406698} + - time: 1.833333 + value: {x: 1.269392, y: 0.775953, z: 8.490929} + - time: 1.866667 + value: {x: 1.255428, y: 0.801359, z: 8.566526} + - time: 1.900000 + value: {x: 1.240853, y: 0.826858, z: 8.636295} + - time: 1.933333 + value: {x: 1.225350, y: 0.852546, z: 8.698847} + - time: 1.966667 + value: {x: 1.208683, y: 0.877833, z: 8.752327} + - time: 2.000000 + value: {x: 1.191971, y: 0.902422, z: 8.801706} + - time: 2.033333 + value: {x: 1.174218, y: 0.925148, z: 8.840242} + - time: 2.066667 + value: {x: 1.156878, y: 0.946479, z: 8.875784} + - time: 2.100000 + value: {x: 1.139427, y: 0.964897, z: 8.903416} + - time: 2.133333 + value: {x: 1.122564, y: 0.981739, z: 8.928665} + - time: 2.166667 + value: {x: 1.106094, y: 0.995229, z: 8.947996} + - time: 2.200000 + value: {x: 1.090322, y: 1.007958, z: 8.966646} + - time: 2.233333 + value: {x: 1.075140, y: 1.016971, z: 8.980232} + - time: 2.266667 + value: {x: 1.060673, y: 1.025647, z: 8.993708} + - time: 2.300000 + value: {x: 1.046878, y: 1.032166, z: 9.004841} + - time: 2.333333 + value: {x: 1.033774, y: 1.037434, z: 9.014692} + - time: 2.366667 + value: {x: 1.021382, y: 1.042486, z: 9.024488} + - time: 2.400000 + value: {x: 1.009689, y: 1.045721, z: 9.032501} + - time: 2.433333 + value: {x: 0.998699, y: 1.048508, z: 9.040140} + - time: 2.466667 + value: {x: 0.988409, y: 1.051173, z: 9.047714} + - time: 2.500000 + value: {x: 0.978815, y: 1.053255, z: 9.054743} + - time: 2.533333 + value: {x: 0.969913, y: 1.054651, z: 9.061090} + - time: 2.566667 + value: {x: 0.961694, y: 1.055986, z: 9.067320} + - time: 2.600000 + value: {x: 0.954149, y: 1.057255, z: 9.073387} + - time: 2.633333 + value: {x: 0.947273, y: 1.058453, z: 9.079254} + - time: 2.666667 + value: {x: 0.941056, y: 1.059271, z: 9.084587} + - time: 2.700000 + value: {x: 0.935489, y: 1.059987, z: 9.089611} + - time: 2.733333 + value: {x: 0.930562, y: 1.060652, z: 9.094322} + - time: 2.766667 + value: {x: 0.926264, y: 1.061261, z: 9.098669} + - time: 2.800000 + value: {x: 0.922584, y: 1.061808, z: 9.102613} + - time: 2.833333 + value: {x: 0.919510, y: 1.062288, z: 9.106096} + - time: 2.866667 + value: {x: 0.917027, y: 1.062694, z: 9.109068} + - time: 2.900000 + value: {x: 0.915124, y: 1.063021, z: 9.111477} + - time: 2.933333 + value: {x: 0.913784, y: 1.063262, z: 9.113264} + - time: 2.966667 + value: {x: 0.912992, y: 1.063411, z: 9.114382} + - time: 3.000000 + value: {x: 0.912731, y: 1.063463, z: 9.114763} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.208018, y: 0.208018, z: 0.208018} + - time: 0.033333 + value: {x: 0.208351, y: 0.208351, z: 0.208351} + - time: 0.066667 + value: {x: 0.247677, y: 0.247677, z: 0.247677} + - time: 0.100000 + value: {x: 0.294188, y: 0.294188, z: 0.294188} + - time: 0.133333 + value: {x: 0.340956, y: 0.340956, z: 0.340956} + - time: 0.166667 + value: {x: 0.380988, y: 0.380988, z: 0.380988} + - time: 0.200000 + value: {x: 0.428947, y: 0.428947, z: 0.428947} + - time: 0.233333 + value: {x: 0.482015, y: 0.482015, z: 0.482015} + - time: 0.266667 + value: {x: 0.540421, y: 0.540421, z: 0.540421} + - time: 0.300000 + value: {x: 0.602981, y: 0.602981, z: 0.602981} + - time: 0.333333 + value: {x: 0.668906, y: 0.668906, z: 0.668906} + - time: 0.366667 + value: {x: 0.737474, y: 0.737474, z: 0.737474} + - time: 0.400000 + value: {x: 0.807878, y: 0.807878, z: 0.807878} + - time: 0.433333 + value: {x: 0.879376, y: 0.879376, z: 0.879376} + - time: 0.466667 + value: {x: 0.951702, y: 0.951702, z: 0.951702} + - time: 0.500000 + value: {x: 1.025040, y: 1.025040, z: 1.025040} + - time: 0.533333 + value: {x: 1.099561, y: 1.099561, z: 1.099561} + - time: 0.566667 + value: {x: 1.175552, y: 1.175552, z: 1.175552} + - time: 0.600000 + value: {x: 1.253214, y: 1.253214, z: 1.253214} + - time: 0.633333 + value: {x: 1.332267, y: 1.332267, z: 1.332267} + - time: 0.666667 + value: {x: 1.411671, y: 1.411671, z: 1.411671} + - time: 0.700000 + value: {x: 1.489827, y: 1.489827, z: 1.489827} + - time: 0.733333 + value: {x: 1.565280, y: 1.565280, z: 1.565280} + - time: 0.766667 + value: {x: 1.636885, y: 1.636885, z: 1.636885} + - time: 0.800000 + value: {x: 1.704792, y: 1.704792, z: 1.704792} + - time: 0.833333 + value: {x: 1.769629, y: 1.769629, z: 1.769629} + - time: 0.866667 + value: {x: 1.831986, y: 1.831986, z: 1.831986} + - time: 0.900000 + value: {x: 1.892227, y: 1.892227, z: 1.892227} + - time: 0.933333 + value: {x: 1.950852, y: 1.950852, z: 1.950852} + - time: 0.966667 + value: {x: 2.008475, y: 2.008475, z: 2.008475} + - time: 1.000000 + value: {x: 2.065280, y: 2.065280, z: 2.065280} + - time: 1.033333 + value: {x: 2.121439, y: 2.121439, z: 2.121439} + - time: 1.066667 + value: {x: 2.177227, y: 2.177227, z: 2.177227} + - time: 1.133333 + value: {x: 2.288322, y: 2.288322, z: 2.288322} + - time: 1.166667 + value: {x: 2.344684, y: 2.344684, z: 2.344684} + - time: 1.200000 + value: {x: 2.402095, y: 2.402095, z: 2.402095} + - time: 1.233333 + value: {x: 2.460086, y: 2.460086, z: 2.460086} + - time: 1.266667 + value: {x: 2.517456, y: 2.517456, z: 2.517456} + - time: 1.300000 + value: {x: 2.572686, y: 2.572686, z: 2.572686} + - time: 1.333333 + value: {x: 2.624833, y: 2.624833, z: 2.624833} + - time: 1.366667 + value: {x: 2.674132, y: 2.674132, z: 2.674132} + - time: 1.400000 + value: {x: 2.721759, y: 2.721759, z: 2.721759} + - time: 1.433333 + value: {x: 2.768842, y: 2.768842, z: 2.768842} + - time: 1.466667 + value: {x: 2.815575, y: 2.815575, z: 2.815575} + - time: 1.500000 + value: {x: 2.861161, y: 2.861161, z: 2.861161} + - time: 1.533333 + value: {x: 2.904505, y: 2.904505, z: 2.904505} + - time: 1.566667 + value: {x: 2.945675, y: 2.945675, z: 2.945675} + - time: 1.600000 + value: {x: 2.985509, y: 2.985509, z: 2.985509} + - time: 1.633333 + value: {x: 3.024355, y: 3.024355, z: 3.024355} + - time: 1.666667 + value: {x: 3.062004, y: 3.062004, z: 3.062004} + - time: 1.700000 + value: {x: 3.098126, y: 3.098126, z: 3.098126} + - time: 1.733333 + value: {x: 3.132350, y: 3.132350, z: 3.132350} + - time: 1.766667 + value: {x: 3.164744, y: 3.164744, z: 3.164744} + - time: 1.800000 + value: {x: 3.195855, y: 3.195855, z: 3.195855} + - time: 1.866667 + value: {x: 3.256851, y: 3.256851, z: 3.256851} + - time: 1.900000 + value: {x: 3.287662, y: 3.287662, z: 3.287662} + - time: 1.933333 + value: {x: 3.318917, y: 3.318917, z: 3.318917} + - time: 1.966667 + value: {x: 3.350434, y: 3.350434, z: 3.350434} + - time: 2.000000 + value: {x: 3.381371, y: 3.381371, z: 3.381371} + - time: 2.033333 + value: {x: 3.411242, y: 3.411242, z: 3.411242} + - time: 2.066667 + value: {x: 3.439035, y: 3.439035, z: 3.439035} + - time: 2.100000 + value: {x: 3.464490, y: 3.464490, z: 3.464490} + - time: 2.133333 + value: {x: 3.487365, y: 3.487365, z: 3.487365} + - time: 2.166667 + value: {x: 3.508209, y: 3.508209, z: 3.508209} + - time: 2.200000 + value: {x: 3.527562, y: 3.527562, z: 3.527562} + - time: 2.266667 + value: {x: 3.565055, y: 3.565055, z: 3.565055} + - time: 2.333333 + value: {x: 3.602933, y: 3.602933, z: 3.602933} + - time: 2.366667 + value: {x: 3.621371, y: 3.621371, z: 3.621371} + - time: 2.400000 + value: {x: 3.639127, y: 3.639127, z: 3.639127} + - time: 2.433333 + value: {x: 3.656059, y: 3.656059, z: 3.656059} + - time: 2.500000 + value: {x: 3.688649, y: 3.688649, z: 3.688649} + - time: 2.533333 + value: {x: 3.704487, y: 3.704487, z: 3.704487} + - time: 2.566667 + value: {x: 3.719278, y: 3.719278, z: 3.719278} + - time: 2.600000 + value: {x: 3.733464, y: 3.733464, z: 3.733464} + - time: 2.666667 + value: {x: 3.761222, y: 3.761222, z: 3.761222} + - time: 2.700000 + value: {x: 3.774235, y: 3.774235, z: 3.774235} + - time: 2.733333 + value: {x: 3.786170, y: 3.786170, z: 3.786170} + - time: 2.766667 + value: {x: 3.797055, y: 3.797055, z: 3.797055} + - time: 2.800000 + value: {x: 3.807230, y: 3.807230, z: 3.807230} + - time: 2.900000 + value: {x: 3.836561, y: 3.836561, z: 3.836561} + - time: 2.933333 + value: {x: 3.846684, y: 3.846684, z: 3.846684} + - time: 2.966667 + value: {x: 3.858195, y: 3.858195, z: 3.858195} + - time: 3.000000 + value: {x: 3.871412, y: 3.871412, z: 3.871412} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_4: + position: + - time: 0.000000 + value: {x: -0.126325, y: 2.511905, z: 0.111827} + - time: 0.033333 + value: {x: -0.126325, y: 2.511905, z: 0.111827} + - time: 0.066667 + value: {x: 0.064208, y: 1.579751, z: 0.025949} + - time: 0.100000 + value: {x: 0.299330, y: 0.674692, z: 0.089586} + - time: 0.133333 + value: {x: 1.041762, y: 0.255545, z: 0.297675} + - time: 0.166667 + value: {x: 1.836089, y: 0.245855, z: 0.578722} + - time: 0.200000 + value: {x: 2.360210, y: 0.319772, z: 0.808463} + - time: 0.233333 + value: {x: 2.601320, y: 0.426117, z: 0.939898} + - time: 0.266667 + value: {x: 2.642742, y: 0.499509, z: 1.009367} + - time: 0.300000 + value: {x: 2.627699, y: 0.553920, z: 1.047393} + - time: 0.333333 + value: {x: 2.582126, y: 0.585831, z: 1.074171} + - time: 0.366667 + value: {x: 2.529869, y: 0.589038, z: 1.102308} + - time: 0.400000 + value: {x: 2.497332, y: 0.565903, z: 1.141454} + - time: 0.433333 + value: {x: 2.505937, y: 0.528958, z: 1.198942} + - time: 0.466667 + value: {x: 2.556732, y: 0.493758, z: 1.276302} + - time: 0.500000 + value: {x: 2.627065, y: 0.464843, z: 1.373769} + - time: 0.533333 + value: {x: 2.703245, y: 0.442501, z: 1.490552} + - time: 0.566667 + value: {x: 2.787259, y: 0.426264, z: 1.617309} + - time: 0.600000 + value: {x: 2.882385, y: 0.415872, z: 1.746869} + - time: 0.633333 + value: {x: 2.985073, y: 0.410200, z: 1.877231} + - time: 0.666667 + value: {x: 3.090095, y: 0.408475, z: 2.009900} + - time: 0.700000 + value: {x: 3.197168, y: 0.410400, z: 2.143800} + - time: 0.733333 + value: {x: 3.304784, y: 0.414895, z: 2.278418} + - time: 0.766667 + value: {x: 3.410175, y: 0.421432, z: 2.415235} + - time: 0.800000 + value: {x: 3.514782, y: 0.429325, z: 2.552550} + - time: 0.833333 + value: {x: 3.620335, y: 0.437982, z: 2.688612} + - time: 0.866667 + value: {x: 3.729106, y: 0.446951, z: 2.821410} + - time: 0.900000 + value: {x: 3.841421, y: 0.455889, z: 2.950471} + - time: 0.933333 + value: {x: 3.952726, y: 0.464562, z: 3.079125} + - time: 0.966667 + value: {x: 4.058526, y: 0.472790, z: 3.210714} + - time: 1.000000 + value: {x: 4.158576, y: 0.480544, z: 3.345271} + - time: 1.033333 + value: {x: 4.253216, y: 0.487736, z: 3.482433} + - time: 1.066667 + value: {x: 4.345205, y: 0.494372, z: 3.619954} + - time: 1.100000 + value: {x: 4.434270, y: 0.500524, z: 3.757930} + - time: 1.133333 + value: {x: 4.519837, y: 0.506246, z: 3.896685} + - time: 1.166667 + value: {x: 4.602245, y: 0.511592, z: 4.035773} + - time: 1.200000 + value: {x: 4.682436, y: 0.516742, z: 4.174358} + - time: 1.233333 + value: {x: 4.761318, y: 0.521859, z: 4.311582} + - time: 1.266667 + value: {x: 4.839673, y: 0.527130, z: 4.446669} + - time: 1.300000 + value: {x: 4.917683, y: 0.532751, z: 4.579277} + - time: 1.333333 + value: {x: 4.994936, y: 0.538927, z: 4.709500} + - time: 1.366667 + value: {x: 5.071362, y: 0.545856, z: 4.837143} + - time: 1.400000 + value: {x: 5.146475, y: 0.553725, z: 4.962307} + - time: 1.433333 + value: {x: 5.219191, y: 0.562701, z: 5.085520} + - time: 1.466667 + value: {x: 5.289038, y: 0.572925, z: 5.206810} + - time: 1.500000 + value: {x: 5.355539, y: 0.584507, z: 5.326185} + - time: 1.533333 + value: {x: 5.419416, y: 0.597518, z: 5.442720} + - time: 1.566667 + value: {x: 5.480780, y: 0.611985, z: 5.555944} + - time: 1.600000 + value: {x: 5.539316, y: 0.627900, z: 5.665720} + - time: 1.633333 + value: {x: 5.594782, y: 0.645218, z: 5.771893} + - time: 1.666667 + value: {x: 5.646969, y: 0.663862, z: 5.874342} + - time: 1.700000 + value: {x: 5.695566, y: 0.683771, z: 5.973005} + - time: 1.733333 + value: {x: 5.738979, y: 0.705395, z: 6.066933} + - time: 1.766667 + value: {x: 5.777611, y: 0.728059, z: 6.157043} + - time: 1.800000 + value: {x: 5.811520, y: 0.751560, z: 6.243414} + - time: 1.833333 + value: {x: 5.839962, y: 0.775953, z: 6.325716} + - time: 1.866667 + value: {x: 5.860683, y: 0.801359, z: 6.402954} + - time: 1.900000 + value: {x: 5.876549, y: 0.826858, z: 6.476532} + - time: 1.933333 + value: {x: 5.886059, y: 0.852546, z: 6.545824} + - time: 1.966667 + value: {x: 5.888079, y: 0.877833, z: 6.609346} + - time: 2.000000 + value: {x: 5.887545, y: 0.902422, z: 6.669680} + - time: 2.033333 + value: {x: 5.879139, y: 0.925148, z: 6.722326} + - time: 2.066667 + value: {x: 5.869726, y: 0.946479, z: 6.772038} + - time: 2.100000 + value: {x: 5.855749, y: 0.964898, z: 6.815319} + - time: 2.133333 + value: {x: 5.841419, y: 0.981740, z: 6.855946} + - time: 2.166667 + value: {x: 5.824526, y: 0.995229, z: 6.891171} + - time: 2.200000 + value: {x: 5.808392, y: 1.007958, z: 6.925045} + - time: 2.233333 + value: {x: 5.790592, y: 1.016971, z: 6.953911} + - time: 2.266667 + value: {x: 5.773870, y: 1.025648, z: 6.981897} + - time: 2.300000 + value: {x: 5.757080, y: 1.032166, z: 7.007082} + - time: 2.333333 + value: {x: 5.740765, y: 1.037434, z: 7.030376} + - time: 2.366667 + value: {x: 5.725552, y: 1.042486, z: 7.052839} + - time: 2.400000 + value: {x: 5.710600, y: 1.045721, z: 7.072950} + - time: 2.433333 + value: {x: 5.696589, y: 1.048508, z: 7.091959} + - time: 2.466667 + value: {x: 5.683662, y: 1.051174, z: 7.110142} + - time: 2.500000 + value: {x: 5.671591, y: 1.053255, z: 7.127062} + - time: 2.533333 + value: {x: 5.660301, y: 1.054651, z: 7.142607} + - time: 2.566667 + value: {x: 5.650047, y: 1.055986, z: 7.157297} + - time: 2.600000 + value: {x: 5.640797, y: 1.057255, z: 7.171101} + - time: 2.633333 + value: {x: 5.632515, y: 1.058454, z: 7.183983} + - time: 2.666667 + value: {x: 5.625044, y: 1.059271, z: 7.195658} + - time: 2.700000 + value: {x: 5.618462, y: 1.059987, z: 7.206331} + - time: 2.733333 + value: {x: 5.612761, y: 1.060652, z: 7.216022} + - time: 2.766667 + value: {x: 5.607897, y: 1.061261, z: 7.224691} + - time: 2.800000 + value: {x: 5.603830, y: 1.061808, z: 7.232313} + - time: 2.833333 + value: {x: 5.600519, y: 1.062288, z: 7.238853} + - time: 2.866667 + value: {x: 5.597919, y: 1.062694, z: 7.244278} + - time: 2.900000 + value: {x: 5.595984, y: 1.063021, z: 7.248552} + - time: 2.933333 + value: {x: 5.594664, y: 1.063262, z: 7.251646} + - time: 2.966667 + value: {x: 5.593910, y: 1.063411, z: 7.253529} + - time: 3.000000 + value: {x: 5.593670, y: 1.063463, z: 7.254164} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.301522, y: 0.301522, z: 0.301522} + - time: 0.033333 + value: {x: 0.301754, y: 0.301754, z: 0.301754} + - time: 0.066667 + value: {x: 0.357981, y: 0.357981, z: 0.357981} + - time: 0.100000 + value: {x: 0.426852, y: 0.426852, z: 0.426852} + - time: 0.133333 + value: {x: 0.501790, y: 0.501790, z: 0.501790} + - time: 0.166667 + value: {x: 0.573811, y: 0.573811, z: 0.573811} + - time: 0.200000 + value: {x: 0.655816, y: 0.655816, z: 0.655816} + - time: 0.233333 + value: {x: 0.747855, y: 0.747855, z: 0.747855} + - time: 0.266667 + value: {x: 0.846710, y: 0.846710, z: 0.846710} + - time: 0.300000 + value: {x: 0.951818, y: 0.951818, z: 0.951818} + - time: 0.333333 + value: {x: 1.062703, y: 1.062703, z: 1.062703} + - time: 0.366667 + value: {x: 1.178692, y: 1.178692, z: 1.178692} + - time: 0.400000 + value: {x: 1.298688, y: 1.298688, z: 1.298688} + - time: 0.433333 + value: {x: 1.421509, y: 1.421509, z: 1.421509} + - time: 0.466667 + value: {x: 1.546633, y: 1.546633, z: 1.546633} + - time: 0.500000 + value: {x: 1.674366, y: 1.674366, z: 1.674366} + - time: 0.533333 + value: {x: 1.805060, y: 1.805060, z: 1.805060} + - time: 0.566667 + value: {x: 1.938595, y: 1.938595, z: 1.938595} + - time: 0.600000 + value: {x: 2.074054, y: 2.074054, z: 2.074054} + - time: 0.633333 + value: {x: 2.210122, y: 2.210122, z: 2.210122} + - time: 0.666667 + value: {x: 2.345403, y: 2.345403, z: 2.345403} + - time: 0.700000 + value: {x: 2.477512, y: 2.477512, z: 2.477512} + - time: 0.733333 + value: {x: 2.604131, y: 2.604131, z: 2.604131} + - time: 0.766667 + value: {x: 2.723912, y: 2.723912, z: 2.723912} + - time: 0.800000 + value: {x: 2.837946, y: 2.837946, z: 2.837946} + - time: 0.833333 + value: {x: 2.948300, y: 2.948300, z: 2.948300} + - time: 0.866667 + value: {x: 3.056961, y: 3.056961, z: 3.056961} + - time: 0.900000 + value: {x: 3.164642, y: 3.164642, z: 3.164642} + - time: 0.933333 + value: {x: 3.271026, y: 3.271026, z: 3.271026} + - time: 0.966667 + value: {x: 3.375652, y: 3.375652, z: 3.375652} + - time: 1.000000 + value: {x: 3.477645, y: 3.477645, z: 3.477645} + - time: 1.033333 + value: {x: 3.577002, y: 3.577002, z: 3.577002} + - time: 1.066667 + value: {x: 3.674682, y: 3.674682, z: 3.674682} + - time: 1.100000 + value: {x: 3.771463, y: 3.771463, z: 3.771463} + - time: 1.133333 + value: {x: 3.866971, y: 3.866971, z: 3.866971} + - time: 1.166667 + value: {x: 3.959962, y: 3.959962, z: 3.959962} + - time: 1.200000 + value: {x: 4.049399, y: 4.049399, z: 4.049399} + - time: 1.233333 + value: {x: 4.134343, y: 4.134343, z: 4.134343} + - time: 1.266667 + value: {x: 4.213567, y: 4.213567, z: 4.213567} + - time: 1.300000 + value: {x: 4.286176, y: 4.286176, z: 4.286176} + - time: 1.333333 + value: {x: 4.352177, y: 4.352177, z: 4.352177} + - time: 1.366667 + value: {x: 4.412724, y: 4.412724, z: 4.412724} + - time: 1.400000 + value: {x: 4.469580, y: 4.469580, z: 4.469580} + - time: 1.433333 + value: {x: 4.524311, y: 4.524311, z: 4.524311} + - time: 1.466667 + value: {x: 4.577774, y: 4.577774, z: 4.577774} + - time: 1.500000 + value: {x: 4.629949, y: 4.629949, z: 4.629949} + - time: 1.533333 + value: {x: 4.679326, y: 4.679326, z: 4.679326} + - time: 1.566667 + value: {x: 4.723815, y: 4.723815, z: 4.723815} + - time: 1.600000 + value: {x: 4.762136, y: 4.762136, z: 4.762136} + - time: 1.633333 + value: {x: 4.794459, y: 4.794459, z: 4.794459} + - time: 1.666667 + value: {x: 4.821908, y: 4.821908, z: 4.821908} + - time: 1.700000 + value: {x: 4.845322, y: 4.845322, z: 4.845322} + - time: 1.733333 + value: {x: 4.865143, y: 4.865143, z: 4.865143} + - time: 1.766667 + value: {x: 4.882247, y: 4.882247, z: 4.882247} + - time: 1.800000 + value: {x: 4.897359, y: 4.897359, z: 4.897359} + - time: 1.833333 + value: {x: 4.910854, y: 4.910854, z: 4.910854} + - time: 1.866667 + value: {x: 4.922938, y: 4.922938, z: 4.922938} + - time: 1.900000 + value: {x: 4.933666, y: 4.933666, z: 4.933666} + - time: 1.933333 + value: {x: 4.942948, y: 4.942948, z: 4.942948} + - time: 1.966667 + value: {x: 4.950587, y: 4.950587, z: 4.950587} + - time: 2.000000 + value: {x: 4.956412, y: 4.956412, z: 4.956412} + - time: 2.033333 + value: {x: 4.960112, y: 4.960112, z: 4.960112} + - time: 2.066667 + value: {x: 4.961719, y: 4.961719, z: 4.961719} + - time: 2.100000 + value: {x: 4.961128, y: 4.961128, z: 4.961128} + - time: 2.133333 + value: {x: 4.958259, y: 4.958259, z: 4.958259} + - time: 2.166667 + value: {x: 4.952838, y: 4.952838, z: 4.952838} + - time: 2.200000 + value: {x: 4.945003, y: 4.945003, z: 4.945003} + - time: 2.233333 + value: {x: 4.934805, y: 4.934805, z: 4.934805} + - time: 2.266667 + value: {x: 4.922963, y: 4.922963, z: 4.922963} + - time: 2.300000 + value: {x: 4.910435, y: 4.910435, z: 4.910435} + - time: 2.333333 + value: {x: 4.898338, y: 4.898338, z: 4.898338} + - time: 2.366667 + value: {x: 4.887372, y: 4.887372, z: 4.887372} + - time: 2.400000 + value: {x: 4.877712, y: 4.877712, z: 4.877712} + - time: 2.433333 + value: {x: 4.868932, y: 4.868932, z: 4.868932} + - time: 2.466667 + value: {x: 4.860398, y: 4.860398, z: 4.860398} + - time: 2.500000 + value: {x: 4.852222, y: 4.852222, z: 4.852222} + - time: 2.533333 + value: {x: 4.843276, y: 4.843276, z: 4.843276} + - time: 2.566667 + value: {x: 4.832598, y: 4.832598, z: 4.832598} + - time: 2.633333 + value: {x: 4.809691, y: 4.809691, z: 4.809691} + - time: 2.666667 + value: {x: 4.798703, y: 4.798703, z: 4.798703} + - time: 2.700000 + value: {x: 4.788150, y: 4.788150, z: 4.788150} + - time: 2.733333 + value: {x: 4.777884, y: 4.777884, z: 4.777884} + - time: 2.766667 + value: {x: 4.768504, y: 4.768504, z: 4.768504} + - time: 2.800000 + value: {x: 4.761210, y: 4.761210, z: 4.761210} + - time: 2.833333 + value: {x: 4.757191, y: 4.757191, z: 4.757191} + - time: 2.866667 + value: {x: 4.757303, y: 4.757303, z: 4.757303} + - time: 2.900000 + value: {x: 4.762002, y: 4.762002, z: 4.762002} + - time: 2.933333 + value: {x: 4.771629, y: 4.771629, z: 4.771629} + - time: 2.966667 + value: {x: 4.786287, y: 4.786287, z: 4.786287} + - time: 3.000000 + value: {x: 4.805818, y: 4.805818, z: 4.805818} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_5: + position: + - time: 0.000000 + value: {x: -0.048261, y: 2.511905, z: 0.161983} + - time: 0.033333 + value: {x: -0.048261, y: 2.511905, z: 0.161983} + - time: 0.066667 + value: {x: 0.060458, y: 1.579751, z: 0.008867} + - time: 0.100000 + value: {x: 0.251484, y: 0.674692, z: 0.051554} + - time: 0.133333 + value: {x: 0.840212, y: 0.255545, z: 0.241194} + - time: 0.166667 + value: {x: 1.538933, y: 0.245855, z: 0.392116} + - time: 0.200000 + value: {x: 2.042172, y: 0.319772, z: 0.479038} + - time: 0.233333 + value: {x: 2.286804, y: 0.426117, z: 0.542162} + - time: 0.266667 + value: {x: 2.362504, y: 0.499509, z: 0.569023} + - time: 0.300000 + value: {x: 2.376536, y: 0.553920, z: 0.591313} + - time: 0.333333 + value: {x: 2.362002, y: 0.585831, z: 0.611367} + - time: 0.366667 + value: {x: 2.346419, y: 0.589038, z: 0.625660} + - time: 0.400000 + value: {x: 2.354343, y: 0.565903, z: 0.636338} + - time: 0.433333 + value: {x: 2.403475, y: 0.528958, z: 0.649976} + - time: 0.466667 + value: {x: 2.493901, y: 0.493758, z: 0.671634} + - time: 0.500000 + value: {x: 2.610992, y: 0.464843, z: 0.701500} + - time: 0.533333 + value: {x: 2.746242, y: 0.442501, z: 0.736685} + - time: 0.566667 + value: {x: 2.893524, y: 0.426264, z: 0.775902} + - time: 0.600000 + value: {x: 3.048553, y: 0.415872, z: 0.820098} + - time: 0.633333 + value: {x: 3.209294, y: 0.410200, z: 0.864006} + - time: 0.666667 + value: {x: 3.374067, y: 0.408475, z: 0.906418} + - time: 0.700000 + value: {x: 3.541885, y: 0.410400, z: 0.947043} + - time: 0.733333 + value: {x: 3.710538, y: 0.414895, z: 0.988007} + - time: 0.766667 + value: {x: 3.878880, y: 0.421432, z: 1.030900} + - time: 0.800000 + value: {x: 4.046546, y: 0.429325, z: 1.075358} + - time: 0.833333 + value: {x: 4.212913, y: 0.437982, z: 1.122109} + - time: 0.866667 + value: {x: 4.377421, y: 0.446951, z: 1.172054} + - time: 0.900000 + value: {x: 4.540609, y: 0.455889, z: 1.223247} + - time: 0.933333 + value: {x: 4.702057, y: 0.464562, z: 1.276413} + - time: 0.966667 + value: {x: 4.861850, y: 0.472789, z: 1.331061} + - time: 1.000000 + value: {x: 5.020525, y: 0.480544, z: 1.385389} + - time: 1.033333 + value: {x: 5.178491, y: 0.487736, z: 1.438082} + - time: 1.066667 + value: {x: 5.336128, y: 0.494372, z: 1.487852} + - time: 1.100000 + value: {x: 5.493096, y: 0.500524, z: 1.535340} + - time: 1.133333 + value: {x: 5.648718, y: 0.506246, z: 1.582106} + - time: 1.166667 + value: {x: 5.801842, y: 0.511592, z: 1.630795} + - time: 1.200000 + value: {x: 5.952461, y: 0.516742, z: 1.681182} + - time: 1.233333 + value: {x: 6.100578, y: 0.521859, z: 1.732902} + - time: 1.266667 + value: {x: 6.245653, y: 0.527129, z: 1.787005} + - time: 1.300000 + value: {x: 6.387196, y: 0.532751, z: 1.844353} + - time: 1.333333 + value: {x: 6.525392, y: 0.538927, z: 1.903931} + - time: 1.366667 + value: {x: 6.660671, y: 0.545856, z: 1.964037} + - time: 1.400000 + value: {x: 6.793255, y: 0.553725, z: 2.023456} + - time: 1.433333 + value: {x: 6.923058, y: 0.562701, z: 2.081717} + - time: 1.466667 + value: {x: 7.049688, y: 0.572925, z: 2.139127} + - time: 1.500000 + value: {x: 7.172812, y: 0.584507, z: 2.195744} + - time: 1.533333 + value: {x: 7.292255, y: 0.597518, z: 2.251211} + - time: 1.566667 + value: {x: 7.407921, y: 0.611985, z: 2.304913} + - time: 1.600000 + value: {x: 7.519566, y: 0.627900, z: 2.356643} + - time: 1.633333 + value: {x: 7.626945, y: 0.645218, z: 2.406273} + - time: 1.666667 + value: {x: 7.729843, y: 0.663862, z: 2.453756} + - time: 1.700000 + value: {x: 7.827991, y: 0.683771, z: 2.499131} + - time: 1.733333 + value: {x: 7.919628, y: 0.705395, z: 2.542159} + - time: 1.766667 + value: {x: 8.005566, y: 0.728059, z: 2.583476} + - time: 1.800000 + value: {x: 8.085842, y: 0.751560, z: 2.623243} + - time: 1.833333 + value: {x: 8.159695, y: 0.775953, z: 2.661474} + - time: 1.866667 + value: {x: 8.224880, y: 0.801359, z: 2.697965} + - time: 1.900000 + value: {x: 8.284279, y: 0.826858, z: 2.733195} + - time: 1.933333 + value: {x: 8.336430, y: 0.852546, z: 2.767051} + - time: 1.966667 + value: {x: 8.379398, y: 0.877833, z: 2.799347} + - time: 2.000000 + value: {x: 8.418430, y: 0.902422, z: 2.830508} + - time: 2.033333 + value: {x: 8.446720, y: 0.925148, z: 2.859303} + - time: 2.066667 + value: {x: 8.472324, y: 0.946478, z: 2.886888} + - time: 2.100000 + value: {x: 8.490322, y: 0.964898, z: 2.912316} + - time: 2.133333 + value: {x: 8.506294, y: 0.981739, z: 2.936548} + - time: 2.166667 + value: {x: 8.516788, y: 0.995229, z: 2.958747} + - time: 2.200000 + value: {x: 8.526936, y: 1.007958, z: 2.980121} + - time: 2.233333 + value: {x: 8.532536, y: 1.016971, z: 2.999441} + - time: 2.266667 + value: {x: 8.538345, y: 1.025648, z: 3.018083} + - time: 2.300000 + value: {x: 8.542278, y: 1.032166, z: 3.035289} + - time: 2.333333 + value: {x: 8.545326, y: 1.037434, z: 3.051415} + - time: 2.366667 + value: {x: 8.548634, y: 1.042486, z: 3.066878} + - time: 2.400000 + value: {x: 8.550625, y: 1.045721, z: 3.081010} + - time: 2.433333 + value: {x: 8.552582, y: 1.048508, z: 3.094357} + - time: 2.466667 + value: {x: 8.554798, y: 1.051174, z: 3.107040} + - time: 2.500000 + value: {x: 8.556831, y: 1.053255, z: 3.118851} + - time: 2.533333 + value: {x: 8.558559, y: 1.054651, z: 3.129735} + - time: 2.566667 + value: {x: 8.560486, y: 1.055986, z: 3.139948} + - time: 2.600000 + value: {x: 8.562569, y: 1.057255, z: 3.149477} + - time: 2.633333 + value: {x: 8.564774, y: 1.058454, z: 3.158311} + - time: 2.666667 + value: {x: 8.566792, y: 1.059271, z: 3.166295} + - time: 2.700000 + value: {x: 8.568829, y: 1.059987, z: 3.173548} + - time: 2.733333 + value: {x: 8.570862, y: 1.060652, z: 3.180086} + - time: 2.766667 + value: {x: 8.572857, y: 1.061261, z: 3.185895} + - time: 2.800000 + value: {x: 8.574760, y: 1.061808, z: 3.190966} + - time: 2.833333 + value: {x: 8.576519, y: 1.062288, z: 3.195285} + - time: 2.866667 + value: {x: 8.578083, y: 1.062694, z: 3.198845} + - time: 2.900000 + value: {x: 8.579395, y: 1.063021, z: 3.201630} + - time: 2.933333 + value: {x: 8.580406, y: 1.063262, z: 3.203632} + - time: 2.966667 + value: {x: 8.581051, y: 1.063412, z: 3.204841} + - time: 3.000000 + value: {x: 8.581284, y: 1.063463, z: 3.205247} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.433996, y: 0.433996, z: 0.433996} + - time: 0.033333 + value: {x: 0.434062, y: 0.434062, z: 0.434062} + - time: 0.066667 + value: {x: 0.492375, y: 0.492375, z: 0.492375} + - time: 0.100000 + value: {x: 0.562425, y: 0.562425, z: 0.562425} + - time: 0.133333 + value: {x: 0.637466, y: 0.637466, z: 0.637466} + - time: 0.166667 + value: {x: 0.712900, y: 0.712900, z: 0.712900} + - time: 0.200000 + value: {x: 0.793222, y: 0.793222, z: 0.793222} + - time: 0.233333 + value: {x: 0.883611, y: 0.883611, z: 0.883611} + - time: 0.266667 + value: {x: 0.981634, y: 0.981634, z: 0.981634} + - time: 0.300000 + value: {x: 1.085783, y: 1.085783, z: 1.085783} + - time: 0.333333 + value: {x: 1.195411, y: 1.195411, z: 1.195411} + - time: 0.366667 + value: {x: 1.309737, y: 1.309737, z: 1.309737} + - time: 0.400000 + value: {x: 1.427746, y: 1.427746, z: 1.427746} + - time: 0.433333 + value: {x: 1.548343, y: 1.548343, z: 1.548343} + - time: 0.466667 + value: {x: 1.670683, y: 1.670683, z: 1.670683} + - time: 0.500000 + value: {x: 1.794318, y: 1.794318, z: 1.794318} + - time: 0.533333 + value: {x: 1.918892, y: 1.918892, z: 1.918892} + - time: 0.566667 + value: {x: 2.044187, y: 2.044187, z: 2.044187} + - time: 0.600000 + value: {x: 2.170067, y: 2.170067, z: 2.170067} + - time: 0.633333 + value: {x: 2.296263, y: 2.296263, z: 2.296263} + - time: 0.666667 + value: {x: 2.422786, y: 2.422786, z: 2.422786} + - time: 0.700000 + value: {x: 2.549701, y: 2.549701, z: 2.549701} + - time: 0.733333 + value: {x: 2.675850, y: 2.675850, z: 2.675850} + - time: 0.766667 + value: {x: 2.800144, y: 2.800144, z: 2.800144} + - time: 0.800000 + value: {x: 2.923013, y: 2.923013, z: 2.923013} + - time: 0.833333 + value: {x: 3.043679, y: 3.043679, z: 3.043679} + - time: 0.866667 + value: {x: 3.159264, y: 3.159264, z: 3.159264} + - time: 0.900000 + value: {x: 3.266953, y: 3.266953, z: 3.266953} + - time: 0.933333 + value: {x: 3.365924, y: 3.365924, z: 3.365924} + - time: 0.966667 + value: {x: 3.457407, y: 3.457407, z: 3.457407} + - time: 1.000000 + value: {x: 3.545763, y: 3.545763, z: 3.545763} + - time: 1.033333 + value: {x: 3.636157, y: 3.636157, z: 3.636157} + - time: 1.066667 + value: {x: 3.731247, y: 3.731247, z: 3.731247} + - time: 1.100000 + value: {x: 3.828706, y: 3.828706, z: 3.828706} + - time: 1.133333 + value: {x: 3.923250, y: 3.923250, z: 3.923250} + - time: 1.166667 + value: {x: 4.010707, y: 4.010707, z: 4.010707} + - time: 1.200000 + value: {x: 4.092420, y: 4.092420, z: 4.092420} + - time: 1.233333 + value: {x: 4.172991, y: 4.172991, z: 4.172991} + - time: 1.266667 + value: {x: 4.255078, y: 4.255078, z: 4.255078} + - time: 1.300000 + value: {x: 4.338442, y: 4.338442, z: 4.338442} + - time: 1.333333 + value: {x: 4.421053, y: 4.421053, z: 4.421053} + - time: 1.366667 + value: {x: 4.499966, y: 4.499966, z: 4.499966} + - time: 1.400000 + value: {x: 4.572529, y: 4.572529, z: 4.572529} + - time: 1.433333 + value: {x: 4.637967, y: 4.637967, z: 4.637967} + - time: 1.466667 + value: {x: 4.697903, y: 4.697903, z: 4.697903} + - time: 1.533333 + value: {x: 4.812864, y: 4.812864, z: 4.812864} + - time: 1.566667 + value: {x: 4.871661, y: 4.871661, z: 4.871661} + - time: 1.600000 + value: {x: 4.931612, y: 4.931612, z: 4.931612} + - time: 1.633333 + value: {x: 4.991971, y: 4.991971, z: 4.991971} + - time: 1.666667 + value: {x: 5.051548, y: 5.051548, z: 5.051548} + - time: 1.700000 + value: {x: 5.109115, y: 5.109115, z: 5.109115} + - time: 1.733333 + value: {x: 5.163886, y: 5.163886, z: 5.163886} + - time: 1.766667 + value: {x: 5.215611, y: 5.215611, z: 5.215611} + - time: 1.800000 + value: {x: 5.264577, y: 5.264577, z: 5.264577} + - time: 1.833333 + value: {x: 5.311313, y: 5.311313, z: 5.311313} + - time: 1.866667 + value: {x: 5.356297, y: 5.356297, z: 5.356297} + - time: 1.900000 + value: {x: 5.399425, y: 5.399425, z: 5.399425} + - time: 1.933333 + value: {x: 5.440077, y: 5.440077, z: 5.440077} + - time: 1.966667 + value: {x: 5.477325, y: 5.477325, z: 5.477325} + - time: 2.000000 + value: {x: 5.510968, y: 5.510968, z: 5.510968} + - time: 2.033333 + value: {x: 5.541395, y: 5.541395, z: 5.541395} + - time: 2.066667 + value: {x: 5.570238, y: 5.570238, z: 5.570238} + - time: 2.100000 + value: {x: 5.598402, y: 5.598402, z: 5.598402} + - time: 2.166667 + value: {x: 5.654224, y: 5.654224, z: 5.654224} + - time: 2.200000 + value: {x: 5.681772, y: 5.681772, z: 5.681772} + - time: 2.233333 + value: {x: 5.708519, y: 5.708519, z: 5.708519} + - time: 2.266667 + value: {x: 5.734069, y: 5.734069, z: 5.734069} + - time: 2.300000 + value: {x: 5.758298, y: 5.758298, z: 5.758298} + - time: 2.333333 + value: {x: 5.781407, y: 5.781407, z: 5.781407} + - time: 2.366667 + value: {x: 5.803998, y: 5.803998, z: 5.803998} + - time: 2.400000 + value: {x: 5.826326, y: 5.826326, z: 5.826326} + - time: 2.433333 + value: {x: 5.847810, y: 5.847810, z: 5.847810} + - time: 2.466667 + value: {x: 5.867540, y: 5.867540, z: 5.867540} + - time: 2.500000 + value: {x: 5.884679, y: 5.884679, z: 5.884679} + - time: 2.533333 + value: {x: 5.897405, y: 5.897405, z: 5.897405} + - time: 2.566667 + value: {x: 5.904590, y: 5.904590, z: 5.904590} + - time: 2.600000 + value: {x: 5.907196, y: 5.907196, z: 5.907196} + - time: 2.633333 + value: {x: 5.906499, y: 5.906499, z: 5.906499} + - time: 2.666667 + value: {x: 5.903857, y: 5.903857, z: 5.903857} + - time: 2.700000 + value: {x: 5.900634, y: 5.900634, z: 5.900634} + - time: 2.733333 + value: {x: 5.898395, y: 5.898395, z: 5.898395} + - time: 2.766667 + value: {x: 5.898626, y: 5.898626, z: 5.898626} + - time: 2.800000 + value: {x: 5.902270, y: 5.902270, z: 5.902270} + - time: 2.833333 + value: {x: 5.909544, y: 5.909544, z: 5.909544} + - time: 2.866667 + value: {x: 5.920023, y: 5.920023, z: 5.920023} + - time: 2.900000 + value: {x: 5.933000, y: 5.933000, z: 5.933000} + - time: 2.933333 + value: {x: 5.947899, y: 5.947899, z: 5.947899} + - time: 2.966667 + value: {x: 5.964719, y: 5.964719, z: 5.964719} + - time: 3.000000 + value: {x: 5.984208, y: 5.984208, z: 5.984208} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_6: + position: + - time: 0.000000 + value: {x: 0.044454, y: 2.511905, z: 0.162168} + - time: 0.033333 + value: {x: 0.044454, y: 2.511905, z: 0.162168} + - time: 0.066667 + value: {x: 0.059847, y: 1.579751, z: -0.005404} + - time: 0.100000 + value: {x: 0.265363, y: 0.674692, z: 0.032960} + - time: 0.133333 + value: {x: 0.933473, y: 0.255545, z: 0.220508} + - time: 0.166667 + value: {x: 1.664209, y: 0.245855, z: 0.266009} + - time: 0.200000 + value: {x: 2.172611, y: 0.319772, z: 0.248609} + - time: 0.233333 + value: {x: 2.425132, y: 0.426117, z: 0.229851} + - time: 0.266667 + value: {x: 2.503917, y: 0.499509, z: 0.214256} + - time: 0.300000 + value: {x: 2.522024, y: 0.553920, z: 0.198073} + - time: 0.333333 + value: {x: 2.511295, y: 0.585831, z: 0.178205} + - time: 0.366667 + value: {x: 2.496849, y: 0.589038, z: 0.155083} + - time: 0.400000 + value: {x: 2.503079, y: 0.565903, z: 0.129510} + - time: 0.433333 + value: {x: 2.549143, y: 0.528958, z: 0.100965} + - time: 0.466667 + value: {x: 2.636869, y: 0.493758, z: 0.069148} + - time: 0.500000 + value: {x: 2.752421, y: 0.464843, z: 0.034432} + - time: 0.533333 + value: {x: 2.886762, y: 0.442502, z: -0.002585} + - time: 0.566667 + value: {x: 3.033929, y: 0.426264, z: -0.040158} + - time: 0.600000 + value: {x: 3.190320, y: 0.415872, z: -0.077511} + - time: 0.633333 + value: {x: 3.352205, y: 0.410200, z: -0.114175} + - time: 0.666667 + value: {x: 3.517510, y: 0.408475, z: -0.150335} + - time: 0.700000 + value: {x: 3.684974, y: 0.410400, z: -0.187057} + - time: 0.733333 + value: {x: 3.853222, y: 0.414895, z: -0.224436} + - time: 0.766667 + value: {x: 4.021963, y: 0.421432, z: -0.261329} + - time: 0.800000 + value: {x: 4.190812, y: 0.429325, z: -0.297249} + - time: 0.833333 + value: {x: 4.359334, y: 0.437982, z: -0.332696} + - time: 0.866667 + value: {x: 4.527289, y: 0.446951, z: -0.367806} + - time: 0.900000 + value: {x: 4.694583, y: 0.455889, z: -0.402148} + - time: 0.933333 + value: {x: 4.861094, y: 0.464562, z: -0.435633} + - time: 0.966667 + value: {x: 5.026629, y: 0.472790, z: -0.468719} + - time: 1.000000 + value: {x: 5.191003, y: 0.480544, z: -0.501720} + - time: 1.033333 + value: {x: 5.354151, y: 0.487736, z: -0.534539} + - time: 1.066667 + value: {x: 5.515985, y: 0.494372, z: -0.567128} + - time: 1.100000 + value: {x: 5.676303, y: 0.500524, z: -0.600032} + - time: 1.133333 + value: {x: 5.835088, y: 0.506246, z: -0.632871} + - time: 1.166667 + value: {x: 5.992207, y: 0.511592, z: -0.665559} + - time: 1.200000 + value: {x: 6.147575, y: 0.516742, z: -0.698053} + - time: 1.233333 + value: {x: 6.301035, y: 0.521859, z: -0.730523} + - time: 1.266667 + value: {x: 6.452381, y: 0.527129, z: -0.763288} + - time: 1.300000 + value: {x: 6.601397, y: 0.532751, z: -0.796613} + - time: 1.333333 + value: {x: 6.747898, y: 0.538927, z: -0.830505} + - time: 1.366667 + value: {x: 6.891739, y: 0.545856, z: -0.864696} + - time: 1.400000 + value: {x: 7.032804, y: 0.553725, z: -0.898660} + - time: 1.433333 + value: {x: 7.170927, y: 0.562701, z: -0.932000} + - time: 1.466667 + value: {x: 7.305917, y: 0.572925, z: -0.964319} + - time: 1.500000 + value: {x: 7.437399, y: 0.584507, z: -0.996023} + - time: 1.533333 + value: {x: 7.565023, y: 0.597518, z: -1.027385} + - time: 1.566667 + value: {x: 7.688450, y: 0.611985, z: -1.058529} + - time: 1.600000 + value: {x: 7.807352, y: 0.627900, z: -1.089562} + - time: 1.633333 + value: {x: 7.921434, y: 0.645218, z: -1.120568} + - time: 1.666667 + value: {x: 8.030468, y: 0.663862, z: -1.151577} + - time: 1.700000 + value: {x: 8.134209, y: 0.683771, z: -1.182588} + - time: 1.733333 + value: {x: 8.230862, y: 0.705395, z: -1.213730} + - time: 1.766667 + value: {x: 8.321491, y: 0.728059, z: -1.244718} + - time: 1.800000 + value: {x: 8.406208, y: 0.751560, z: -1.275439} + - time: 1.833333 + value: {x: 8.484299, y: 0.775952, z: -1.305856} + - time: 1.866667 + value: {x: 8.553574, y: 0.801359, z: -1.335849} + - time: 1.900000 + value: {x: 8.617004, y: 0.826858, z: -1.365181} + - time: 1.933333 + value: {x: 8.673153, y: 0.852546, z: -1.393808} + - time: 1.966667 + value: {x: 8.720161, y: 0.877833, z: -1.421531} + - time: 2.000000 + value: {x: 8.763172, y: 0.902422, z: -1.448428} + - time: 2.033333 + value: {x: 8.795303, y: 0.925148, z: -1.474144} + - time: 2.066667 + value: {x: 8.824627, y: 0.946478, z: -1.498923} + - time: 2.100000 + value: {x: 8.846184, y: 0.964897, z: -1.522358} + - time: 2.133333 + value: {x: 8.865578, y: 0.981740, z: -1.544811} + - time: 2.166667 + value: {x: 8.879288, y: 0.995229, z: -1.565853} + - time: 2.200000 + value: {x: 8.892540, y: 1.007958, z: -1.586087} + - time: 2.233333 + value: {x: 8.901012, y: 1.016971, z: -1.604831} + - time: 2.266667 + value: {x: 8.909595, y: 1.025648, z: -1.622849} + - time: 2.300000 + value: {x: 8.916092, y: 1.032166, z: -1.639722} + - time: 2.333333 + value: {x: 8.921558, y: 1.037434, z: -1.655646} + - time: 2.366667 + value: {x: 8.927177, y: 1.042487, z: -1.670849} + - time: 2.400000 + value: {x: 8.931278, y: 1.045721, z: -1.684962} + - time: 2.433333 + value: {x: 8.935234, y: 1.048508, z: -1.698288} + - time: 2.466667 + value: {x: 8.939342, y: 1.051174, z: -1.710890} + - time: 2.500000 + value: {x: 8.943130, y: 1.053255, z: -1.722659} + - time: 2.533333 + value: {x: 8.946472, y: 1.054651, z: -1.733564} + - time: 2.566667 + value: {x: 8.949913, y: 1.055986, z: -1.743745} + - time: 2.600000 + value: {x: 8.953403, y: 1.057255, z: -1.753194} + - time: 2.633333 + value: {x: 8.956902, y: 1.058454, z: -1.761907} + - time: 2.666667 + value: {x: 8.960094, y: 1.059271, z: -1.769804} + - time: 2.700000 + value: {x: 8.963184, y: 1.059987, z: -1.776952} + - time: 2.733333 + value: {x: 8.966179, y: 1.060652, z: -1.783357} + - time: 2.766667 + value: {x: 8.969017, y: 1.061261, z: -1.789017} + - time: 2.800000 + value: {x: 8.971657, y: 1.061808, z: -1.793928} + - time: 2.833333 + value: {x: 8.974041, y: 1.062288, z: -1.798088} + - time: 2.866667 + value: {x: 8.976120, y: 1.062694, z: -1.801495} + - time: 2.900000 + value: {x: 8.977833, y: 1.063021, z: -1.804146} + - time: 2.933333 + value: {x: 8.979134, y: 1.063262, z: -1.806041} + - time: 2.966667 + value: {x: 8.979954, y: 1.063411, z: -1.807178} + - time: 3.000000 + value: {x: 8.980244, y: 1.063463, z: -1.807556} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.403437, y: 0.403437, z: 0.403437} + - time: 0.033333 + value: {x: 0.403337, y: 0.403337, z: 0.403337} + - time: 0.066667 + value: {x: 0.455555, y: 0.455555, z: 0.455555} + - time: 0.100000 + value: {x: 0.519316, y: 0.519316, z: 0.519316} + - time: 0.133333 + value: {x: 0.587359, y: 0.587359, z: 0.587359} + - time: 0.166667 + value: {x: 0.654738, y: 0.654738, z: 0.654738} + - time: 0.200000 + value: {x: 0.727301, y: 0.727301, z: 0.727301} + - time: 0.233333 + value: {x: 0.809459, y: 0.809459, z: 0.809459} + - time: 0.266667 + value: {x: 0.898204, y: 0.898204, z: 0.898204} + - time: 0.300000 + value: {x: 0.992213, y: 0.992213, z: 0.992213} + - time: 0.333333 + value: {x: 1.090932, y: 1.090932, z: 1.090932} + - time: 0.366667 + value: {x: 1.193918, y: 1.193918, z: 1.193918} + - time: 0.400000 + value: {x: 1.300678, y: 1.300678, z: 1.300678} + - time: 0.433333 + value: {x: 1.410673, y: 1.410673, z: 1.410673} + - time: 0.466667 + value: {x: 1.523385, y: 1.523385, z: 1.523385} + - time: 0.500000 + value: {x: 1.638298, y: 1.638298, z: 1.638298} + - time: 0.533333 + value: {x: 1.754689, y: 1.754689, z: 1.754689} + - time: 0.566667 + value: {x: 1.871646, y: 1.871646, z: 1.871646} + - time: 0.600000 + value: {x: 1.988269, y: 1.988269, z: 1.988269} + - time: 0.666667 + value: {x: 2.220507, y: 2.220507, z: 2.220507} + - time: 0.700000 + value: {x: 2.337766, y: 2.337766, z: 2.337766} + - time: 0.733333 + value: {x: 2.456445, y: 2.456445, z: 2.456445} + - time: 0.766667 + value: {x: 2.575432, y: 2.575432, z: 2.575432} + - time: 0.800000 + value: {x: 2.693027, y: 2.693027, z: 2.693027} + - time: 0.833333 + value: {x: 2.807334, y: 2.807334, z: 2.807334} + - time: 0.866667 + value: {x: 2.916367, y: 2.916367, z: 2.916367} + - time: 0.900000 + value: {x: 3.018884, y: 3.018884, z: 3.018884} + - time: 0.933333 + value: {x: 3.115234, y: 3.115234, z: 3.115234} + - time: 0.966667 + value: {x: 3.207501, y: 3.207501, z: 3.207501} + - time: 1.000000 + value: {x: 3.299367, y: 3.299367, z: 3.299367} + - time: 1.033333 + value: {x: 3.392908, y: 3.392908, z: 3.392908} + - time: 1.066667 + value: {x: 3.487388, y: 3.487388, z: 3.487388} + - time: 1.100000 + value: {x: 3.581133, y: 3.581133, z: 3.581133} + - time: 1.133333 + value: {x: 3.672912, y: 3.672912, z: 3.672912} + - time: 1.166667 + value: {x: 3.761797, y: 3.761797, z: 3.761797} + - time: 1.200000 + value: {x: 3.847790, y: 3.847790, z: 3.847790} + - time: 1.233333 + value: {x: 3.931377, y: 3.931377, z: 3.931377} + - time: 1.266667 + value: {x: 4.013148, y: 4.013148, z: 4.013148} + - time: 1.300000 + value: {x: 4.093936, y: 4.093936, z: 4.093936} + - time: 1.333333 + value: {x: 4.174091, y: 4.174091, z: 4.174091} + - time: 1.366667 + value: {x: 4.253261, y: 4.253261, z: 4.253261} + - time: 1.400000 + value: {x: 4.330908, y: 4.330908, z: 4.330908} + - time: 1.433333 + value: {x: 4.407009, y: 4.407009, z: 4.407009} + - time: 1.466667 + value: {x: 4.481755, y: 4.481755, z: 4.481755} + - time: 1.500000 + value: {x: 4.555429, y: 4.555429, z: 4.555429} + - time: 1.533333 + value: {x: 4.627988, y: 4.627988, z: 4.627988} + - time: 1.566667 + value: {x: 4.699385, y: 4.699385, z: 4.699385} + - time: 1.600000 + value: {x: 4.769542, y: 4.769542, z: 4.769542} + - time: 1.666667 + value: {x: 4.907739, y: 4.907739, z: 4.907739} + - time: 1.700000 + value: {x: 4.977952, y: 4.977952, z: 4.977952} + - time: 1.733333 + value: {x: 5.048763, y: 5.048763, z: 5.048763} + - time: 1.766667 + value: {x: 5.118735, y: 5.118735, z: 5.118735} + - time: 1.800000 + value: {x: 5.186228, y: 5.186228, z: 5.186228} + - time: 1.833333 + value: {x: 5.249889, y: 5.249889, z: 5.249889} + - time: 1.866667 + value: {x: 5.309145, y: 5.309145, z: 5.309145} + - time: 1.900000 + value: {x: 5.365071, y: 5.365071, z: 5.365071} + - time: 1.933333 + value: {x: 5.419128, y: 5.419128, z: 5.419128} + - time: 2.066667 + value: {x: 5.632968, y: 5.632968, z: 5.632968} + - time: 2.100000 + value: {x: 5.685646, y: 5.685646, z: 5.685646} + - time: 2.133333 + value: {x: 5.736590, y: 5.736590, z: 5.736590} + - time: 2.166667 + value: {x: 5.785072, y: 5.785072, z: 5.785072} + - time: 2.200000 + value: {x: 5.830723, y: 5.830723, z: 5.830723} + - time: 2.233333 + value: {x: 5.873854, y: 5.873854, z: 5.873854} + - time: 2.266667 + value: {x: 5.914926, y: 5.914926, z: 5.914926} + - time: 2.300000 + value: {x: 5.954717, y: 5.954717, z: 5.954717} + - time: 2.333333 + value: {x: 5.993314, y: 5.993314, z: 5.993314} + - time: 2.366667 + value: {x: 6.030399, y: 6.030399, z: 6.030399} + - time: 2.400000 + value: {x: 6.065735, y: 6.065735, z: 6.065735} + - time: 2.433333 + value: {x: 6.098712, y: 6.098712, z: 6.098712} + - time: 2.466667 + value: {x: 6.129302, y: 6.129302, z: 6.129302} + - time: 2.500000 + value: {x: 6.158094, y: 6.158094, z: 6.158094} + - time: 2.533333 + value: {x: 6.184272, y: 6.184272, z: 6.184272} + - time: 2.566667 + value: {x: 6.206616, y: 6.206616, z: 6.206616} + - time: 2.600000 + value: {x: 6.225320, y: 6.225320, z: 6.225320} + - time: 2.633333 + value: {x: 6.240748, y: 6.240748, z: 6.240748} + - time: 2.666667 + value: {x: 6.253485, y: 6.253485, z: 6.253485} + - time: 2.700000 + value: {x: 6.264190, y: 6.264190, z: 6.264190} + - time: 2.733333 + value: {x: 6.273602, y: 6.273602, z: 6.273602} + - time: 2.800000 + value: {x: 6.291079, y: 6.291079, z: 6.291079} + - time: 2.833333 + value: {x: 6.300060, y: 6.300060, z: 6.300060} + - time: 2.900000 + value: {x: 6.318638, y: 6.318638, z: 6.318638} + - time: 2.933333 + value: {x: 6.328232, y: 6.328232, z: 6.328232} + - time: 2.966667 + value: {x: 6.338566, y: 6.338566, z: 6.338566} + - time: 3.000000 + value: {x: 6.350088, y: 6.350088, z: 6.350088} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_7: + position: + - time: 0.000000 + value: {x: 0.122095, y: 2.511905, z: 0.112763} + - time: 0.033333 + value: {x: 0.122095, y: 2.511905, z: 0.112763} + - time: 0.066667 + value: {x: 0.052144, y: 1.579751, z: -0.031766} + - time: 0.100000 + value: {x: 0.264886, y: 0.674691, z: -0.088706} + - time: 0.133333 + value: {x: 0.948052, y: 0.255545, z: -0.264654} + - time: 0.166667 + value: {x: 1.577329, y: 0.245855, z: -0.628242} + - time: 0.200000 + value: {x: 1.958344, y: 0.319771, z: -0.955615} + - time: 0.233333 + value: {x: 2.141917, y: 0.426117, z: -1.127158} + - time: 0.266667 + value: {x: 2.191439, y: 0.499509, z: -1.191712} + - time: 0.300000 + value: {x: 2.189706, y: 0.553920, z: -1.224097} + - time: 0.333333 + value: {x: 2.165477, y: 0.585831, z: -1.240199} + - time: 0.366667 + value: {x: 2.141283, y: 0.589037, z: -1.251889} + - time: 0.400000 + value: {x: 2.135234, y: 0.565902, z: -1.274583} + - time: 0.433333 + value: {x: 2.162733, y: 0.528958, z: -1.319470} + - time: 0.466667 + value: {x: 2.224353, y: 0.493758, z: -1.388641} + - time: 0.500000 + value: {x: 2.308673, y: 0.464843, z: -1.474334} + - time: 0.533333 + value: {x: 2.407650, y: 0.442501, z: -1.571989} + - time: 0.566667 + value: {x: 2.514207, y: 0.426263, z: -1.680094} + - time: 0.600000 + value: {x: 2.623435, y: 0.415872, z: -1.798486} + - time: 0.633333 + value: {x: 2.732848, y: 0.410200, z: -1.924338} + - time: 0.666667 + value: {x: 2.841767, y: 0.408474, z: -2.055456} + - time: 0.700000 + value: {x: 2.950333, y: 0.410400, z: -2.190195} + - time: 0.733333 + value: {x: 3.059750, y: 0.414894, z: -2.325343} + - time: 0.766667 + value: {x: 3.170366, y: 0.421432, z: -2.459780} + - time: 0.800000 + value: {x: 3.281433, y: 0.429325, z: -2.593615} + - time: 0.833333 + value: {x: 3.392978, y: 0.437982, z: -2.726338} + - time: 0.866667 + value: {x: 3.505342, y: 0.446951, z: -2.857285} + - time: 0.900000 + value: {x: 3.618982, y: 0.455888, z: -2.985713} + - time: 0.933333 + value: {x: 3.734150, y: 0.464561, z: -3.111149} + - time: 0.966667 + value: {x: 3.850313, y: 0.472789, z: -3.234025} + - time: 1.000000 + value: {x: 3.967417, y: 0.480544, z: -3.354216} + - time: 1.033333 + value: {x: 4.086076, y: 0.487736, z: -3.470951} + - time: 1.066667 + value: {x: 4.205791, y: 0.494372, z: -3.584620} + - time: 1.100000 + value: {x: 4.325784, y: 0.500524, z: -3.695920} + - time: 1.133333 + value: {x: 4.446005, y: 0.506246, z: -3.804769} + - time: 1.166667 + value: {x: 4.566209, y: 0.511592, z: -3.911206} + - time: 1.200000 + value: {x: 4.685070, y: 0.516741, z: -4.016514} + - time: 1.233333 + value: {x: 4.801749, y: 0.521859, z: -4.121404} + - time: 1.266667 + value: {x: 4.915709, y: 0.527129, z: -4.226240} + - time: 1.300000 + value: {x: 5.026618, y: 0.532751, z: -4.331145} + - time: 1.333333 + value: {x: 5.134268, y: 0.538927, z: -4.436078} + - time: 1.366667 + value: {x: 5.238614, y: 0.545856, z: -4.540801} + - time: 1.400000 + value: {x: 5.339641, y: 0.553725, z: -4.645014} + - time: 1.433333 + value: {x: 5.437349, y: 0.562701, z: -4.748363} + - time: 1.466667 + value: {x: 5.531724, y: 0.572925, z: -4.850475} + - time: 1.500000 + value: {x: 5.622755, y: 0.584507, z: -4.950947} + - time: 1.533333 + value: {x: 5.710397, y: 0.597518, z: -5.049402} + - time: 1.566667 + value: {x: 5.794547, y: 0.611985, z: -5.145495} + - time: 1.600000 + value: {x: 5.875084, y: 0.627900, z: -5.238928} + - time: 1.633333 + value: {x: 5.951899, y: 0.645218, z: -5.329416} + - time: 1.666667 + value: {x: 6.024945, y: 0.663862, z: -5.416688} + - time: 1.700000 + value: {x: 6.094175, y: 0.683771, z: -5.500436} + - time: 1.733333 + value: {x: 6.158638, y: 0.705395, z: -5.579162} + - time: 1.766667 + value: {x: 6.219281, y: 0.728058, z: -5.653277} + - time: 1.800000 + value: {x: 6.276248, y: 0.751560, z: -5.722770} + - time: 1.833333 + value: {x: 6.329160, y: 0.775952, z: -5.787004} + - time: 1.866667 + value: {x: 6.376621, y: 0.801359, z: -5.844302} + - time: 1.900000 + value: {x: 6.420341, y: 0.826858, z: -5.897023} + - time: 1.933333 + value: {x: 6.459364, y: 0.852546, z: -5.944126} + - time: 1.966667 + value: {x: 6.492281, y: 0.877833, z: -5.984377} + - time: 2.000000 + value: {x: 6.522497, y: 0.902422, z: -6.021536} + - time: 2.033333 + value: {x: 6.545086, y: 0.925148, z: -6.050905} + - time: 2.066667 + value: {x: 6.565674, y: 0.946479, z: -6.078112} + - time: 2.100000 + value: {x: 6.580675, y: 0.964898, z: -6.099760} + - time: 2.133333 + value: {x: 6.594120, y: 0.981740, z: -6.119680} + - time: 2.166667 + value: {x: 6.603422, y: 0.995229, z: -6.135473} + - time: 2.200000 + value: {x: 6.612417, y: 1.007958, z: -6.150705} + - time: 2.233333 + value: {x: 6.617891, y: 1.016971, z: -6.162407} + - time: 2.266667 + value: {x: 6.623480, y: 1.025647, z: -6.173933} + - time: 2.300000 + value: {x: 6.627548, y: 1.032166, z: -6.183771} + - time: 2.366667 + value: {x: 6.634356, y: 1.042486, z: -6.201361} + - time: 2.400000 + value: {x: 6.636734, y: 1.045721, z: -6.208769} + - time: 2.466667 + value: {x: 6.641493, y: 1.051173, z: -6.222715} + - time: 2.500000 + value: {x: 6.643745, y: 1.053255, z: -6.229132} + - time: 2.533333 + value: {x: 6.645700, y: 1.054651, z: -6.234978} + - time: 2.600000 + value: {x: 6.649904, y: 1.057256, z: -6.246077} + - time: 2.633333 + value: {x: 6.652092, y: 1.058454, z: -6.251270} + - time: 2.666667 + value: {x: 6.654083, y: 1.059271, z: -6.255997} + - time: 2.700000 + value: {x: 6.656036, y: 1.059987, z: -6.260401} + - time: 2.733333 + value: {x: 6.657951, y: 1.060652, z: -6.264488} + - time: 2.766667 + value: {x: 6.659796, y: 1.061261, z: -6.268225} + - time: 2.800000 + value: {x: 6.661526, y: 1.061808, z: -6.271576} + - time: 2.833333 + value: {x: 6.663103, y: 1.062288, z: -6.274509} + - time: 2.866667 + value: {x: 6.664490, y: 1.062694, z: -6.276993} + - time: 2.900000 + value: {x: 6.665642, y: 1.063021, z: -6.278984} + - time: 2.933333 + value: {x: 6.666521, y: 1.063262, z: -6.280453} + - time: 2.966667 + value: {x: 6.667080, y: 1.063411, z: -6.281363} + - time: 3.000000 + value: {x: 6.667276, y: 1.063463, z: -6.281675} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.305456, y: 0.305456, z: 0.305456} + - time: 0.033333 + value: {x: 0.305261, y: 0.305261, z: 0.305261} + - time: 0.066667 + value: {x: 0.349265, y: 0.349265, z: 0.349265} + - time: 0.100000 + value: {x: 0.403570, y: 0.403570, z: 0.403570} + - time: 0.133333 + value: {x: 0.456599, y: 0.456599, z: 0.456599} + - time: 0.166667 + value: {x: 0.505978, y: 0.505978, z: 0.505978} + - time: 0.200000 + value: {x: 0.560508, y: 0.560508, z: 0.560508} + - time: 0.233333 + value: {x: 0.619647, y: 0.619647, z: 0.619647} + - time: 0.266667 + value: {x: 0.682751, y: 0.682751, z: 0.682751} + - time: 0.300000 + value: {x: 0.749283, y: 0.749283, z: 0.749283} + - time: 0.333333 + value: {x: 0.818838, y: 0.818838, z: 0.818838} + - time: 0.366667 + value: {x: 0.891023, y: 0.891023, z: 0.891023} + - time: 0.400000 + value: {x: 0.965448, y: 0.965448, z: 0.965448} + - time: 0.433333 + value: {x: 1.041827, y: 1.041827, z: 1.041827} + - time: 0.466667 + value: {x: 1.120039, y: 1.120039, z: 1.120039} + - time: 0.500000 + value: {x: 1.199698, y: 1.199698, z: 1.199698} + - time: 0.533333 + value: {x: 1.279708, y: 1.279708, z: 1.279708} + - time: 0.566667 + value: {x: 1.358437, y: 1.358437, z: 1.358437} + - time: 0.600000 + value: {x: 1.434700, y: 1.434700, z: 1.434700} + - time: 0.633333 + value: {x: 1.508936, y: 1.508936, z: 1.508936} + - time: 0.666667 + value: {x: 1.582488, y: 1.582488, z: 1.582488} + - time: 0.700000 + value: {x: 1.656291, y: 1.656291, z: 1.656291} + - time: 0.733333 + value: {x: 1.729828, y: 1.729828, z: 1.729828} + - time: 0.766667 + value: {x: 1.802361, y: 1.802361, z: 1.802361} + - time: 0.800000 + value: {x: 1.873282, y: 1.873282, z: 1.873282} + - time: 0.833333 + value: {x: 1.942118, y: 1.942118, z: 1.942118} + - time: 0.866667 + value: {x: 2.008887, y: 2.008887, z: 2.008887} + - time: 0.900000 + value: {x: 2.073236, y: 2.073236, z: 2.073236} + - time: 0.933333 + value: {x: 2.134370, y: 2.134370, z: 2.134370} + - time: 0.966667 + value: {x: 2.191604, y: 2.191604, z: 2.191604} + - time: 1.000000 + value: {x: 2.245045, y: 2.245045, z: 2.245045} + - time: 1.033333 + value: {x: 2.295985, y: 2.295985, z: 2.295985} + - time: 1.100000 + value: {x: 2.396729, y: 2.396729, z: 2.396729} + - time: 1.133333 + value: {x: 2.447815, y: 2.447815, z: 2.447815} + - time: 1.166667 + value: {x: 2.500238, y: 2.500238, z: 2.500238} + - time: 1.233333 + value: {x: 2.607040, y: 2.607040, z: 2.607040} + - time: 1.266667 + value: {x: 2.659310, y: 2.659310, z: 2.659310} + - time: 1.300000 + value: {x: 2.709847, y: 2.709847, z: 2.709847} + - time: 1.333333 + value: {x: 2.758610, y: 2.758610, z: 2.758610} + - time: 1.400000 + value: {x: 2.854125, y: 2.854125, z: 2.854125} + - time: 1.433333 + value: {x: 2.902599, y: 2.902599, z: 2.902599} + - time: 1.466667 + value: {x: 2.952245, y: 2.952245, z: 2.952245} + - time: 1.500000 + value: {x: 3.003535, y: 3.003535, z: 3.003535} + - time: 1.533333 + value: {x: 3.056317, y: 3.056317, z: 3.056317} + - time: 1.566667 + value: {x: 3.110025, y: 3.110025, z: 3.110025} + - time: 1.600000 + value: {x: 3.163994, y: 3.163994, z: 3.163994} + - time: 1.633333 + value: {x: 3.217548, y: 3.217548, z: 3.217548} + - time: 1.666667 + value: {x: 3.270034, y: 3.270034, z: 3.270034} + - time: 1.700000 + value: {x: 3.321037, y: 3.321037, z: 3.321037} + - time: 1.733333 + value: {x: 3.370892, y: 3.370892, z: 3.370892} + - time: 1.766667 + value: {x: 3.420002, y: 3.420002, z: 3.420002} + - time: 1.833333 + value: {x: 3.517556, y: 3.517556, z: 3.517556} + - time: 1.866667 + value: {x: 3.565836, y: 3.565836, z: 3.565836} + - time: 1.900000 + value: {x: 3.613345, y: 3.613345, z: 3.613345} + - time: 1.933333 + value: {x: 3.660507, y: 3.660507, z: 3.660507} + - time: 1.966667 + value: {x: 3.708055, y: 3.708055, z: 3.708055} + - time: 2.000000 + value: {x: 3.756689, y: 3.756689, z: 3.756689} + - time: 2.033333 + value: {x: 3.807090, y: 3.807090, z: 3.807090} + - time: 2.066667 + value: {x: 3.859324, y: 3.859324, z: 3.859324} + - time: 2.100000 + value: {x: 3.912361, y: 3.912361, z: 3.912361} + - time: 2.133333 + value: {x: 3.964450, y: 3.964450, z: 3.964450} + - time: 2.166667 + value: {x: 4.013481, y: 4.013481, z: 4.013481} + - time: 2.200000 + value: {x: 4.057796, y: 4.057796, z: 4.057796} + - time: 2.233333 + value: {x: 4.096527, y: 4.096527, z: 4.096527} + - time: 2.266667 + value: {x: 4.130331, y: 4.130331, z: 4.130331} + - time: 2.300000 + value: {x: 4.160835, y: 4.160835, z: 4.160835} + - time: 2.366667 + value: {x: 4.219070, y: 4.219070, z: 4.219070} + - time: 2.400000 + value: {x: 4.249386, y: 4.249386, z: 4.249386} + - time: 2.433333 + value: {x: 4.281102, y: 4.281102, z: 4.281102} + - time: 2.466667 + value: {x: 4.313612, y: 4.313612, z: 4.313612} + - time: 2.500000 + value: {x: 4.345721, y: 4.345721, z: 4.345721} + - time: 2.533333 + value: {x: 4.375462, y: 4.375462, z: 4.375462} + - time: 2.566667 + value: {x: 4.401260, y: 4.401260, z: 4.401260} + - time: 2.600000 + value: {x: 4.422766, y: 4.422766, z: 4.422766} + - time: 2.633333 + value: {x: 4.440441, y: 4.440441, z: 4.440441} + - time: 2.666667 + value: {x: 4.455609, y: 4.455609, z: 4.455609} + - time: 2.700000 + value: {x: 4.470020, y: 4.470020, z: 4.470020} + - time: 2.733333 + value: {x: 4.485042, y: 4.485042, z: 4.485042} + - time: 2.766667 + value: {x: 4.501250, y: 4.501250, z: 4.501250} + - time: 2.800000 + value: {x: 4.518235, y: 4.518235, z: 4.518235} + - time: 2.833333 + value: {x: 4.534754, y: 4.534754, z: 4.534754} + - time: 2.866667 + value: {x: 4.549276, y: 4.549276, z: 4.549276} + - time: 2.900000 + value: {x: 4.561105, y: 4.561105, z: 4.561105} + - time: 2.933333 + value: {x: 4.570828, y: 4.570828, z: 4.570828} + - time: 2.966667 + value: {x: 4.579170, y: 4.579170, z: 4.579170} + - time: 3.000000 + value: {x: 4.586533, y: 4.586533, z: 4.586533} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_8: + position: + - time: 0.000000 + value: {x: 0.160608, y: 2.511905, z: 0.030516} + - time: 0.033333 + value: {x: 0.160608, y: 2.511905, z: 0.030516} + - time: 0.066667 + value: {x: 0.025200, y: 1.579751, z: -0.055128} + - time: 0.100000 + value: {x: 0.168896, y: 0.674692, z: -0.217692} + - time: 0.133333 + value: {x: 0.607444, y: 0.255545, z: -0.740883} + - time: 0.166667 + value: {x: 0.885494, y: 0.245855, z: -1.399015} + - time: 0.200000 + value: {x: 0.999475, y: 0.319772, z: -1.887930} + - time: 0.233333 + value: {x: 1.048423, y: 0.426117, z: -2.134866} + - time: 0.266667 + value: {x: 1.063003, y: 0.499509, z: -2.214083} + - time: 0.300000 + value: {x: 1.063197, y: 0.553920, z: -2.235700} + - time: 0.333333 + value: {x: 1.053233, y: 0.585831, z: -2.231516} + - time: 0.366667 + value: {x: 1.038081, y: 0.589038, z: -2.225599} + - time: 0.400000 + value: {x: 1.024240, y: 0.565903, z: -2.240802} + - time: 0.433333 + value: {x: 1.017201, y: 0.528958, z: -2.295202} + - time: 0.466667 + value: {x: 1.020470, y: 0.493758, z: -2.389789} + - time: 0.500000 + value: {x: 1.031991, y: 0.464843, z: -2.511003} + - time: 0.533333 + value: {x: 1.049083, y: 0.442502, z: -2.650265} + - time: 0.566667 + value: {x: 1.070418, y: 0.426264, z: -2.801523} + - time: 0.600000 + value: {x: 1.091437, y: 0.415872, z: -2.962173} + - time: 0.633333 + value: {x: 1.109600, y: 0.410200, z: -3.129007} + - time: 0.666667 + value: {x: 1.126255, y: 0.408475, z: -3.299604} + - time: 0.700000 + value: {x: 1.142366, y: 0.410400, z: -3.472647} + - time: 0.733333 + value: {x: 1.157883, y: 0.414895, z: -3.646778} + - time: 0.766667 + value: {x: 1.175014, y: 0.421432, z: -3.820881} + - time: 0.800000 + value: {x: 1.195353, y: 0.429325, z: -3.994048} + - time: 0.833333 + value: {x: 1.216986, y: 0.437982, z: -4.166445} + - time: 0.866667 + value: {x: 1.237798, y: 0.446951, z: -4.338415} + - time: 0.900000 + value: {x: 1.258391, y: 0.455888, z: -4.509617} + - time: 0.933333 + value: {x: 1.279734, y: 0.464562, z: -4.679649} + - time: 0.966667 + value: {x: 1.302296, y: 0.472789, z: -4.848291} + - time: 1.000000 + value: {x: 1.326047, y: 0.480544, z: -5.015423} + - time: 1.033333 + value: {x: 1.350352, y: 0.487736, z: -5.181128} + - time: 1.066667 + value: {x: 1.376843, y: 0.494372, z: -5.344874} + - time: 1.100000 + value: {x: 1.408177, y: 0.500524, z: -5.505872} + - time: 1.133333 + value: {x: 1.445043, y: 0.506246, z: -5.663836} + - time: 1.166667 + value: {x: 1.486616, y: 0.511592, z: -5.818839} + - time: 1.200000 + value: {x: 1.530116, y: 0.516742, z: -5.971519} + - time: 1.233333 + value: {x: 1.574841, y: 0.521859, z: -6.121933} + - time: 1.266667 + value: {x: 1.619531, y: 0.527129, z: -6.270275} + - time: 1.300000 + value: {x: 1.662755, y: 0.532751, z: -6.416756} + - time: 1.333333 + value: {x: 1.703662, y: 0.538927, z: -6.561414} + - time: 1.366667 + value: {x: 1.741740, y: 0.545856, z: -6.704185} + - time: 1.400000 + value: {x: 1.776874, y: 0.553725, z: -6.844873} + - time: 1.433333 + value: {x: 1.809273, y: 0.562701, z: -6.983175} + - time: 1.466667 + value: {x: 1.839338, y: 0.572925, z: -7.118705} + - time: 1.500000 + value: {x: 1.867444, y: 0.584507, z: -7.251072} + - time: 1.533333 + value: {x: 1.893791, y: 0.597518, z: -7.379921} + - time: 1.566667 + value: {x: 1.918725, y: 0.611985, z: -7.504842} + - time: 1.600000 + value: {x: 1.942698, y: 0.627900, z: -7.625410} + - time: 1.633333 + value: {x: 1.965873, y: 0.645218, z: -7.741295} + - time: 1.666667 + value: {x: 1.988333, y: 0.663862, z: -7.852253} + - time: 1.700000 + value: {x: 2.010223, y: 0.683771, z: -7.957990} + - time: 1.733333 + value: {x: 2.031439, y: 0.705395, z: -8.056753} + - time: 1.766667 + value: {x: 2.051916, y: 0.728059, z: -8.149567} + - time: 1.800000 + value: {x: 2.071593, y: 0.751560, z: -8.236544} + - time: 1.833333 + value: {x: 2.090314, y: 0.775953, z: -8.316992} + - time: 1.866667 + value: {x: 2.108342, y: 0.801359, z: -8.388599} + - time: 1.900000 + value: {x: 2.125835, y: 0.826858, z: -8.454285} + - time: 1.933333 + value: {x: 2.142735, y: 0.852546, z: -8.512604} + - time: 1.966667 + value: {x: 2.158957, y: 0.877833, z: -8.561649} + - time: 2.000000 + value: {x: 2.174679, y: 0.902422, z: -8.606598} + - time: 2.033333 + value: {x: 2.189350, y: 0.925148, z: -8.640560} + - time: 2.066667 + value: {x: 2.203329, y: 0.946479, z: -8.671661} + - time: 2.100000 + value: {x: 2.215858, y: 0.964898, z: -8.695000} + - time: 2.133333 + value: {x: 2.227655, y: 0.981739, z: -8.716137} + - time: 2.166667 + value: {x: 2.237958, y: 0.995229, z: -8.731617} + - time: 2.200000 + value: {x: 2.247867, y: 1.007958, z: -8.746578} + - time: 2.233333 + value: {x: 2.256193, y: 1.016971, z: -8.756798} + - time: 2.266667 + value: {x: 2.264279, y: 1.025647, z: -8.767044} + - time: 2.300000 + value: {x: 2.271423, y: 1.032166, z: -8.775196} + - time: 2.366667 + value: {x: 2.284281, y: 1.042486, z: -8.789402} + - time: 2.400000 + value: {x: 2.289794, y: 1.045721, z: -8.794991} + - time: 2.466667 + value: {x: 2.299971, y: 1.051174, z: -8.805779} + - time: 2.500000 + value: {x: 2.304574, y: 1.053255, z: -8.810810} + - time: 2.566667 + value: {x: 2.312720, y: 1.055986, z: -8.819839} + - time: 2.633333 + value: {x: 2.319962, y: 1.058453, z: -8.828728} + - time: 2.666667 + value: {x: 2.323114, y: 1.059271, z: -8.832748} + - time: 2.700000 + value: {x: 2.326002, y: 1.059987, z: -8.836578} + - time: 2.733333 + value: {x: 2.328633, y: 1.060652, z: -8.840225} + - time: 2.766667 + value: {x: 2.330997, y: 1.061261, z: -8.843639} + - time: 2.800000 + value: {x: 2.333083, y: 1.061808, z: -8.846767} + - time: 2.833333 + value: {x: 2.334879, y: 1.062288, z: -8.849564} + - time: 2.866667 + value: {x: 2.336374, y: 1.062695, z: -8.851971} + - time: 2.900000 + value: {x: 2.337557, y: 1.063021, z: -8.853939} + - time: 2.933333 + value: {x: 2.338416, y: 1.063262, z: -8.855415} + - time: 2.966667 + value: {x: 2.338942, y: 1.063412, z: -8.856342} + - time: 3.000000 + value: {x: 2.339118, y: 1.063463, z: -8.856667} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.364875, y: 0.364875, z: 0.364875} + - time: 0.033333 + value: {x: 0.364700, y: 0.364700, z: 0.364700} + - time: 0.066667 + value: {x: 0.417565, y: 0.417565, z: 0.417565} + - time: 0.100000 + value: {x: 0.485171, y: 0.485171, z: 0.485171} + - time: 0.166667 + value: {x: 0.614926, y: 0.614926, z: 0.614926} + - time: 0.200000 + value: {x: 0.689177, y: 0.689177, z: 0.689177} + - time: 0.233333 + value: {x: 0.771034, y: 0.771034, z: 0.771034} + - time: 0.266667 + value: {x: 0.857384, y: 0.857384, z: 0.857384} + - time: 0.300000 + value: {x: 0.948149, y: 0.948149, z: 0.948149} + - time: 0.333333 + value: {x: 1.043027, y: 1.043027, z: 1.043027} + - time: 0.366667 + value: {x: 1.141730, y: 1.141730, z: 1.141730} + - time: 0.400000 + value: {x: 1.243806, y: 1.243806, z: 1.243806} + - time: 0.433333 + value: {x: 1.348618, y: 1.348618, z: 1.348618} + - time: 0.466667 + value: {x: 1.455565, y: 1.455565, z: 1.455565} + - time: 0.500000 + value: {x: 1.564385, y: 1.564385, z: 1.564385} + - time: 0.533333 + value: {x: 1.674997, y: 1.674997, z: 1.674997} + - time: 0.566667 + value: {x: 1.787060, y: 1.787060, z: 1.787060} + - time: 0.600000 + value: {x: 1.900291, y: 1.900291, z: 1.900291} + - time: 0.666667 + value: {x: 2.128243, y: 2.128243, z: 2.128243} + - time: 0.700000 + value: {x: 2.240990, y: 2.240990, z: 2.240990} + - time: 0.733333 + value: {x: 2.351260, y: 2.351260, z: 2.351260} + - time: 0.766667 + value: {x: 2.458035, y: 2.458035, z: 2.458035} + - time: 0.800000 + value: {x: 2.561476, y: 2.561476, z: 2.561476} + - time: 0.833333 + value: {x: 2.662024, y: 2.662024, z: 2.662024} + - time: 0.866667 + value: {x: 2.759766, y: 2.759766, z: 2.759766} + - time: 0.900000 + value: {x: 2.853908, y: 2.853908, z: 2.853908} + - time: 0.933333 + value: {x: 2.943368, y: 2.943368, z: 2.943368} + - time: 0.966667 + value: {x: 3.027635, y: 3.027635, z: 3.027635} + - time: 1.000000 + value: {x: 3.107595, y: 3.107595, z: 3.107595} + - time: 1.033333 + value: {x: 3.185520, y: 3.185520, z: 3.185520} + - time: 1.066667 + value: {x: 3.264226, y: 3.264226, z: 3.264226} + - time: 1.100000 + value: {x: 3.345415, y: 3.345415, z: 3.345415} + - time: 1.133333 + value: {x: 3.428939, y: 3.428939, z: 3.428939} + - time: 1.166667 + value: {x: 3.513240, y: 3.513240, z: 3.513240} + - time: 1.200000 + value: {x: 3.596264, y: 3.596264, z: 3.596264} + - time: 1.233333 + value: {x: 3.676713, y: 3.676713, z: 3.676713} + - time: 1.266667 + value: {x: 3.754340, y: 3.754340, z: 3.754340} + - time: 1.300000 + value: {x: 3.830012, y: 3.830012, z: 3.830012} + - time: 1.366667 + value: {x: 3.980311, y: 3.980311, z: 3.980311} + - time: 1.400000 + value: {x: 4.054488, y: 4.054488, z: 4.054488} + - time: 1.433333 + value: {x: 4.125751, y: 4.125751, z: 4.125751} + - time: 1.466667 + value: {x: 4.192610, y: 4.192610, z: 4.192610} + - time: 1.500000 + value: {x: 4.255235, y: 4.255235, z: 4.255235} + - time: 1.533333 + value: {x: 4.315096, y: 4.315096, z: 4.315096} + - time: 1.633333 + value: {x: 4.491156, y: 4.491156, z: 4.491156} + - time: 1.666667 + value: {x: 4.548428, y: 4.548428, z: 4.548428} + - time: 1.700000 + value: {x: 4.602907, y: 4.602907, z: 4.602907} + - time: 1.733333 + value: {x: 4.653599, y: 4.653599, z: 4.653599} + - time: 1.766667 + value: {x: 4.700390, y: 4.700390, z: 4.700390} + - time: 1.800000 + value: {x: 4.743394, y: 4.743394, z: 4.743394} + - time: 1.833333 + value: {x: 4.782815, y: 4.782815, z: 4.782815} + - time: 1.866667 + value: {x: 4.819191, y: 4.819191, z: 4.819191} + - time: 1.900000 + value: {x: 4.852920, y: 4.852920, z: 4.852920} + - time: 1.933333 + value: {x: 4.885005, y: 4.885005, z: 4.885005} + - time: 1.966667 + value: {x: 4.916419, y: 4.916419, z: 4.916419} + - time: 2.033333 + value: {x: 4.978145, y: 4.978145, z: 4.978145} + - time: 2.066667 + value: {x: 5.008393, y: 5.008393, z: 5.008393} + - time: 2.100000 + value: {x: 5.038139, y: 5.038139, z: 5.038139} + - time: 2.133333 + value: {x: 5.066773, y: 5.066773, z: 5.066773} + - time: 2.200000 + value: {x: 5.122181, y: 5.122181, z: 5.122181} + - time: 2.233333 + value: {x: 5.150683, y: 5.150683, z: 5.150683} + - time: 2.266667 + value: {x: 5.180132, y: 5.180132, z: 5.180132} + - time: 2.333333 + value: {x: 5.240897, y: 5.240897, z: 5.240897} + - time: 2.366667 + value: {x: 5.271636, y: 5.271636, z: 5.271636} + - time: 2.400000 + value: {x: 5.303414, y: 5.303414, z: 5.303414} + - time: 2.433333 + value: {x: 5.335784, y: 5.335784, z: 5.335784} + - time: 2.466667 + value: {x: 5.367422, y: 5.367422, z: 5.367422} + - time: 2.500000 + value: {x: 5.396399, y: 5.396399, z: 5.396399} + - time: 2.533333 + value: {x: 5.419656, y: 5.419656, z: 5.419656} + - time: 2.566667 + value: {x: 5.434987, y: 5.434987, z: 5.434987} + - time: 2.600000 + value: {x: 5.442514, y: 5.442514, z: 5.442514} + - time: 2.633333 + value: {x: 5.443630, y: 5.443630, z: 5.443630} + - time: 2.666667 + value: {x: 5.440647, y: 5.440647, z: 5.440647} + - time: 2.700000 + value: {x: 5.435886, y: 5.435886, z: 5.435886} + - time: 2.733333 + value: {x: 5.431375, y: 5.431375, z: 5.431375} + - time: 2.766667 + value: {x: 5.429311, y: 5.429311, z: 5.429311} + - time: 2.800000 + value: {x: 5.431765, y: 5.431765, z: 5.431765} + - time: 2.833333 + value: {x: 5.440210, y: 5.440210, z: 5.440210} + - time: 2.866667 + value: {x: 5.455093, y: 5.455093, z: 5.455093} + - time: 2.900000 + value: {x: 5.475668, y: 5.475668, z: 5.475668} + - time: 2.933333 + value: {x: 5.500459, y: 5.500459, z: 5.500459} + - time: 2.966667 + value: {x: 5.527860, y: 5.527860, z: 5.527860} + - time: 3.000000 + value: {x: 5.556602, y: 5.556602, z: 5.556602} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_9: + position: + - time: 0.000000 + value: {x: 0.149805, y: 2.511905, z: -0.058142} + - time: 0.033333 + value: {x: 0.149805, y: 2.511905, z: -0.058142} + - time: 0.066667 + value: {x: -0.016842, y: 1.579751, z: -0.057318} + - time: 0.100000 + value: {x: -0.008699, y: 0.674692, z: -0.262668} + - time: 0.133333 + value: {x: 0.061545, y: 0.255545, z: -0.930713} + - time: 0.166667 + value: {x: -0.011862, y: 0.245855, z: -1.648168} + - time: 0.200000 + value: {x: -0.141684, y: 0.319772, z: -2.133250} + - time: 0.233333 + value: {x: -0.243974, y: 0.426117, z: -2.364650} + - time: 0.266667 + value: {x: -0.293431, y: 0.499509, z: -2.433462} + - time: 0.300000 + value: {x: -0.329946, y: 0.553920, z: -2.444147} + - time: 0.333333 + value: {x: -0.357381, y: 0.585831, z: -2.428812} + - time: 0.366667 + value: {x: -0.373384, y: 0.589038, z: -2.413854} + - time: 0.400000 + value: {x: -0.384224, y: 0.565903, z: -2.422198} + - time: 0.433333 + value: {x: -0.399313, y: 0.528958, z: -2.470703} + - time: 0.466667 + value: {x: -0.421261, y: 0.493758, z: -2.560503} + - time: 0.500000 + value: {x: -0.447267, y: 0.464843, z: -2.678195} + - time: 0.533333 + value: {x: -0.475921, y: 0.442501, z: -2.814816} + - time: 0.566667 + value: {x: -0.508722, y: 0.426264, z: -2.963431} + - time: 0.600000 + value: {x: -0.546792, y: 0.415872, z: -3.119841} + - time: 0.633333 + value: {x: -0.589708, y: 0.410200, z: -3.280252} + - time: 0.666667 + value: {x: -0.636724, y: 0.408475, z: -3.442804} + - time: 0.700000 + value: {x: -0.687540, y: 0.410400, z: -3.606517} + - time: 0.733333 + value: {x: -0.741130, y: 0.414894, z: -3.770319} + - time: 0.766667 + value: {x: -0.797210, y: 0.421432, z: -3.933757} + - time: 0.800000 + value: {x: -0.854732, y: 0.429325, z: -4.096663} + - time: 0.833333 + value: {x: -0.912718, y: 0.437982, z: -4.258993} + - time: 0.866667 + value: {x: -0.970424, y: 0.446951, z: -4.420757} + - time: 0.900000 + value: {x: -1.027451, y: 0.455888, z: -4.581894} + - time: 0.933333 + value: {x: -1.083750, y: 0.464562, z: -4.742271} + - time: 0.966667 + value: {x: -1.139324, y: 0.472790, z: -4.901793} + - time: 1.000000 + value: {x: -1.193717, y: 0.480544, z: -5.060467} + - time: 1.033333 + value: {x: -1.245572, y: 0.487736, z: -5.218629} + - time: 1.066667 + value: {x: -1.294489, y: 0.494372, z: -5.376296} + - time: 1.100000 + value: {x: -1.340680, y: 0.500524, z: -5.533316} + - time: 1.133333 + value: {x: -1.384703, y: 0.506246, z: -5.689415} + - time: 1.166667 + value: {x: -1.427325, y: 0.511592, z: -5.844203} + - time: 1.200000 + value: {x: -1.468887, y: 0.516742, z: -5.997484} + - time: 1.233333 + value: {x: -1.509482, y: 0.521859, z: -6.149101} + - time: 1.266667 + value: {x: -1.549560, y: 0.527129, z: -6.298767} + - time: 1.300000 + value: {x: -1.589718, y: 0.532751, z: -6.446136} + - time: 1.333333 + value: {x: -1.630291, y: 0.538927, z: -6.590915} + - time: 1.366667 + value: {x: -1.671167, y: 0.545856, z: -6.732937} + - time: 1.400000 + value: {x: -1.712123, y: 0.553725, z: -6.872038} + - time: 1.433333 + value: {x: -1.753137, y: 0.562701, z: -7.007977} + - time: 1.466667 + value: {x: -1.794254, y: 0.572925, z: -7.140457} + - time: 1.500000 + value: {x: -1.835248, y: 0.584507, z: -7.269251} + - time: 1.533333 + value: {x: -1.875948, y: 0.597518, z: -7.394108} + - time: 1.566667 + value: {x: -1.916294, y: 0.611985, z: -7.514725} + - time: 1.600000 + value: {x: -1.956262, y: 0.627900, z: -7.630793} + - time: 1.633333 + value: {x: -1.995731, y: 0.645218, z: -7.742069} + - time: 1.666667 + value: {x: -2.034598, y: 0.663862, z: -7.848351} + - time: 1.700000 + value: {x: -2.072825, y: 0.683771, z: -7.949398} + - time: 1.733333 + value: {x: -2.110260, y: 0.705395, z: -8.043453} + - time: 1.766667 + value: {x: -2.146868, y: 0.728059, z: -8.131546} + - time: 1.800000 + value: {x: -2.182586, y: 0.751560, z: -8.213802} + - time: 1.833333 + value: {x: -2.217320, y: 0.775953, z: -8.289494} + - time: 1.866667 + value: {x: -2.250813, y: 0.801359, z: -8.356441} + - time: 1.900000 + value: {x: -2.283165, y: 0.826858, z: -8.417610} + - time: 1.933333 + value: {x: -2.314204, y: 0.852546, z: -8.471569} + - time: 1.966667 + value: {x: -2.343480, y: 0.877834, z: -8.516510} + - time: 2.000000 + value: {x: -2.371597, y: 0.902422, z: -8.557529} + - time: 2.033333 + value: {x: -2.397284, y: 0.925148, z: -8.587902} + - time: 2.066667 + value: {x: -2.421782, y: 0.946478, z: -8.615566} + - time: 2.100000 + value: {x: -2.444023, y: 0.964898, z: -8.635681} + - time: 2.133333 + value: {x: -2.465118, y: 0.981739, z: -8.653721} + - time: 2.166667 + value: {x: -2.484163, y: 0.995229, z: -8.666279} + - time: 2.200000 + value: {x: -2.502477, y: 1.007958, z: -8.678421} + - time: 2.233333 + value: {x: -2.518787, y: 1.016971, z: -8.685970} + - time: 2.266667 + value: {x: -2.534525, y: 1.025648, z: -8.693649} + - time: 2.300000 + value: {x: -2.548980, y: 1.032166, z: -8.699364} + - time: 2.333333 + value: {x: -2.562490, y: 1.037434, z: -8.704105} + - time: 2.366667 + value: {x: -2.575442, y: 1.042486, z: -8.709026} + - time: 2.400000 + value: {x: -2.587251, y: 1.045721, z: -8.712521} + - time: 2.433333 + value: {x: -2.598399, y: 1.048508, z: -8.715900} + - time: 2.466667 + value: {x: -2.608994, y: 1.051174, z: -8.719460} + - time: 2.500000 + value: {x: -2.618864, y: 1.053255, z: -8.722744} + - time: 2.533333 + value: {x: -2.627964, y: 1.054651, z: -8.725624} + - time: 2.566667 + value: {x: -2.636504, y: 1.055986, z: -8.728630} + - time: 2.600000 + value: {x: -2.644472, y: 1.057255, z: -8.731712} + - time: 2.633333 + value: {x: -2.651860, y: 1.058454, z: -8.734833} + - time: 2.666667 + value: {x: -2.658547, y: 1.059271, z: -8.737682} + - time: 2.700000 + value: {x: -2.664624, y: 1.059987, z: -8.740463} + - time: 2.733333 + value: {x: -2.670102, y: 1.060652, z: -8.743168} + - time: 2.766667 + value: {x: -2.674970, y: 1.061261, z: -8.745754} + - time: 2.800000 + value: {x: -2.679219, y: 1.061808, z: -8.748169} + - time: 2.833333 + value: {x: -2.682839, y: 1.062288, z: -8.750362} + - time: 2.866667 + value: {x: -2.685822, y: 1.062695, z: -8.752281} + - time: 2.900000 + value: {x: -2.688157, y: 1.063021, z: -8.753872} + - time: 2.933333 + value: {x: -2.689835, y: 1.063262, z: -8.755077} + - time: 2.966667 + value: {x: -2.690847, y: 1.063411, z: -8.755844} + - time: 3.000000 + value: {x: -2.691189, y: 1.063463, z: -8.756115} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.429120, y: 0.429120, z: 0.429120} + - time: 0.033333 + value: {x: 0.429076, y: 0.429076, z: 0.429076} + - time: 0.066667 + value: {x: 0.480216, y: 0.480216, z: 0.480216} + - time: 0.100000 + value: {x: 0.546318, y: 0.546318, z: 0.546318} + - time: 0.133333 + value: {x: 0.609240, y: 0.609240, z: 0.609240} + - time: 0.166667 + value: {x: 0.675071, y: 0.675071, z: 0.675071} + - time: 0.200000 + value: {x: 0.749555, y: 0.749555, z: 0.749555} + - time: 0.233333 + value: {x: 0.829844, y: 0.829844, z: 0.829844} + - time: 0.266667 + value: {x: 0.916265, y: 0.916265, z: 0.916265} + - time: 0.300000 + value: {x: 1.008149, y: 1.008149, z: 1.008149} + - time: 0.333333 + value: {x: 1.104926, y: 1.104926, z: 1.104926} + - time: 0.366667 + value: {x: 1.205932, y: 1.205932, z: 1.205932} + - time: 0.400000 + value: {x: 1.310573, y: 1.310573, z: 1.310573} + - time: 0.433333 + value: {x: 1.418356, y: 1.418356, z: 1.418356} + - time: 0.466667 + value: {x: 1.528692, y: 1.528692, z: 1.528692} + - time: 0.500000 + value: {x: 1.640996, y: 1.640996, z: 1.640996} + - time: 0.533333 + value: {x: 1.754819, y: 1.754819, z: 1.754819} + - time: 0.600000 + value: {x: 1.984387, y: 1.984387, z: 1.984387} + - time: 0.666667 + value: {x: 2.213399, y: 2.213399, z: 2.213399} + - time: 0.700000 + value: {x: 2.329056, y: 2.329056, z: 2.329056} + - time: 0.733333 + value: {x: 2.446326, y: 2.446326, z: 2.446326} + - time: 0.766667 + value: {x: 2.563287, y: 2.563287, z: 2.563287} + - time: 0.800000 + value: {x: 2.677835, y: 2.677835, z: 2.677835} + - time: 0.833333 + value: {x: 2.788884, y: 2.788884, z: 2.788884} + - time: 0.866667 + value: {x: 2.896000, y: 2.896000, z: 2.896000} + - time: 0.900000 + value: {x: 2.998692, y: 2.998692, z: 2.998692} + - time: 0.933333 + value: {x: 3.096425, y: 3.096425, z: 3.096425} + - time: 0.966667 + value: {x: 3.189410, y: 3.189410, z: 3.189410} + - time: 1.000000 + value: {x: 3.279125, y: 3.279125, z: 3.279125} + - time: 1.033333 + value: {x: 3.366926, y: 3.366926, z: 3.366926} + - time: 1.066667 + value: {x: 3.454247, y: 3.454247, z: 3.454247} + - time: 1.100000 + value: {x: 3.542201, y: 3.542201, z: 3.542201} + - time: 1.133333 + value: {x: 3.630726, y: 3.630726, z: 3.630726} + - time: 1.166667 + value: {x: 3.718964, y: 3.718964, z: 3.718964} + - time: 1.200000 + value: {x: 3.806156, y: 3.806156, z: 3.806156} + - time: 1.233333 + value: {x: 3.891534, y: 3.891534, z: 3.891534} + - time: 1.266667 + value: {x: 3.974648, y: 3.974648, z: 3.974648} + - time: 1.300000 + value: {x: 4.055739, y: 4.055739, z: 4.055739} + - time: 1.333333 + value: {x: 4.135700, y: 4.135700, z: 4.135700} + - time: 1.366667 + value: {x: 4.215913, y: 4.215913, z: 4.215913} + - time: 1.400000 + value: {x: 4.297329, y: 4.297329, z: 4.297329} + - time: 1.433333 + value: {x: 4.379995, y: 4.379995, z: 4.379995} + - time: 1.500000 + value: {x: 4.546878, y: 4.546878, z: 4.546878} + - time: 1.533333 + value: {x: 4.629396, y: 4.629396, z: 4.629396} + - time: 1.566667 + value: {x: 4.710046, y: 4.710046, z: 4.710046} + - time: 1.600000 + value: {x: 4.788202, y: 4.788202, z: 4.788202} + - time: 1.633333 + value: {x: 4.863794, y: 4.863794, z: 4.863794} + - time: 1.666667 + value: {x: 4.936876, y: 4.936876, z: 4.936876} + - time: 1.700000 + value: {x: 5.007202, y: 5.007202, z: 5.007202} + - time: 1.733333 + value: {x: 5.074266, y: 5.074266, z: 5.074266} + - time: 1.766667 + value: {x: 5.137583, y: 5.137583, z: 5.137583} + - time: 1.800000 + value: {x: 5.196984, y: 5.196984, z: 5.196984} + - time: 1.833333 + value: {x: 5.252935, y: 5.252935, z: 5.252935} + - time: 1.866667 + value: {x: 5.306781, y: 5.306781, z: 5.306781} + - time: 1.900000 + value: {x: 5.359325, y: 5.359325, z: 5.359325} + - time: 1.966667 + value: {x: 5.463231, y: 5.463231, z: 5.463231} + - time: 2.000000 + value: {x: 5.514866, y: 5.514866, z: 5.514866} + - time: 2.033333 + value: {x: 5.566201, y: 5.566201, z: 5.566201} + - time: 2.066667 + value: {x: 5.615898, y: 5.615898, z: 5.615898} + - time: 2.100000 + value: {x: 5.663519, y: 5.663519, z: 5.663519} + - time: 2.133333 + value: {x: 5.708436, y: 5.708436, z: 5.708436} + - time: 2.166667 + value: {x: 5.751014, y: 5.751014, z: 5.751014} + - time: 2.200000 + value: {x: 5.791909, y: 5.791909, z: 5.791909} + - time: 2.233333 + value: {x: 5.832503, y: 5.832503, z: 5.832503} + - time: 2.266667 + value: {x: 5.873744, y: 5.873744, z: 5.873744} + - time: 2.300000 + value: {x: 5.916320, y: 5.916320, z: 5.916320} + - time: 2.333333 + value: {x: 5.960261, y: 5.960261, z: 5.960261} + - time: 2.400000 + value: {x: 6.050096, y: 6.050096, z: 6.050096} + - time: 2.433333 + value: {x: 6.094234, y: 6.094234, z: 6.094234} + - time: 2.466667 + value: {x: 6.136650, y: 6.136650, z: 6.136650} + - time: 2.500000 + value: {x: 6.176860, y: 6.176860, z: 6.176860} + - time: 2.533333 + value: {x: 6.213499, y: 6.213499, z: 6.213499} + - time: 2.566667 + value: {x: 6.245884, y: 6.245884, z: 6.245884} + - time: 2.600000 + value: {x: 6.274937, y: 6.274937, z: 6.274937} + - time: 2.633333 + value: {x: 6.301198, y: 6.301198, z: 6.301198} + - time: 2.666667 + value: {x: 6.325159, y: 6.325159, z: 6.325159} + - time: 2.700000 + value: {x: 6.347247, y: 6.347247, z: 6.347247} + - time: 2.733333 + value: {x: 6.367830, y: 6.367830, z: 6.367830} + - time: 2.766667 + value: {x: 6.387131, y: 6.387131, z: 6.387131} + - time: 2.800000 + value: {x: 6.405187, y: 6.405187, z: 6.405187} + - time: 2.833333 + value: {x: 6.422065, y: 6.422065, z: 6.422065} + - time: 2.866667 + value: {x: 6.438094, y: 6.438094, z: 6.438094} + - time: 2.900000 + value: {x: 6.453204, y: 6.453204, z: 6.453204} + - time: 2.933333 + value: {x: 6.467197, y: 6.467197, z: 6.467197} + - time: 2.966667 + value: {x: 6.480073, y: 6.480073, z: 6.480073} + - time: 3.000000 + value: {x: 6.492090, y: 6.492090, z: 6.492090} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset.meta new file mode 100644 index 00000000..9df7fd19 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/CloudsLanding.animationAsset.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + AnimationAsset: ! a1870ff2-5d72-4d88-be6d-d60f99e08159 + ImporterName: AnimationAssetImporter + PrimaryAsset: ! a1870ff2-5d72-4d88-be6d-d60f99e08159 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh new file mode 100644 index 00000000..93f02094 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3db92ffcef6ee16da368ff28e09b1382eea2b5dd2a69a854caf41c0545c1c0c0 +size 102654 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh.meta new file mode 100644 index 00000000..92cdfbd8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Landing/line1.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 9934a5e0-3212-454d-ab26-f7e91e6027e3 + ImporterName: FileMeshImporter + PrimaryAsset: ! 9934a5e0-3212-454d-ab26-f7e91e6027e3 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + boneData: Float + color: UNorm Byte + normal: Float + position: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat new file mode 100644 index 00000000..c9932db4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat @@ -0,0 +1,163 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 0758ccca-126b-4b99-8c7e-a43f0b779172 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Extend + FrustumCullPad: 10000.000000 + InstanceCount: 1 + Defines: + - NODE_7_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Amount_N080: + typeIdx: 1 + value: 1.000000 + Port_Default_N025: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N038: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Default_N066: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Exponent_N014: + typeIdx: 1 + value: 7.000000 + Port_Input1_N002: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Input1_N017: + typeIdx: 1 + value: 2000.000000 + Port_Input1_N021: + typeIdx: 1 + value: 0.000000 + Port_Input1_N040: + typeIdx: 1 + value: 0.100000 + Port_Input1_N043: + typeIdx: 1 + value: 5.000000 + Port_Input1_N069: + typeIdx: 1 + value: 0.000000 + Port_Input1_N070: + typeIdx: 1 + value: 3.000000 + Port_Input1_N071: + typeIdx: 1 + value: 2.000000 + Port_Input1_N072: + typeIdx: 1 + value: 1.100000 + Port_Input1_N097: + typeIdx: 1 + value: 0.005000 + Port_Input2_N002: + typeIdx: 1 + value: 0.500000 + Port_Input2_N069: + typeIdx: 1 + value: 1.000000 + Port_Intensity_N014: + typeIdx: 1 + value: 1.000000 + Port_Normal_N014: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + Port_Position1_N068: + typeIdx: 1 + value: 0.500000 + Port_Position1_N077: + typeIdx: 1 + value: 0.140000 + Port_Position2_N077: + typeIdx: 1 + value: 0.270000 + Port_Position3_N077: + typeIdx: 1 + value: 0.500000 + Port_RangeMaxA_N103: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N103: + typeIdx: 1 + value: -1.000000 + Port_RangeMinA_N103: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N103: + typeIdx: 1 + value: -100.000000 + Port_Value0_N068: + typeIdx: 5 + value: {x: 0.837415, y: 0.837430, z: 0.837430, w: 1.000000} + Port_Value0_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value1_N025: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Value1_N038: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_Value1_N068: + typeIdx: 5 + value: {x: 0.921431, y: 0.921447, z: 0.921447, w: 1.000000} + Port_Value1_N076: + typeIdx: 1 + value: 0.000000 + Port_Value1_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.578103, z: 0.000000, w: 1.000000} + Port_Value2_N068: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value2_N077: + typeIdx: 5 + value: {x: 1.000000, y: 0.832349, z: 0.473213, w: 1.000000} + Port_Value3_N076: + typeIdx: 1 + value: 0.000000 + Port_Value3_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value4_N077: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + alpha: + typeIdx: 1 + value: 1.000000 + distance_gradient: + typeIdx: 1 + value: 0.550000 + height_gradient: + typeIdx: 1 + value: 0.000000 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 2f9a482b-6734-404f-9ee9-3d140b609738 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat.meta new file mode 100644 index 00000000..9cc80149 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_ANIM_mat_takeoff.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 091e16fd-f8bf-4785-a36e-528fdf1c8e8e + ImporterName: MaterialImporter + PrimaryAsset: ! 091e16fd-f8bf-4785-a36e-528fdf1c8e8e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph new file mode 100644 index 00000000..be7ef8be --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37ed39e3b5256d7412adad5cdfd4434422b7e69b48a12649669406de36edb220 +size 277840 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph.meta new file mode 100644 index 00000000..221ca721 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/Bones_clouds_material_start_.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 2f9a482b-6734-404f-9ee9-3d140b609738 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 2f9a482b-6734-404f-9ee9-3d140b609738 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset new file mode 100644 index 00000000..79224f59 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset @@ -0,0 +1,10515 @@ +- ! + PackagePath: "" + AnimationPropertiesLayers: + point_0: + position: + - time: 0.000000 + value: {x: -0.035571, y: 0.457263, z: -0.005534} + - time: 0.033333 + value: {x: -0.036031, y: 0.457257, z: -0.005607} + - time: 0.066667 + value: {x: -0.056084, y: 0.281862, z: -0.008822} + - time: 0.100000 + value: {x: -0.071783, y: 0.160204, z: -0.011671} + - time: 0.133333 + value: {x: -0.084518, y: 0.084069, z: -0.014285} + - time: 0.166667 + value: {x: -0.095016, y: 0.042052, z: -0.016734} + - time: 0.200000 + value: {x: -0.103572, y: 0.020984, z: -0.019035} + - time: 0.233333 + value: {x: -0.109946, y: 0.010016, z: -0.021219} + - time: 0.266667 + value: {x: -0.112410, y: 0.004832, z: -0.023337} + - time: 0.300000 + value: {x: -0.109189, y: 0.002419, z: -0.025366} + - time: 0.333333 + value: {x: -0.098909, y: 0.001393, z: -0.027276} + - time: 0.366667 + value: {x: -0.080382, y: 0.001440, z: -0.029217} + - time: 0.400000 + value: {x: -0.053707, y: 0.002493, z: -0.031075} + - time: 0.433333 + value: {x: -0.024441, y: 0.004578, z: -0.032842} + - time: 0.466667 + value: {x: 0.001154, y: 0.007747, z: -0.034658} + - time: 0.500000 + value: {x: 0.019787, y: 0.012319, z: -0.036351} + - time: 0.533333 + value: {x: 0.033282, y: 0.018500, z: -0.038063} + - time: 0.566667 + value: {x: 0.043203, y: 0.026711, z: -0.039802} + - time: 0.600000 + value: {x: 0.049614, y: 0.036898, z: -0.041472} + - time: 0.633333 + value: {x: 0.050843, y: 0.049002, z: -0.043043} + - time: 0.666667 + value: {x: 0.046084, y: 0.062381, z: -0.044667} + - time: 0.700000 + value: {x: 0.035402, y: 0.074905, z: -0.046259} + - time: 0.733333 + value: {x: 0.020187, y: 0.083901, z: -0.047909} + - time: 0.766667 + value: {x: 0.001578, y: 0.087199, z: -0.049396} + - time: 0.800000 + value: {x: -0.017331, y: 0.084599, z: -0.051032} + - time: 0.833333 + value: {x: -0.033491, y: 0.076794, z: -0.052482} + - time: 0.866667 + value: {x: -0.044291, y: 0.064233, z: -0.054081} + - time: 0.900000 + value: {x: -0.049482, y: 0.049255, z: -0.055612} + - time: 0.933333 + value: {x: -0.049588, y: 0.034328, z: -0.057125} + - time: 0.966667 + value: {x: -0.044436, y: 0.021442, z: -0.058585} + - time: 1.000000 + value: {x: -0.030590, y: 0.011243, z: -0.060092} + - time: 1.033333 + value: {x: -0.003419, y: 0.003873, z: -0.061479} + - time: 1.066667 + value: {x: 0.040997, y: -0.000772, z: -0.062965} + - time: 1.100000 + value: {x: 0.101520, y: -0.002919, z: -0.064399} + - time: 1.133333 + value: {x: 0.171971, y: -0.003232, z: -0.065863} + - time: 1.166667 + value: {x: 0.246449, y: -0.002306, z: -0.067381} + - time: 1.200000 + value: {x: 0.319977, y: -0.000521, z: -0.068829} + - time: 1.233333 + value: {x: 0.389028, y: 0.002125, z: -0.070151} + - time: 1.266667 + value: {x: 0.450791, y: 0.005677, z: -0.071656} + - time: 1.300000 + value: {x: 0.502879, y: 0.010455, z: -0.072968} + - time: 1.333333 + value: {x: 0.544716, y: 0.016243, z: -0.074372} + - time: 1.366667 + value: {x: 0.575845, y: 0.023057, z: -0.075795} + - time: 1.400000 + value: {x: 0.599330, y: 0.030378, z: -0.077282} + - time: 1.433333 + value: {x: 0.615553, y: 0.038180, z: -0.078666} + - time: 1.466667 + value: {x: 0.626804, y: 0.046046, z: -0.080048} + - time: 1.500000 + value: {x: 0.633994, y: 0.053872, z: -0.081311} + - time: 1.533333 + value: {x: 0.637856, y: 0.061472, z: -0.082790} + - time: 1.566667 + value: {x: 0.639054, y: 0.069074, z: -0.084018} + - time: 1.600000 + value: {x: 0.638259, y: 0.076450, z: -0.085429} + - time: 1.633333 + value: {x: 0.635803, y: 0.083745, z: -0.086754} + - time: 1.666667 + value: {x: 0.632019, y: 0.090910, z: -0.088093} + - time: 1.700000 + value: {x: 0.627165, y: 0.097945, z: -0.089452} + - time: 1.733333 + value: {x: 0.621327, y: 0.104894, z: -0.090784} + - time: 1.766667 + value: {x: 0.614533, y: 0.111730, z: -0.092126} + - time: 1.800000 + value: {x: 0.606856, y: 0.118442, z: -0.093464} + - time: 1.833333 + value: {x: 0.598341, y: 0.125045, z: -0.094757} + - time: 1.866667 + value: {x: 0.589107, y: 0.131410, z: -0.096250} + - time: 1.900000 + value: {x: 0.578696, y: 0.137857, z: -0.097397} + - time: 1.933333 + value: {x: 0.567527, y: 0.144032, z: -0.098826} + - time: 1.966667 + value: {x: 0.555748, y: 0.150092, z: -0.100196} + - time: 2.000000 + value: {x: 0.542978, y: 0.156094, z: -0.101475} + - time: 2.033333 + value: {x: 0.529445, y: 0.161949, z: -0.102764} + - time: 2.066667 + value: {x: 0.515582, y: 0.167641, z: -0.104055} + - time: 2.100000 + value: {x: 0.500721, y: 0.173143, z: -0.105192} + - time: 2.133333 + value: {x: 0.485807, y: 0.178244, z: -0.106617} + - time: 2.166667 + value: {x: 0.470436, y: 0.183073, z: -0.107910} + - time: 2.200000 + value: {x: 0.454837, y: 0.187620, z: -0.109009} + - time: 2.233333 + value: {x: 0.439190, y: 0.191643, z: -0.110487} + - time: 2.266667 + value: {x: 0.423322, y: 0.195355, z: -0.111590} + - time: 2.300000 + value: {x: 0.407518, y: 0.198679, z: -0.112851} + - time: 2.333333 + value: {x: 0.391705, y: 0.201355, z: -0.114273} + - time: 2.366667 + value: {x: 0.375924, y: 0.203866, z: -0.115385} + - time: 2.400000 + value: {x: 0.360281, y: 0.205715, z: -0.116763} + - time: 2.433333 + value: {x: 0.344698, y: 0.207267, z: -0.117881} + - time: 2.466667 + value: {x: 0.329312, y: 0.208446, z: -0.119082} + - time: 2.533333 + value: {x: 0.299055, y: 0.209406, z: -0.121699} + - time: 2.600000 + value: {x: 0.269515, y: 0.208787, z: -0.124214} + - time: 2.633333 + value: {x: 0.255042, y: 0.208173, z: -0.125426} + - time: 2.700000 + value: {x: 0.226651, y: 0.206331, z: -0.127688} + - time: 2.733333 + value: {x: 0.212797, y: 0.204958, z: -0.128858} + - time: 2.800000 + value: {x: 0.185696, y: 0.201920, z: -0.131473} + - time: 2.833333 + value: {x: 0.172462, y: 0.200135, z: -0.132507} + - time: 2.866667 + value: {x: 0.159458, y: 0.198200, z: -0.133855} + - time: 2.900000 + value: {x: 0.146543, y: 0.196485, z: -0.134846} + - time: 2.933333 + value: {x: 0.133957, y: 0.194388, z: -0.135994} + - time: 3.000000 + value: {x: 0.109309, y: 0.190120, z: -0.138507} + - time: 3.033333 + value: {x: 0.097269, y: 0.187994, z: -0.139531} + - time: 3.066667 + value: {x: 0.085477, y: 0.185717, z: -0.140686} + - time: 3.133333 + value: {x: 0.062333, y: 0.181194, z: -0.143227} + - time: 3.233333 + value: {x: 0.029007, y: 0.174342, z: -0.146498} + - time: 3.266667 + value: {x: 0.018185, y: 0.172035, z: -0.147819} + - time: 3.300000 + value: {x: 0.007422, y: 0.169800, z: -0.148748} + - time: 3.366667 + value: {x: -0.013685, y: 0.165286, z: -0.151003} + - time: 3.500000 + value: {x: -0.054969, y: 0.156529, z: -0.155463} + - time: 3.633333 + value: {x: -0.095181, y: 0.148258, z: -0.159888} + - time: 3.700000 + value: {x: -0.114891, y: 0.144244, z: -0.162258} + - time: 3.733333 + value: {x: -0.124641, y: 0.142478, z: -0.163113} + - time: 3.766667 + value: {x: -0.134241, y: 0.140512, z: -0.164444} + - time: 3.800000 + value: {x: -0.144131, y: 0.138783, z: -0.165298} + - time: 3.866667 + value: {x: -0.163433, y: 0.135160, z: -0.167631} + - time: 3.933333 + value: {x: -0.182350, y: 0.131960, z: -0.169513} + - time: 3.966667 + value: {x: -0.191568, y: 0.130262, z: -0.170794} + - time: 4.000000 + value: {x: -0.200900, y: 0.128840, z: -0.171597} + - time: 4.033333 + value: {x: -0.210262, y: 0.127169, z: -0.172943} + - time: 4.066667 + value: {x: -0.219612, y: 0.125850, z: -0.173691} + - time: 4.100000 + value: {x: -0.228724, y: 0.124285, z: -0.175018} + - time: 4.133333 + value: {x: -0.237825, y: 0.123072, z: -0.175744} + - time: 4.166667 + value: {x: -0.246745, y: 0.121763, z: -0.176754} + - time: 4.200000 + value: {x: -0.255477, y: 0.120332, z: -0.178094} + - time: 4.266666 + value: {x: -0.272747, y: 0.118084, z: -0.179842} + - time: 4.300000 + value: {x: -0.281263, y: 0.116834, z: -0.181091} + - time: 4.333333 + value: {x: -0.289954, y: 0.115886, z: -0.181822} + - time: 4.400000 + value: {x: -0.306764, y: 0.113724, z: -0.184085} + - time: 4.433333 + value: {x: -0.315052, y: 0.112952, z: -0.184743} + - time: 4.500000 + value: {x: -0.331070, y: 0.111167, z: -0.186804} + - time: 4.533333 + value: {x: -0.338829, y: 0.110232, z: -0.188056} + - time: 4.566667 + value: {x: -0.346566, y: 0.109648, z: -0.188705} + - time: 4.600000 + value: {x: -0.354041, y: 0.108787, z: -0.189994} + - time: 4.666667 + value: {x: -0.368768, y: 0.107710, z: -0.191572} + - time: 4.700000 + value: {x: -0.375826, y: 0.106981, z: -0.192873} + - time: 4.733333 + value: {x: -0.382816, y: 0.106490, z: -0.193794} + - time: 4.766666 + value: {x: -0.389721, y: 0.106188, z: -0.194439} + - time: 4.800000 + value: {x: -0.396422, y: 0.105765, z: -0.195413} + - time: 4.866667 + value: {x: -0.409358, y: 0.104949, z: -0.197586} + - time: 4.900000 + value: {x: -0.415693, y: 0.104831, z: -0.198246} + - time: 4.933333 + value: {x: -0.421796, y: 0.104519, z: -0.199382} + - time: 5.000000 + value: {x: -0.433634, y: 0.104224, z: -0.201299} + - time: 5.333333 + value: {x: -0.489772, y: 0.103472, z: -0.210220} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.400714, y: 0.400714, z: 0.400714} + - time: 0.033333 + value: {x: 0.419434, y: 0.419434, z: 0.419434} + - time: 0.066667 + value: {x: 0.438520, y: 0.438520, z: 0.438520} + - time: 0.100000 + value: {x: 0.457968, y: 0.457968, z: 0.457968} + - time: 0.133333 + value: {x: 0.477777, y: 0.477777, z: 0.477777} + - time: 0.166667 + value: {x: 0.497945, y: 0.497945, z: 0.497945} + - time: 0.200000 + value: {x: 0.518469, y: 0.518469, z: 0.518469} + - time: 0.233333 + value: {x: 0.539347, y: 0.539347, z: 0.539347} + - time: 0.266667 + value: {x: 0.560577, y: 0.560577, z: 0.560577} + - time: 0.300000 + value: {x: 0.582158, y: 0.582158, z: 0.582158} + - time: 0.333333 + value: {x: 0.604087, y: 0.604087, z: 0.604087} + - time: 0.366667 + value: {x: 0.626363, y: 0.626363, z: 0.626363} + - time: 0.400000 + value: {x: 0.648983, y: 0.648983, z: 0.648983} + - time: 0.433333 + value: {x: 0.671946, y: 0.671946, z: 0.671946} + - time: 0.466667 + value: {x: 0.695251, y: 0.695251, z: 0.695251} + - time: 0.500000 + value: {x: 0.718896, y: 0.718896, z: 0.718896} + - time: 0.533333 + value: {x: 0.742878, y: 0.742878, z: 0.742878} + - time: 0.566667 + value: {x: 0.767198, y: 0.767198, z: 0.767198} + - time: 0.600000 + value: {x: 0.791851, y: 0.791851, z: 0.791851} + - time: 0.633333 + value: {x: 0.816839, y: 0.816839, z: 0.816839} + - time: 0.666667 + value: {x: 0.842159, y: 0.842159, z: 0.842159} + - time: 0.700000 + value: {x: 0.867808, y: 0.867808, z: 0.867808} + - time: 0.733333 + value: {x: 0.893788, y: 0.893788, z: 0.893788} + - time: 0.766667 + value: {x: 0.920095, y: 0.920095, z: 0.920095} + - time: 0.800000 + value: {x: 0.946728, y: 0.946728, z: 0.946728} + - time: 0.833333 + value: {x: 0.973686, y: 0.973686, z: 0.973686} + - time: 0.866667 + value: {x: 1.000968, y: 1.000968, z: 1.000968} + - time: 0.900000 + value: {x: 1.028572, y: 1.028572, z: 1.028572} + - time: 0.933333 + value: {x: 1.056498, y: 1.056498, z: 1.056498} + - time: 0.966667 + value: {x: 1.084744, y: 1.084744, z: 1.084744} + - time: 1.000000 + value: {x: 1.113308, y: 1.113308, z: 1.113308} + - time: 1.033333 + value: {x: 1.142190, y: 1.142190, z: 1.142190} + - time: 1.066667 + value: {x: 1.171389, y: 1.171389, z: 1.171389} + - time: 1.100000 + value: {x: 1.200902, y: 1.200902, z: 1.200902} + - time: 1.133333 + value: {x: 1.230731, y: 1.230731, z: 1.230731} + - time: 1.166667 + value: {x: 1.260872, y: 1.260872, z: 1.260872} + - time: 1.200000 + value: {x: 1.291324, y: 1.291324, z: 1.291324} + - time: 1.233333 + value: {x: 1.322089, y: 1.322089, z: 1.322089} + - time: 1.266667 + value: {x: 1.353163, y: 1.353163, z: 1.353163} + - time: 1.300000 + value: {x: 1.384545, y: 1.384545, z: 1.384545} + - time: 1.333333 + value: {x: 1.416236, y: 1.416236, z: 1.416236} + - time: 1.366667 + value: {x: 1.448234, y: 1.448234, z: 1.448234} + - time: 1.400000 + value: {x: 1.480537, y: 1.480537, z: 1.480537} + - time: 1.433333 + value: {x: 1.513146, y: 1.513146, z: 1.513146} + - time: 1.466667 + value: {x: 1.546058, y: 1.546058, z: 1.546058} + - time: 1.500000 + value: {x: 1.579273, y: 1.579273, z: 1.579273} + - time: 1.533333 + value: {x: 1.612791, y: 1.612791, z: 1.612791} + - time: 1.566667 + value: {x: 1.646609, y: 1.646609, z: 1.646609} + - time: 1.600000 + value: {x: 1.680728, y: 1.680728, z: 1.680728} + - time: 1.633333 + value: {x: 1.715147, y: 1.715147, z: 1.715147} + - time: 1.666667 + value: {x: 1.749864, y: 1.749864, z: 1.749864} + - time: 1.700000 + value: {x: 1.784878, y: 1.784878, z: 1.784878} + - time: 1.733333 + value: {x: 1.820190, y: 1.820190, z: 1.820190} + - time: 1.766667 + value: {x: 1.855798, y: 1.855798, z: 1.855798} + - time: 1.800000 + value: {x: 1.891701, y: 1.891701, z: 1.891701} + - time: 1.833333 + value: {x: 1.927899, y: 1.927899, z: 1.927899} + - time: 1.866667 + value: {x: 1.964390, y: 1.964390, z: 1.964390} + - time: 1.900000 + value: {x: 2.001174, y: 2.001174, z: 2.001174} + - time: 1.933333 + value: {x: 2.038250, y: 2.038250, z: 2.038250} + - time: 1.966667 + value: {x: 2.075617, y: 2.075617, z: 2.075617} + - time: 2.000000 + value: {x: 2.113275, y: 2.113275, z: 2.113275} + - time: 2.033333 + value: {x: 2.151223, y: 2.151223, z: 2.151223} + - time: 2.066667 + value: {x: 2.189460, y: 2.189460, z: 2.189460} + - time: 2.100000 + value: {x: 2.227985, y: 2.227985, z: 2.227985} + - time: 2.133333 + value: {x: 2.266797, y: 2.266797, z: 2.266797} + - time: 2.166667 + value: {x: 2.305897, y: 2.305897, z: 2.305897} + - time: 2.200000 + value: {x: 2.345283, y: 2.345283, z: 2.345283} + - time: 2.233333 + value: {x: 2.384955, y: 2.384955, z: 2.384955} + - time: 2.266667 + value: {x: 2.424911, y: 2.424911, z: 2.424911} + - time: 2.300000 + value: {x: 2.465151, y: 2.465151, z: 2.465151} + - time: 2.333333 + value: {x: 2.505676, y: 2.505676, z: 2.505676} + - time: 2.366667 + value: {x: 2.546482, y: 2.546482, z: 2.546482} + - time: 2.400000 + value: {x: 2.587570, y: 2.587570, z: 2.587570} + - time: 2.433333 + value: {x: 2.628942, y: 2.628942, z: 2.628942} + - time: 2.466667 + value: {x: 2.670593, y: 2.670593, z: 2.670593} + - time: 2.500000 + value: {x: 2.712525, y: 2.712525, z: 2.712525} + - time: 2.533333 + value: {x: 2.754737, y: 2.754737, z: 2.754737} + - time: 2.566667 + value: {x: 2.797227, y: 2.797227, z: 2.797227} + - time: 2.600000 + value: {x: 2.839996, y: 2.839996, z: 2.839996} + - time: 2.633333 + value: {x: 2.883043, y: 2.883043, z: 2.883043} + - time: 2.666667 + value: {x: 2.926366, y: 2.926366, z: 2.926366} + - time: 2.700000 + value: {x: 2.969967, y: 2.969967, z: 2.969967} + - time: 2.733333 + value: {x: 3.013844, y: 3.013844, z: 3.013844} + - time: 2.766667 + value: {x: 3.057996, y: 3.057996, z: 3.057996} + - time: 2.800000 + value: {x: 3.102423, y: 3.102423, z: 3.102423} + - time: 2.833333 + value: {x: 3.147125, y: 3.147125, z: 3.147125} + - time: 2.866667 + value: {x: 3.192100, y: 3.192100, z: 3.192100} + - time: 2.900000 + value: {x: 3.237348, y: 3.237348, z: 3.237348} + - time: 2.933333 + value: {x: 3.282870, y: 3.282870, z: 3.282870} + - time: 2.966667 + value: {x: 3.328663, y: 3.328663, z: 3.328663} + - time: 3.000000 + value: {x: 3.374727, y: 3.374727, z: 3.374727} + - time: 3.033333 + value: {x: 3.421064, y: 3.421064, z: 3.421064} + - time: 3.066667 + value: {x: 3.467670, y: 3.467670, z: 3.467670} + - time: 3.100000 + value: {x: 3.514546, y: 3.514546, z: 3.514546} + - time: 3.133333 + value: {x: 3.561692, y: 3.561692, z: 3.561692} + - time: 3.166667 + value: {x: 3.609108, y: 3.609108, z: 3.609108} + - time: 3.200000 + value: {x: 3.656791, y: 3.656791, z: 3.656791} + - time: 3.233333 + value: {x: 3.704742, y: 3.704742, z: 3.704742} + - time: 3.266667 + value: {x: 3.752961, y: 3.752961, z: 3.752961} + - time: 3.300000 + value: {x: 3.801447, y: 3.801447, z: 3.801447} + - time: 3.333333 + value: {x: 3.850199, y: 3.850199, z: 3.850199} + - time: 3.366667 + value: {x: 3.899218, y: 3.899218, z: 3.899218} + - time: 3.400000 + value: {x: 3.948502, y: 3.948502, z: 3.948502} + - time: 3.433333 + value: {x: 3.998051, y: 3.998051, z: 3.998051} + - time: 3.466667 + value: {x: 4.047864, y: 4.047864, z: 4.047864} + - time: 3.500000 + value: {x: 4.097942, y: 4.097942, z: 4.097942} + - time: 3.533333 + value: {x: 4.148283, y: 4.148283, z: 4.148283} + - time: 3.566667 + value: {x: 4.198888, y: 4.198888, z: 4.198888} + - time: 3.600000 + value: {x: 4.249756, y: 4.249756, z: 4.249756} + - time: 3.633333 + value: {x: 4.300885, y: 4.300885, z: 4.300885} + - time: 3.666667 + value: {x: 4.352276, y: 4.352276, z: 4.352276} + - time: 3.700000 + value: {x: 4.403930, y: 4.403930, z: 4.403930} + - time: 3.733333 + value: {x: 4.455843, y: 4.455843, z: 4.455843} + - time: 3.766667 + value: {x: 4.508018, y: 4.508018, z: 4.508018} + - time: 3.800000 + value: {x: 4.560452, y: 4.560452, z: 4.560452} + - time: 3.833333 + value: {x: 4.613145, y: 4.613145, z: 4.613145} + - time: 3.866667 + value: {x: 4.666099, y: 4.666099, z: 4.666099} + - time: 3.900000 + value: {x: 4.719311, y: 4.719311, z: 4.719311} + - time: 3.933333 + value: {x: 4.772781, y: 4.772781, z: 4.772781} + - time: 3.966667 + value: {x: 4.826510, y: 4.826510, z: 4.826510} + - time: 4.000000 + value: {x: 4.880496, y: 4.880496, z: 4.880496} + - time: 4.033333 + value: {x: 4.934739, y: 4.934739, z: 4.934739} + - time: 4.066667 + value: {x: 4.989239, y: 4.989239, z: 4.989239} + - time: 4.100000 + value: {x: 5.043995, y: 5.043995, z: 5.043995} + - time: 4.133333 + value: {x: 5.099007, y: 5.099007, z: 5.099007} + - time: 4.166667 + value: {x: 5.154274, y: 5.154274, z: 5.154274} + - time: 4.200000 + value: {x: 5.209797, y: 5.209797, z: 5.209797} + - time: 4.233333 + value: {x: 5.265574, y: 5.265574, z: 5.265574} + - time: 4.266666 + value: {x: 5.321607, y: 5.321607, z: 5.321607} + - time: 4.300000 + value: {x: 5.377894, y: 5.377894, z: 5.377894} + - time: 4.333333 + value: {x: 5.434433, y: 5.434433, z: 5.434433} + - time: 4.366667 + value: {x: 5.491226, y: 5.491226, z: 5.491226} + - time: 4.400000 + value: {x: 5.548272, y: 5.548272, z: 5.548272} + - time: 4.433333 + value: {x: 5.605569, y: 5.605569, z: 5.605569} + - time: 4.466667 + value: {x: 5.663120, y: 5.663120, z: 5.663120} + - time: 4.500000 + value: {x: 5.720922, y: 5.720922, z: 5.720922} + - time: 4.533333 + value: {x: 5.778975, y: 5.778975, z: 5.778975} + - time: 4.566667 + value: {x: 5.837280, y: 5.837280, z: 5.837280} + - time: 4.600000 + value: {x: 5.895835, y: 5.895835, z: 5.895835} + - time: 4.633333 + value: {x: 5.954640, y: 5.954640, z: 5.954640} + - time: 4.666667 + value: {x: 6.013695, y: 6.013695, z: 6.013695} + - time: 4.700000 + value: {x: 6.072999, y: 6.072999, z: 6.072999} + - time: 4.733333 + value: {x: 6.132553, y: 6.132553, z: 6.132553} + - time: 4.766666 + value: {x: 6.192357, y: 6.192357, z: 6.192357} + - time: 4.800000 + value: {x: 6.252409, y: 6.252409, z: 6.252409} + - time: 4.833333 + value: {x: 6.312710, y: 6.312710, z: 6.312710} + - time: 4.866667 + value: {x: 6.373257, y: 6.373257, z: 6.373257} + - time: 4.900000 + value: {x: 6.434052, y: 6.434052, z: 6.434052} + - time: 4.933333 + value: {x: 6.495093, y: 6.495093, z: 6.495093} + - time: 4.966667 + value: {x: 6.556385, y: 6.556385, z: 6.556385} + - time: 5.000000 + value: {x: 6.617919, y: 6.617919, z: 6.617919} + - time: 5.033333 + value: {x: 6.679702, y: 6.679702, z: 6.679702} + - time: 5.066667 + value: {x: 6.741729, y: 6.741729, z: 6.741729} + - time: 5.100000 + value: {x: 6.804002, y: 6.804002, z: 6.804002} + - time: 5.133333 + value: {x: 6.866521, y: 6.866521, z: 6.866521} + - time: 5.166667 + value: {x: 6.929286, y: 6.929286, z: 6.929286} + - time: 5.200000 + value: {x: 6.992294, y: 6.992294, z: 6.992294} + - time: 5.233333 + value: {x: 7.055546, y: 7.055546, z: 7.055546} + - time: 5.266666 + value: {x: 7.119041, y: 7.119041, z: 7.119041} + - time: 5.300000 + value: {x: 7.182782, y: 7.182782, z: 7.182782} + - time: 5.333333 + value: {x: 7.246766, y: 7.246766, z: 7.246766} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_1: + position: + - time: 0.000000 + value: {x: 0.029026, y: 0.462110, z: 0.018861} + - time: 0.033333 + value: {x: 0.029419, y: 0.462168, z: 0.019110} + - time: 0.066667 + value: {x: 0.046863, y: 0.289587, z: 0.030055} + - time: 0.100000 + value: {x: 0.064603, y: 0.170431, z: 0.039835} + - time: 0.133333 + value: {x: 0.082476, y: 0.096588, z: 0.048781} + - time: 0.166667 + value: {x: 0.100485, y: 0.056714, z: 0.057097} + - time: 0.200000 + value: {x: 0.118798, y: 0.037661, z: 0.064942} + - time: 0.233333 + value: {x: 0.137984, y: 0.028608, z: 0.072410} + - time: 0.266667 + value: {x: 0.160022, y: 0.025271, z: 0.079545} + - time: 0.300000 + value: {x: 0.186849, y: 0.024632, z: 0.086430} + - time: 0.333333 + value: {x: 0.219954, y: 0.025297, z: 0.093143} + - time: 0.366667 + value: {x: 0.260699, y: 0.027028, z: 0.099590} + - time: 0.400000 + value: {x: 0.309015, y: 0.029706, z: 0.105905} + - time: 0.433333 + value: {x: 0.359406, y: 0.033357, z: 0.112118} + - time: 0.466667 + value: {x: 0.405736, y: 0.038100, z: 0.118129} + - time: 0.500000 + value: {x: 0.444674, y: 0.044175, z: 0.124107} + - time: 0.533333 + value: {x: 0.478153, y: 0.051855, z: 0.129942} + - time: 0.566667 + value: {x: 0.507772, y: 0.061567, z: 0.135639} + - time: 0.600000 + value: {x: 0.533579, y: 0.073213, z: 0.141293} + - time: 0.633333 + value: {x: 0.553912, y: 0.086720, z: 0.146941} + - time: 0.666667 + value: {x: 0.568057, y: 0.101520, z: 0.152455} + - time: 0.700000 + value: {x: 0.576059, y: 0.115442, z: 0.157919} + - time: 0.733333 + value: {x: 0.579365, y: 0.125855, z: 0.163261} + - time: 0.766667 + value: {x: 0.579024, y: 0.130489, z: 0.168677} + - time: 0.800000 + value: {x: 0.578291, y: 0.129290, z: 0.173900} + - time: 0.833333 + value: {x: 0.580067, y: 0.122791, z: 0.179229} + - time: 0.866667 + value: {x: 0.587132, y: 0.111600, z: 0.184373} + - time: 0.900000 + value: {x: 0.599641, y: 0.097958, z: 0.189524} + - time: 0.933333 + value: {x: 0.617101, y: 0.084352, z: 0.194645} + - time: 0.966667 + value: {x: 0.639675, y: 0.072758, z: 0.199767} + - time: 1.000000 + value: {x: 0.670856, y: 0.063869, z: 0.204805} + - time: 1.033333 + value: {x: 0.715198, y: 0.057750, z: 0.209907} + - time: 1.066667 + value: {x: 0.776732, y: 0.054399, z: 0.214884} + - time: 1.100000 + value: {x: 0.854252, y: 0.053516, z: 0.219871} + - time: 1.133333 + value: {x: 0.941624, y: 0.054479, z: 0.224795} + - time: 1.166667 + value: {x: 1.032959, y: 0.056703, z: 0.229639} + - time: 1.200000 + value: {x: 1.123229, y: 0.059751, z: 0.234512} + - time: 1.233333 + value: {x: 1.208880, y: 0.063597, z: 0.239466} + - time: 1.266667 + value: {x: 1.287253, y: 0.068432, z: 0.244228} + - time: 1.300000 + value: {x: 1.355784, y: 0.074400, z: 0.249132} + - time: 1.333333 + value: {x: 1.414035, y: 0.081419, z: 0.253926} + - time: 1.366667 + value: {x: 1.461518, y: 0.089470, z: 0.258678} + - time: 1.400000 + value: {x: 1.501317, y: 0.098055, z: 0.263346} + - time: 1.433333 + value: {x: 1.533741, y: 0.107071, z: 0.268080} + - time: 1.466667 + value: {x: 1.561125, y: 0.116146, z: 0.272792} + - time: 1.500000 + value: {x: 1.584331, y: 0.125126, z: 0.277583} + - time: 1.533333 + value: {x: 1.604249, y: 0.133977, z: 0.282161} + - time: 1.566667 + value: {x: 1.621322, y: 0.142709, z: 0.286938} + - time: 1.600000 + value: {x: 1.636433, y: 0.151301, z: 0.291529} + - time: 1.633333 + value: {x: 1.649782, y: 0.159768, z: 0.296175} + - time: 1.666667 + value: {x: 1.661754, y: 0.168110, z: 0.300787} + - time: 1.700000 + value: {x: 1.672610, y: 0.176331, z: 0.305359} + - time: 1.733333 + value: {x: 1.682412, y: 0.184450, z: 0.309935} + - time: 1.766667 + value: {x: 1.691211, y: 0.192459, z: 0.314480} + - time: 1.800000 + value: {x: 1.699071, y: 0.200339, z: 0.319009} + - time: 1.833333 + value: {x: 1.706017, y: 0.208087, z: 0.323559} + - time: 1.866667 + value: {x: 1.712289, y: 0.215691, z: 0.327909} + - time: 1.900000 + value: {x: 1.717168, y: 0.223211, z: 0.332547} + - time: 1.933333 + value: {x: 1.721370, y: 0.230588, z: 0.336918} + - time: 1.966667 + value: {x: 1.724885, y: 0.237825, z: 0.341318} + - time: 2.000000 + value: {x: 1.727316, y: 0.244958, z: 0.345780} + - time: 2.033333 + value: {x: 1.728938, y: 0.251944, z: 0.350216} + - time: 2.066667 + value: {x: 1.730182, y: 0.258767, z: 0.354630} + - time: 2.100000 + value: {x: 1.730306, y: 0.265328, z: 0.359160} + - time: 2.133333 + value: {x: 1.730463, y: 0.271620, z: 0.363420} + - time: 2.166667 + value: {x: 1.730053, y: 0.277577, z: 0.367776} + - time: 2.200000 + value: {x: 1.729275, y: 0.283157, z: 0.372285} + - time: 2.233333 + value: {x: 1.728581, y: 0.288393, z: 0.376441} + - time: 2.266667 + value: {x: 1.727440, y: 0.293137, z: 0.380909} + - time: 2.300000 + value: {x: 1.726389, y: 0.297568, z: 0.385219} + - time: 2.333333 + value: {x: 1.725359, y: 0.301424, z: 0.389370} + - time: 2.366667 + value: {x: 1.724167, y: 0.304968, z: 0.393774} + - time: 2.400000 + value: {x: 1.723188, y: 0.307969, z: 0.397930} + - time: 2.433333 + value: {x: 1.722103, y: 0.310556, z: 0.402293} + - time: 2.466667 + value: {x: 1.721204, y: 0.312801, z: 0.406567} + - time: 2.500000 + value: {x: 1.720418, y: 0.314409, z: 0.410783} + - time: 2.533333 + value: {x: 1.719883, y: 0.315994, z: 0.414869} + - time: 2.600000 + value: {x: 1.719044, y: 0.317555, z: 0.423189} + - time: 2.633333 + value: {x: 1.718829, y: 0.318008, z: 0.427361} + - time: 2.666667 + value: {x: 1.718651, y: 0.318106, z: 0.431670} + - time: 2.700000 + value: {x: 1.718736, y: 0.318213, z: 0.435796} + - time: 2.766667 + value: {x: 1.719401, y: 0.317454, z: 0.444045} + - time: 2.800000 + value: {x: 1.720062, y: 0.317050, z: 0.447967} + - time: 2.833333 + value: {x: 1.720719, y: 0.316236, z: 0.452189} + - time: 2.866667 + value: {x: 1.721709, y: 0.315418, z: 0.456116} + - time: 2.900000 + value: {x: 1.722570, y: 0.314650, z: 0.460340} + - time: 2.933333 + value: {x: 1.723788, y: 0.313572, z: 0.464409} + - time: 3.033333 + value: {x: 1.728275, y: 0.310273, z: 0.476419} + - time: 3.066667 + value: {x: 1.730101, y: 0.309013, z: 0.480409} + - time: 3.133333 + value: {x: 1.734162, y: 0.306626, z: 0.488128} + - time: 3.233333 + value: {x: 1.741033, y: 0.302714, z: 0.500046} + - time: 3.266667 + value: {x: 1.743623, y: 0.301489, z: 0.503780} + - time: 3.333333 + value: {x: 1.748668, y: 0.298858, z: 0.511690} + - time: 3.533333 + value: {x: 1.765086, y: 0.291641, z: 0.534606} + - time: 3.666667 + value: {x: 1.776379, y: 0.287330, z: 0.549386} + - time: 3.733333 + value: {x: 1.782033, y: 0.285424, z: 0.556944} + - time: 3.766667 + value: {x: 1.785131, y: 0.284521, z: 0.560393} + - time: 3.800000 + value: {x: 1.787665, y: 0.283629, z: 0.564244} + - time: 3.833333 + value: {x: 1.790526, y: 0.282772, z: 0.567738} + - time: 3.933333 + value: {x: 1.799036, y: 0.280512, z: 0.578758} + - time: 3.966667 + value: {x: 1.802202, y: 0.279840, z: 0.582141} + - time: 4.000000 + value: {x: 1.804981, y: 0.279222, z: 0.585925} + - time: 4.033333 + value: {x: 1.807937, y: 0.278609, z: 0.589212} + - time: 4.066667 + value: {x: 1.810572, y: 0.278062, z: 0.593009} + - time: 4.100000 + value: {x: 1.813675, y: 0.277541, z: 0.596275} + - time: 4.133333 + value: {x: 1.816453, y: 0.277087, z: 0.600055} + - time: 4.166667 + value: {x: 1.819498, y: 0.276668, z: 0.603566} + - time: 4.200000 + value: {x: 1.822842, y: 0.276283, z: 0.606765} + - time: 4.266666 + value: {x: 1.829134, y: 0.275678, z: 0.613932} + - time: 4.300000 + value: {x: 1.832505, y: 0.275425, z: 0.617158} + - time: 4.333333 + value: {x: 1.835406, y: 0.275228, z: 0.620822} + - time: 4.400000 + value: {x: 1.842019, y: 0.274938, z: 0.627388} + - time: 4.433333 + value: {x: 1.845144, y: 0.274876, z: 0.631063} + - time: 4.500000 + value: {x: 1.852168, y: 0.274861, z: 0.637695} + - time: 4.533333 + value: {x: 1.855962, y: 0.274912, z: 0.640789} + - time: 4.566667 + value: {x: 1.859446, y: 0.275028, z: 0.644397} + - time: 4.600000 + value: {x: 1.863447, y: 0.275167, z: 0.647422} + - time: 4.666667 + value: {x: 1.871054, y: 0.275611, z: 0.654304} + - time: 4.700000 + value: {x: 1.875339, y: 0.275883, z: 0.657263} + - time: 4.766666 + value: {x: 1.883492, y: 0.276599, z: 0.664046} + - time: 4.800000 + value: {x: 1.887837, y: 0.277019, z: 0.667239} + - time: 4.866667 + value: {x: 1.896960, y: 0.277987, z: 0.673378} + - time: 4.900000 + value: {x: 1.901382, y: 0.278555, z: 0.676798} + - time: 5.333333 + value: {x: 1.963936, y: 0.287568, z: 0.716405} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.400714, y: 0.400714, z: 0.400714} + - time: 0.033333 + value: {x: 0.419434, y: 0.419434, z: 0.419434} + - time: 0.066667 + value: {x: 0.438520, y: 0.438520, z: 0.438520} + - time: 0.100000 + value: {x: 0.457968, y: 0.457968, z: 0.457968} + - time: 0.133333 + value: {x: 0.477777, y: 0.477777, z: 0.477777} + - time: 0.166667 + value: {x: 0.497945, y: 0.497945, z: 0.497945} + - time: 0.200000 + value: {x: 0.518469, y: 0.518469, z: 0.518469} + - time: 0.233333 + value: {x: 0.539347, y: 0.539347, z: 0.539347} + - time: 0.266667 + value: {x: 0.560577, y: 0.560577, z: 0.560577} + - time: 0.300000 + value: {x: 0.582158, y: 0.582158, z: 0.582158} + - time: 0.333333 + value: {x: 0.604087, y: 0.604087, z: 0.604087} + - time: 0.366667 + value: {x: 0.626363, y: 0.626363, z: 0.626363} + - time: 0.400000 + value: {x: 0.648983, y: 0.648983, z: 0.648983} + - time: 0.433333 + value: {x: 0.671946, y: 0.671946, z: 0.671946} + - time: 0.466667 + value: {x: 0.695251, y: 0.695251, z: 0.695251} + - time: 0.500000 + value: {x: 0.718896, y: 0.718896, z: 0.718896} + - time: 0.533333 + value: {x: 0.742878, y: 0.742878, z: 0.742878} + - time: 0.566667 + value: {x: 0.767198, y: 0.767198, z: 0.767198} + - time: 0.600000 + value: {x: 0.791851, y: 0.791851, z: 0.791851} + - time: 0.633333 + value: {x: 0.816839, y: 0.816839, z: 0.816839} + - time: 0.666667 + value: {x: 0.842159, y: 0.842159, z: 0.842159} + - time: 0.700000 + value: {x: 0.867808, y: 0.867808, z: 0.867808} + - time: 0.733333 + value: {x: 0.893788, y: 0.893788, z: 0.893788} + - time: 0.766667 + value: {x: 0.920095, y: 0.920095, z: 0.920095} + - time: 0.800000 + value: {x: 0.946728, y: 0.946728, z: 0.946728} + - time: 0.833333 + value: {x: 0.973686, y: 0.973686, z: 0.973686} + - time: 0.866667 + value: {x: 1.000968, y: 1.000968, z: 1.000968} + - time: 0.900000 + value: {x: 1.028572, y: 1.028572, z: 1.028572} + - time: 0.933333 + value: {x: 1.056498, y: 1.056498, z: 1.056498} + - time: 0.966667 + value: {x: 1.084744, y: 1.084744, z: 1.084744} + - time: 1.000000 + value: {x: 1.113308, y: 1.113308, z: 1.113308} + - time: 1.033333 + value: {x: 1.142190, y: 1.142190, z: 1.142190} + - time: 1.066667 + value: {x: 1.171389, y: 1.171389, z: 1.171389} + - time: 1.100000 + value: {x: 1.200902, y: 1.200902, z: 1.200902} + - time: 1.133333 + value: {x: 1.230731, y: 1.230731, z: 1.230731} + - time: 1.166667 + value: {x: 1.260872, y: 1.260872, z: 1.260872} + - time: 1.200000 + value: {x: 1.291324, y: 1.291324, z: 1.291324} + - time: 1.233333 + value: {x: 1.322089, y: 1.322089, z: 1.322089} + - time: 1.266667 + value: {x: 1.353163, y: 1.353163, z: 1.353163} + - time: 1.300000 + value: {x: 1.384545, y: 1.384545, z: 1.384545} + - time: 1.333333 + value: {x: 1.416236, y: 1.416236, z: 1.416236} + - time: 1.366667 + value: {x: 1.448234, y: 1.448234, z: 1.448234} + - time: 1.400000 + value: {x: 1.480537, y: 1.480537, z: 1.480537} + - time: 1.433333 + value: {x: 1.513146, y: 1.513146, z: 1.513146} + - time: 1.466667 + value: {x: 1.546058, y: 1.546058, z: 1.546058} + - time: 1.500000 + value: {x: 1.579273, y: 1.579273, z: 1.579273} + - time: 1.533333 + value: {x: 1.612791, y: 1.612791, z: 1.612791} + - time: 1.566667 + value: {x: 1.646609, y: 1.646609, z: 1.646609} + - time: 1.600000 + value: {x: 1.680728, y: 1.680728, z: 1.680728} + - time: 1.633333 + value: {x: 1.715147, y: 1.715147, z: 1.715147} + - time: 1.666667 + value: {x: 1.749864, y: 1.749864, z: 1.749864} + - time: 1.700000 + value: {x: 1.784878, y: 1.784878, z: 1.784878} + - time: 1.733333 + value: {x: 1.820190, y: 1.820190, z: 1.820190} + - time: 1.766667 + value: {x: 1.855798, y: 1.855798, z: 1.855798} + - time: 1.800000 + value: {x: 1.891701, y: 1.891701, z: 1.891701} + - time: 1.833333 + value: {x: 1.927899, y: 1.927899, z: 1.927899} + - time: 1.866667 + value: {x: 1.964390, y: 1.964390, z: 1.964390} + - time: 1.900000 + value: {x: 2.001174, y: 2.001174, z: 2.001174} + - time: 1.933333 + value: {x: 2.038250, y: 2.038250, z: 2.038250} + - time: 1.966667 + value: {x: 2.075617, y: 2.075617, z: 2.075617} + - time: 2.000000 + value: {x: 2.113275, y: 2.113275, z: 2.113275} + - time: 2.033333 + value: {x: 2.151223, y: 2.151223, z: 2.151223} + - time: 2.066667 + value: {x: 2.189460, y: 2.189460, z: 2.189460} + - time: 2.100000 + value: {x: 2.227985, y: 2.227985, z: 2.227985} + - time: 2.133333 + value: {x: 2.266797, y: 2.266797, z: 2.266797} + - time: 2.166667 + value: {x: 2.305897, y: 2.305897, z: 2.305897} + - time: 2.200000 + value: {x: 2.345283, y: 2.345283, z: 2.345283} + - time: 2.233333 + value: {x: 2.384955, y: 2.384955, z: 2.384955} + - time: 2.266667 + value: {x: 2.424911, y: 2.424911, z: 2.424911} + - time: 2.300000 + value: {x: 2.465151, y: 2.465151, z: 2.465151} + - time: 2.333333 + value: {x: 2.505676, y: 2.505676, z: 2.505676} + - time: 2.366667 + value: {x: 2.546482, y: 2.546482, z: 2.546482} + - time: 2.400000 + value: {x: 2.587570, y: 2.587570, z: 2.587570} + - time: 2.433333 + value: {x: 2.628942, y: 2.628942, z: 2.628942} + - time: 2.466667 + value: {x: 2.670593, y: 2.670593, z: 2.670593} + - time: 2.500000 + value: {x: 2.712525, y: 2.712525, z: 2.712525} + - time: 2.533333 + value: {x: 2.754737, y: 2.754737, z: 2.754737} + - time: 2.566667 + value: {x: 2.797227, y: 2.797227, z: 2.797227} + - time: 2.600000 + value: {x: 2.839996, y: 2.839996, z: 2.839996} + - time: 2.633333 + value: {x: 2.883043, y: 2.883043, z: 2.883043} + - time: 2.666667 + value: {x: 2.926366, y: 2.926366, z: 2.926366} + - time: 2.700000 + value: {x: 2.969967, y: 2.969967, z: 2.969967} + - time: 2.733333 + value: {x: 3.013844, y: 3.013844, z: 3.013844} + - time: 2.766667 + value: {x: 3.057996, y: 3.057996, z: 3.057996} + - time: 2.800000 + value: {x: 3.102423, y: 3.102423, z: 3.102423} + - time: 2.833333 + value: {x: 3.147125, y: 3.147125, z: 3.147125} + - time: 2.866667 + value: {x: 3.192100, y: 3.192100, z: 3.192100} + - time: 2.900000 + value: {x: 3.237348, y: 3.237348, z: 3.237348} + - time: 2.933333 + value: {x: 3.282870, y: 3.282870, z: 3.282870} + - time: 2.966667 + value: {x: 3.328663, y: 3.328663, z: 3.328663} + - time: 3.000000 + value: {x: 3.374727, y: 3.374727, z: 3.374727} + - time: 3.033333 + value: {x: 3.421064, y: 3.421064, z: 3.421064} + - time: 3.066667 + value: {x: 3.467670, y: 3.467670, z: 3.467670} + - time: 3.100000 + value: {x: 3.514546, y: 3.514546, z: 3.514546} + - time: 3.133333 + value: {x: 3.561692, y: 3.561692, z: 3.561692} + - time: 3.166667 + value: {x: 3.609108, y: 3.609108, z: 3.609108} + - time: 3.200000 + value: {x: 3.656791, y: 3.656791, z: 3.656791} + - time: 3.233333 + value: {x: 3.704742, y: 3.704742, z: 3.704742} + - time: 3.266667 + value: {x: 3.752961, y: 3.752961, z: 3.752961} + - time: 3.300000 + value: {x: 3.801447, y: 3.801447, z: 3.801447} + - time: 3.333333 + value: {x: 3.850199, y: 3.850199, z: 3.850199} + - time: 3.366667 + value: {x: 3.899218, y: 3.899218, z: 3.899218} + - time: 3.400000 + value: {x: 3.948502, y: 3.948502, z: 3.948502} + - time: 3.433333 + value: {x: 3.998051, y: 3.998051, z: 3.998051} + - time: 3.466667 + value: {x: 4.047864, y: 4.047864, z: 4.047864} + - time: 3.500000 + value: {x: 4.097942, y: 4.097942, z: 4.097942} + - time: 3.533333 + value: {x: 4.148283, y: 4.148283, z: 4.148283} + - time: 3.566667 + value: {x: 4.198888, y: 4.198888, z: 4.198888} + - time: 3.600000 + value: {x: 4.249756, y: 4.249756, z: 4.249756} + - time: 3.633333 + value: {x: 4.300885, y: 4.300885, z: 4.300885} + - time: 3.666667 + value: {x: 4.352276, y: 4.352276, z: 4.352276} + - time: 3.700000 + value: {x: 4.403930, y: 4.403930, z: 4.403930} + - time: 3.733333 + value: {x: 4.455843, y: 4.455843, z: 4.455843} + - time: 3.766667 + value: {x: 4.508018, y: 4.508018, z: 4.508018} + - time: 3.800000 + value: {x: 4.560452, y: 4.560452, z: 4.560452} + - time: 3.833333 + value: {x: 4.613145, y: 4.613145, z: 4.613145} + - time: 3.866667 + value: {x: 4.666099, y: 4.666099, z: 4.666099} + - time: 3.900000 + value: {x: 4.719311, y: 4.719311, z: 4.719311} + - time: 3.933333 + value: {x: 4.772781, y: 4.772781, z: 4.772781} + - time: 3.966667 + value: {x: 4.826510, y: 4.826510, z: 4.826510} + - time: 4.000000 + value: {x: 4.880496, y: 4.880496, z: 4.880496} + - time: 4.033333 + value: {x: 4.934739, y: 4.934739, z: 4.934739} + - time: 4.066667 + value: {x: 4.989239, y: 4.989239, z: 4.989239} + - time: 4.100000 + value: {x: 5.043995, y: 5.043995, z: 5.043995} + - time: 4.133333 + value: {x: 5.099007, y: 5.099007, z: 5.099007} + - time: 4.166667 + value: {x: 5.154274, y: 5.154274, z: 5.154274} + - time: 4.200000 + value: {x: 5.209797, y: 5.209797, z: 5.209797} + - time: 4.233333 + value: {x: 5.265574, y: 5.265574, z: 5.265574} + - time: 4.266666 + value: {x: 5.321607, y: 5.321607, z: 5.321607} + - time: 4.300000 + value: {x: 5.377894, y: 5.377894, z: 5.377894} + - time: 4.333333 + value: {x: 5.434433, y: 5.434433, z: 5.434433} + - time: 4.366667 + value: {x: 5.491226, y: 5.491226, z: 5.491226} + - time: 4.400000 + value: {x: 5.548272, y: 5.548272, z: 5.548272} + - time: 4.433333 + value: {x: 5.605569, y: 5.605569, z: 5.605569} + - time: 4.466667 + value: {x: 5.663120, y: 5.663120, z: 5.663120} + - time: 4.500000 + value: {x: 5.720922, y: 5.720922, z: 5.720922} + - time: 4.533333 + value: {x: 5.778975, y: 5.778975, z: 5.778975} + - time: 4.566667 + value: {x: 5.837280, y: 5.837280, z: 5.837280} + - time: 4.600000 + value: {x: 5.895835, y: 5.895835, z: 5.895835} + - time: 4.633333 + value: {x: 5.954640, y: 5.954640, z: 5.954640} + - time: 4.666667 + value: {x: 6.013695, y: 6.013695, z: 6.013695} + - time: 4.700000 + value: {x: 6.072999, y: 6.072999, z: 6.072999} + - time: 4.733333 + value: {x: 6.132553, y: 6.132553, z: 6.132553} + - time: 4.766666 + value: {x: 6.192357, y: 6.192357, z: 6.192357} + - time: 4.800000 + value: {x: 6.252409, y: 6.252409, z: 6.252409} + - time: 4.833333 + value: {x: 6.312710, y: 6.312710, z: 6.312710} + - time: 4.866667 + value: {x: 6.373257, y: 6.373257, z: 6.373257} + - time: 4.900000 + value: {x: 6.434052, y: 6.434052, z: 6.434052} + - time: 4.933333 + value: {x: 6.495093, y: 6.495093, z: 6.495093} + - time: 4.966667 + value: {x: 6.556385, y: 6.556385, z: 6.556385} + - time: 5.000000 + value: {x: 6.617919, y: 6.617919, z: 6.617919} + - time: 5.033333 + value: {x: 6.679702, y: 6.679702, z: 6.679702} + - time: 5.066667 + value: {x: 6.741729, y: 6.741729, z: 6.741729} + - time: 5.100000 + value: {x: 6.804002, y: 6.804002, z: 6.804002} + - time: 5.133333 + value: {x: 6.866521, y: 6.866521, z: 6.866521} + - time: 5.166667 + value: {x: 6.929286, y: 6.929286, z: 6.929286} + - time: 5.200000 + value: {x: 6.992294, y: 6.992294, z: 6.992294} + - time: 5.233333 + value: {x: 7.055546, y: 7.055546, z: 7.055546} + - time: 5.266666 + value: {x: 7.119041, y: 7.119041, z: 7.119041} + - time: 5.300000 + value: {x: 7.182782, y: 7.182782, z: 7.182782} + - time: 5.333333 + value: {x: 7.246766, y: 7.246766, z: 7.246766} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_10: + position: + - time: 0.000000 + value: {x: 0.012226, y: 0.483325, z: -0.008963} + - time: 0.033333 + value: {x: 0.012286, y: 0.483451, z: -0.009011} + - time: 0.066667 + value: {x: 0.019184, y: 0.322740, z: -0.014635} + - time: 0.100000 + value: {x: 0.025285, y: 0.213928, z: -0.021770} + - time: 0.133333 + value: {x: 0.030809, y: 0.149345, z: -0.029847} + - time: 0.166667 + value: {x: 0.035896, y: 0.117908, z: -0.038640} + - time: 0.200000 + value: {x: 0.040643, y: 0.106631, z: -0.048209} + - time: 0.233333 + value: {x: 0.045130, y: 0.104816, z: -0.059022} + - time: 0.266667 + value: {x: 0.049452, y: 0.108277, z: -0.072946} + - time: 0.300000 + value: {x: 0.053699, y: 0.114046, z: -0.091916} + - time: 0.333333 + value: {x: 0.057942, y: 0.120765, z: -0.117443} + - time: 0.366667 + value: {x: 0.062224, y: 0.128298, z: -0.150656} + - time: 0.400000 + value: {x: 0.066574, y: 0.136506, z: -0.191634} + - time: 0.433333 + value: {x: 0.070864, y: 0.145436, z: -0.234882} + - time: 0.466667 + value: {x: 0.074931, y: 0.155291, z: -0.274057} + - time: 0.500000 + value: {x: 0.078717, y: 0.166251, z: -0.306068} + - time: 0.533333 + value: {x: 0.082266, y: 0.178668, z: -0.332638} + - time: 0.566667 + value: {x: 0.085629, y: 0.192983, z: -0.355354} + - time: 0.600000 + value: {x: 0.088822, y: 0.209071, z: -0.374387} + - time: 0.633333 + value: {x: 0.091811, y: 0.226855, z: -0.388117} + - time: 0.666667 + value: {x: 0.094567, y: 0.245840, z: -0.395615} + - time: 0.700000 + value: {x: 0.097105, y: 0.263828, z: -0.397040} + - time: 0.733333 + value: {x: 0.099457, y: 0.278231, z: -0.393716} + - time: 0.766667 + value: {x: 0.101677, y: 0.286693, z: -0.386987} + - time: 0.800000 + value: {x: 0.103823, y: 0.289297, z: -0.379682} + - time: 0.833333 + value: {x: 0.106005, y: 0.286442, z: -0.375156} + - time: 0.866667 + value: {x: 0.108268, y: 0.278879, z: -0.375731} + - time: 0.900000 + value: {x: 0.110638, y: 0.268761, z: -0.381852} + - time: 0.933333 + value: {x: 0.113100, y: 0.258603, z: -0.392963} + - time: 0.966667 + value: {x: 0.115663, y: 0.250369, z: -0.409269} + - time: 1.000000 + value: {x: 0.118412, y: 0.244795, z: -0.434127} + - time: 1.033333 + value: {x: 0.121482, y: 0.241883, z: -0.472312} + - time: 1.066667 + value: {x: 0.124962, y: 0.241720, z: -0.527562} + - time: 1.100000 + value: {x: 0.128833, y: 0.243951, z: -0.598872} + - time: 1.133333 + value: {x: 0.132930, y: 0.247986, z: -0.679999} + - time: 1.166667 + value: {x: 0.137098, y: 0.253253, z: -0.765027} + - time: 1.200000 + value: {x: 0.141217, y: 0.259267, z: -0.849091} + - time: 1.233333 + value: {x: 0.145201, y: 0.265983, z: -0.928711} + - time: 1.266667 + value: {x: 0.148952, y: 0.273716, z: -1.000824} + - time: 1.300000 + value: {x: 0.152439, y: 0.282462, z: -1.063360} + - time: 1.333333 + value: {x: 0.155625, y: 0.292254, z: -1.115504} + - time: 1.366667 + value: {x: 0.158506, y: 0.303045, z: -1.156867} + - time: 1.400000 + value: {x: 0.161158, y: 0.314356, z: -1.190474} + - time: 1.433333 + value: {x: 0.163605, y: 0.326019, z: -1.216849} + - time: 1.466667 + value: {x: 0.165900, y: 0.337706, z: -1.238198} + - time: 1.500000 + value: {x: 0.168076, y: 0.349216, z: -1.255529} + - time: 1.533333 + value: {x: 0.170128, y: 0.360646, z: -1.269300} + - time: 1.566667 + value: {x: 0.172109, y: 0.371829, z: -1.280562} + - time: 1.600000 + value: {x: 0.174005, y: 0.382909, z: -1.289629} + - time: 1.633333 + value: {x: 0.175844, y: 0.393800, z: -1.297056} + - time: 1.666667 + value: {x: 0.177629, y: 0.404542, z: -1.303093} + - time: 1.700000 + value: {x: 0.179367, y: 0.415139, z: -1.307996} + - time: 1.733333 + value: {x: 0.181064, y: 0.425597, z: -1.311889} + - time: 1.766667 + value: {x: 0.182717, y: 0.435920, z: -1.314771} + - time: 1.800000 + value: {x: 0.184331, y: 0.446087, z: -1.316727} + - time: 1.833333 + value: {x: 0.185909, y: 0.456078, z: -1.317837} + - time: 1.866667 + value: {x: 0.187439, y: 0.465971, z: -1.318024} + - time: 1.900000 + value: {x: 0.188946, y: 0.475630, z: -1.317265} + - time: 1.933333 + value: {x: 0.190399, y: 0.485224, z: -1.315482} + - time: 1.966667 + value: {x: 0.191825, y: 0.494631, z: -1.313091} + - time: 2.000000 + value: {x: 0.193217, y: 0.503878, z: -1.309739} + - time: 2.033333 + value: {x: 0.194573, y: 0.512961, z: -1.305575} + - time: 2.066667 + value: {x: 0.195906, y: 0.521858, z: -1.301037} + - time: 2.100000 + value: {x: 0.197210, y: 0.530415, z: -1.295581} + - time: 2.133333 + value: {x: 0.198479, y: 0.538785, z: -1.289807} + - time: 2.166667 + value: {x: 0.199731, y: 0.546752, z: -1.283638} + - time: 2.200000 + value: {x: 0.200978, y: 0.554253, z: -1.277351} + - time: 2.233333 + value: {x: 0.202185, y: 0.561523, z: -1.270682} + - time: 2.266667 + value: {x: 0.203398, y: 0.568150, z: -1.264043} + - time: 2.300000 + value: {x: 0.204590, y: 0.574499, z: -1.257306} + - time: 2.333333 + value: {x: 0.205759, y: 0.580311, z: -1.250399} + - time: 2.366667 + value: {x: 0.206937, y: 0.585684, z: -1.243721} + - time: 2.400000 + value: {x: 0.208087, y: 0.590590, z: -1.236941} + - time: 2.433333 + value: {x: 0.209247, y: 0.594970, z: -1.230379} + - time: 2.466667 + value: {x: 0.210393, y: 0.599023, z: -1.223913} + - time: 2.533333 + value: {x: 0.212650, y: 0.605852, z: -1.211219} + - time: 2.600000 + value: {x: 0.214889, y: 0.610944, z: -1.199169} + - time: 2.633333 + value: {x: 0.216002, y: 0.613123, z: -1.193417} + - time: 2.700000 + value: {x: 0.218221, y: 0.616679, z: -1.182479} + - time: 2.800000 + value: {x: 0.221488, y: 0.620558, z: -1.167132} + - time: 2.866667 + value: {x: 0.223651, y: 0.622167, z: -1.157886} + - time: 2.900000 + value: {x: 0.224735, y: 0.622931, z: -1.153559} + - time: 3.000000 + value: {x: 0.227924, y: 0.624464, z: -1.141363} + - time: 3.066667 + value: {x: 0.230045, y: 0.625040, z: -1.134229} + - time: 3.133333 + value: {x: 0.232123, y: 0.625726, z: -1.127375} + - time: 3.166667 + value: {x: 0.233163, y: 0.625860, z: -1.124314} + - time: 3.266667 + value: {x: 0.236253, y: 0.626422, z: -1.115725} + - time: 3.433333 + value: {x: 0.241296, y: 0.627041, z: -1.103102} + - time: 3.533333 + value: {x: 0.244243, y: 0.627517, z: -1.096057} + - time: 3.666667 + value: {x: 0.248058, y: 0.628480, z: -1.086810} + - time: 3.733333 + value: {x: 0.249949, y: 0.629044, z: -1.082643} + - time: 3.866667 + value: {x: 0.253603, y: 0.630588, z: -1.073807} + - time: 4.000000 + value: {x: 0.257199, y: 0.632512, z: -1.066111} + - time: 4.033333 + value: {x: 0.258059, y: 0.633151, z: -1.063855} + - time: 4.100000 + value: {x: 0.259795, y: 0.634371, z: -1.059931} + - time: 4.200000 + value: {x: 0.262371, y: 0.636464, z: -1.054743} + - time: 4.266666 + value: {x: 0.264083, y: 0.637958, z: -1.051882} + - time: 4.400000 + value: {x: 0.267389, y: 0.641538, z: -1.045750} + - time: 4.433333 + value: {x: 0.268226, y: 0.642413, z: -1.044621} + - time: 4.533333 + value: {x: 0.270648, y: 0.645616, z: -1.041199} + - time: 4.600000 + value: {x: 0.272260, y: 0.647860, z: -1.039570} + - time: 4.700000 + value: {x: 0.274655, y: 0.651496, z: -1.037924} + - time: 4.733333 + value: {x: 0.275449, y: 0.652772, z: -1.037604} + - time: 4.800000 + value: {x: 0.277041, y: 0.655379, z: -1.037390} + - time: 4.866667 + value: {x: 0.278591, y: 0.658287, z: -1.037339} + - time: 4.966667 + value: {x: 0.280922, y: 0.662825, z: -1.038311} + - time: 5.333333 + value: {x: 0.289064, y: 0.679822, z: -1.044707} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.493883, y: 0.493883, z: 0.493883} + - time: 0.166667 + value: {x: 0.529612, y: 0.529612, z: 0.529612} + - time: 0.300000 + value: {x: 0.558962, y: 0.558962, z: 0.558962} + - time: 0.433333 + value: {x: 0.588988, y: 0.588988, z: 0.588988} + - time: 0.566667 + value: {x: 0.619684, y: 0.619684, z: 0.619684} + - time: 0.700000 + value: {x: 0.651047, y: 0.651047, z: 0.651047} + - time: 0.833333 + value: {x: 0.683070, y: 0.683070, z: 0.683070} + - time: 0.966667 + value: {x: 0.715751, y: 0.715751, z: 0.715751} + - time: 1.100000 + value: {x: 0.749084, y: 0.749084, z: 0.749084} + - time: 1.233333 + value: {x: 0.783065, y: 0.783065, z: 0.783065} + - time: 1.366667 + value: {x: 0.817690, y: 0.817690, z: 0.817690} + - time: 1.500000 + value: {x: 0.852955, y: 0.852955, z: 0.852955} + - time: 1.666667 + value: {x: 0.897930, y: 0.897930, z: 0.897930} + - time: 1.833333 + value: {x: 0.943893, y: 0.943893, z: 0.943893} + - time: 2.000000 + value: {x: 0.990835, y: 0.990835, z: 0.990835} + - time: 2.166667 + value: {x: 1.038750, y: 1.038750, z: 1.038750} + - time: 2.333333 + value: {x: 1.087632, y: 1.087632, z: 1.087632} + - time: 2.500000 + value: {x: 1.137474, y: 1.137474, z: 1.137474} + - time: 2.666667 + value: {x: 1.188270, y: 1.188270, z: 1.188270} + - time: 2.833333 + value: {x: 1.240014, y: 1.240014, z: 1.240014} + - time: 3.000000 + value: {x: 1.292700, y: 1.292700, z: 1.292700} + - time: 3.166667 + value: {x: 1.346323, y: 1.346323, z: 1.346323} + - time: 3.333333 + value: {x: 1.400878, y: 1.400878, z: 1.400878} + - time: 3.500000 + value: {x: 1.456358, y: 1.456358, z: 1.456358} + - time: 3.666667 + value: {x: 1.512760, y: 1.512760, z: 1.512760} + - time: 3.833333 + value: {x: 1.570077, y: 1.570077, z: 1.570077} + - time: 4.000000 + value: {x: 1.628306, y: 1.628306, z: 1.628306} + - time: 4.166667 + value: {x: 1.687441, y: 1.687441, z: 1.687441} + - time: 4.333333 + value: {x: 1.747478, y: 1.747478, z: 1.747478} + - time: 4.500000 + value: {x: 1.808412, y: 1.808412, z: 1.808412} + - time: 4.666667 + value: {x: 1.870239, y: 1.870239, z: 1.870239} + - time: 4.833333 + value: {x: 1.932955, y: 1.932955, z: 1.932955} + - time: 5.000000 + value: {x: 1.996554, y: 1.996554, z: 1.996554} + - time: 5.166667 + value: {x: 2.061035, y: 2.061035, z: 2.061035} + - time: 5.333333 + value: {x: 2.126391, y: 2.126391, z: 2.126391} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_11: + position: + - time: 0.000000 + value: {x: -0.043337, y: 0.457145, z: -0.006286} + - time: 0.033333 + value: {x: -0.043418, y: 0.457144, z: -0.006299} + - time: 0.066667 + value: {x: -0.067806, y: 0.281693, z: -0.010309} + - time: 0.100000 + value: {x: -0.090044, y: 0.159995, z: -0.015712} + - time: 0.133333 + value: {x: -0.110669, y: 0.083830, z: -0.022027} + - time: 0.166667 + value: {x: -0.130059, y: 0.041789, z: -0.029052} + - time: 0.200000 + value: {x: -0.148561, y: 0.020704, z: -0.036786} + - time: 0.233333 + value: {x: -0.166622, y: 0.009726, z: -0.045639} + - time: 0.266667 + value: {x: -0.185285, y: 0.004535, z: -0.057308} + - time: 0.300000 + value: {x: -0.205580, y: 0.002120, z: -0.073430} + - time: 0.333333 + value: {x: -0.228310, y: 0.001100, z: -0.095261} + - time: 0.366667 + value: {x: -0.254101, y: 0.001151, z: -0.124050} + - time: 0.400000 + value: {x: -0.283038, y: 0.002213, z: -0.159646} + - time: 0.433333 + value: {x: -0.312590, y: 0.004313, z: -0.197172} + - time: 0.466667 + value: {x: -0.339842, y: 0.007496, z: -0.231261} + - time: 0.500000 + value: {x: -0.363353, y: 0.012088, z: -0.258872} + - time: 0.533333 + value: {x: -0.383985, y: 0.018289, z: -0.281769} + - time: 0.566667 + value: {x: -0.402509, y: 0.026521, z: -0.301357} + - time: 0.600000 + value: {x: -0.419018, y: 0.036733, z: -0.317622} + - time: 0.633333 + value: {x: -0.432767, y: 0.048865, z: -0.329078} + - time: 0.666667 + value: {x: -0.443358, y: 0.062273, z: -0.335156} + - time: 0.700000 + value: {x: -0.450872, y: 0.074827, z: -0.335853} + - time: 0.733333 + value: {x: -0.455955, y: 0.083855, z: -0.332479} + - time: 0.766667 + value: {x: -0.459222, y: 0.087186, z: -0.325863} + - time: 0.800000 + value: {x: -0.462057, y: 0.084622, z: -0.319005} + - time: 0.833333 + value: {x: -0.465998, y: 0.076853, z: -0.314327} + - time: 0.866667 + value: {x: -0.472193, y: 0.064331, z: -0.314414} + - time: 0.900000 + value: {x: -0.480829, y: 0.049392, z: -0.319314} + - time: 0.933333 + value: {x: -0.491659, y: 0.034506, z: -0.328610} + - time: 0.966667 + value: {x: -0.504784, y: 0.021661, z: -0.342432} + - time: 1.000000 + value: {x: -0.521798, y: 0.011505, z: -0.363897} + - time: 1.033333 + value: {x: -0.544930, y: 0.004177, z: -0.396967} + - time: 1.066667 + value: {x: -0.575968, y: -0.000422, z: -0.445276} + - time: 1.100000 + value: {x: -0.614427, y: -0.002525, z: -0.507706} + - time: 1.133333 + value: {x: -0.657391, y: -0.002791, z: -0.578865} + - time: 1.166667 + value: {x: -0.702087, y: -0.001814, z: -0.653564} + - time: 1.200000 + value: {x: -0.746220, y: 0.000021, z: -0.727318} + - time: 1.233333 + value: {x: -0.788153, y: 0.002711, z: -0.796973} + - time: 1.266667 + value: {x: -0.826490, y: 0.006318, z: -0.860280} + - time: 1.300000 + value: {x: -0.860214, y: 0.011142, z: -0.914854} + - time: 1.333333 + value: {x: -0.888983, y: 0.016981, z: -0.960397} + - time: 1.366667 + value: {x: -0.912608, y: 0.023849, z: -0.996455} + - time: 1.400000 + value: {x: -0.932517, y: 0.031229, z: -1.025763} + - time: 1.433333 + value: {x: -0.948939, y: 0.039084, z: -1.048545} + - time: 1.466667 + value: {x: -0.962924, y: 0.047005, z: -1.066893} + - time: 1.500000 + value: {x: -0.974933, y: 0.054879, z: -1.081535} + - time: 1.533333 + value: {x: -0.985229, y: 0.062542, z: -1.093346} + - time: 1.566667 + value: {x: -0.994244, y: 0.070189, z: -1.102596} + - time: 1.600000 + value: {x: -1.002186, y: 0.077626, z: -1.110174} + - time: 1.633333 + value: {x: -1.009281, y: 0.084975, z: -1.116190} + - time: 1.666667 + value: {x: -1.015663, y: 0.092197, z: -1.121008} + - time: 1.700000 + value: {x: -1.021454, y: 0.099292, z: -1.124858} + - time: 1.733333 + value: {x: -1.026708, y: 0.106299, z: -1.127787} + - time: 1.766667 + value: {x: -1.031431, y: 0.113195, z: -1.129845} + - time: 1.800000 + value: {x: -1.035663, y: 0.119967, z: -1.131087} + - time: 1.833333 + value: {x: -1.039436, y: 0.126627, z: -1.131527} + - time: 1.866667 + value: {x: -1.042749, y: 0.133070, z: -1.131427} + - time: 1.900000 + value: {x: -1.045521, y: 0.139560, z: -1.130038} + - time: 1.933333 + value: {x: -1.047797, y: 0.145808, z: -1.128124} + - time: 1.966667 + value: {x: -1.049731, y: 0.151938, z: -1.125603} + - time: 2.000000 + value: {x: -1.051155, y: 0.157999, z: -1.122121} + - time: 2.033333 + value: {x: -1.052150, y: 0.163916, z: -1.117940} + - time: 2.066667 + value: {x: -1.052925, y: 0.169669, z: -1.113440} + - time: 2.100000 + value: {x: -1.053204, y: 0.175216, z: -1.107938} + - time: 2.133333 + value: {x: -1.053326, y: 0.180397, z: -1.102529} + - time: 2.166667 + value: {x: -1.053203, y: 0.185291, z: -1.096610} + - time: 2.200000 + value: {x: -1.052958, y: 0.189880, z: -1.090348} + - time: 2.233333 + value: {x: -1.052541, y: 0.193993, z: -1.084234} + - time: 2.266667 + value: {x: -1.052050, y: 0.197748, z: -1.077681} + - time: 2.300000 + value: {x: -1.051493, y: 0.201137, z: -1.071247} + - time: 2.366667 + value: {x: -1.050215, y: 0.206455, z: -1.058314} + - time: 2.400000 + value: {x: -1.049539, y: 0.208386, z: -1.052003} + - time: 2.433333 + value: {x: -1.048897, y: 0.209987, z: -1.045573} + - time: 2.466667 + value: {x: -1.048274, y: 0.211224, z: -1.039335} + - time: 2.500000 + value: {x: -1.047654, y: 0.211812, z: -1.033217} + - time: 2.533333 + value: {x: -1.047063, y: 0.212337, z: -1.027352} + - time: 2.600000 + value: {x: -1.046007, y: 0.211859, z: -1.015835} + - time: 2.633333 + value: {x: -1.045553, y: 0.211310, z: -1.010274} + - time: 2.666667 + value: {x: -1.045167, y: 0.210466, z: -1.004740} + - time: 2.700000 + value: {x: -1.044795, y: 0.209575, z: -0.999477} + - time: 2.766667 + value: {x: -1.044229, y: 0.206841, z: -0.989423} + - time: 2.800000 + value: {x: -1.043974, y: 0.205391, z: -0.984728} + - time: 2.833333 + value: {x: -1.043853, y: 0.203648, z: -0.980009} + - time: 2.900000 + value: {x: -1.043671, y: 0.200125, z: -0.971119} + - time: 2.966667 + value: {x: -1.043742, y: 0.196033, z: -0.962940} + - time: 3.033333 + value: {x: -1.043971, y: 0.191898, z: -0.955291} + - time: 3.066667 + value: {x: -1.044187, y: 0.189686, z: -0.951725} + - time: 3.133333 + value: {x: -1.044648, y: 0.185335, z: -0.945017} + - time: 3.233333 + value: {x: -1.045794, y: 0.178656, z: -0.935724} + - time: 3.333333 + value: {x: -1.047077, y: 0.172018, z: -0.927261} + - time: 3.466667 + value: {x: -1.048872, y: 0.163450, z: -0.916782} + - time: 3.633333 + value: {x: -1.050997, y: 0.153375, z: -0.904426} + - time: 3.733333 + value: {x: -1.052213, y: 0.147789, z: -0.897368} + - time: 3.766667 + value: {x: -1.052596, y: 0.145940, z: -0.895270} + - time: 3.800000 + value: {x: -1.052905, y: 0.144235, z: -0.892681} + - time: 3.900000 + value: {x: -1.053880, y: 0.139226, z: -0.885782} + - time: 3.966667 + value: {x: -1.054612, y: 0.136087, z: -0.881669} + - time: 4.066667 + value: {x: -1.055499, y: 0.131828, z: -0.874954} + - time: 4.100000 + value: {x: -1.055764, y: 0.130390, z: -0.873026} + - time: 4.133333 + value: {x: -1.056123, y: 0.129179, z: -0.870830} + - time: 4.166667 + value: {x: -1.056476, y: 0.127933, z: -0.868887} + - time: 4.200000 + value: {x: -1.056818, y: 0.126636, z: -0.867222} + - time: 4.233333 + value: {x: -1.057248, y: 0.125552, z: -0.865312} + - time: 4.300000 + value: {x: -1.058046, y: 0.123327, z: -0.862013} + - time: 4.333333 + value: {x: -1.058400, y: 0.122385, z: -0.860034} + - time: 4.433333 + value: {x: -1.059583, y: 0.119632, z: -0.855104} + - time: 4.500000 + value: {x: -1.060529, y: 0.117997, z: -0.852369} + - time: 4.533333 + value: {x: -1.061029, y: 0.117188, z: -0.851271} + - time: 4.566667 + value: {x: -1.061629, y: 0.116596, z: -0.849933} + - time: 4.600000 + value: {x: -1.062195, y: 0.115870, z: -0.849050} + - time: 4.666667 + value: {x: -1.063539, y: 0.114843, z: -0.847021} + - time: 4.700000 + value: {x: -1.064211, y: 0.114256, z: -0.846437} + - time: 4.766666 + value: {x: -1.065772, y: 0.113516, z: -0.844994} + - time: 4.833333 + value: {x: -1.067418, y: 0.112798, z: -0.844284} + - time: 4.900000 + value: {x: -1.069274, y: 0.112424, z: -0.843685} + - time: 4.933333 + value: {x: -1.070228, y: 0.112224, z: -0.843711} + - time: 5.333333 + value: {x: -1.082188, y: 0.111939, z: -0.845459} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.493883, y: 0.493883, z: 0.493883} + - time: 0.166667 + value: {x: 0.529612, y: 0.529612, z: 0.529612} + - time: 0.300000 + value: {x: 0.558962, y: 0.558962, z: 0.558962} + - time: 0.433333 + value: {x: 0.588988, y: 0.588988, z: 0.588988} + - time: 0.566667 + value: {x: 0.619684, y: 0.619684, z: 0.619684} + - time: 0.700000 + value: {x: 0.651047, y: 0.651047, z: 0.651047} + - time: 0.833333 + value: {x: 0.683070, y: 0.683070, z: 0.683070} + - time: 0.966667 + value: {x: 0.715751, y: 0.715751, z: 0.715751} + - time: 1.100000 + value: {x: 0.749084, y: 0.749084, z: 0.749084} + - time: 1.233333 + value: {x: 0.783065, y: 0.783065, z: 0.783065} + - time: 1.366667 + value: {x: 0.817690, y: 0.817690, z: 0.817690} + - time: 1.500000 + value: {x: 0.852955, y: 0.852955, z: 0.852955} + - time: 1.666667 + value: {x: 0.897930, y: 0.897930, z: 0.897930} + - time: 1.833333 + value: {x: 0.943893, y: 0.943893, z: 0.943893} + - time: 2.000000 + value: {x: 0.990835, y: 0.990835, z: 0.990835} + - time: 2.166667 + value: {x: 1.038750, y: 1.038750, z: 1.038750} + - time: 2.333333 + value: {x: 1.087632, y: 1.087632, z: 1.087632} + - time: 2.500000 + value: {x: 1.137474, y: 1.137474, z: 1.137474} + - time: 2.666667 + value: {x: 1.188270, y: 1.188270, z: 1.188270} + - time: 2.833333 + value: {x: 1.240014, y: 1.240014, z: 1.240014} + - time: 3.000000 + value: {x: 1.292700, y: 1.292700, z: 1.292700} + - time: 3.166667 + value: {x: 1.346323, y: 1.346323, z: 1.346323} + - time: 3.333333 + value: {x: 1.400878, y: 1.400878, z: 1.400878} + - time: 3.500000 + value: {x: 1.456358, y: 1.456358, z: 1.456358} + - time: 3.666667 + value: {x: 1.512760, y: 1.512760, z: 1.512760} + - time: 3.833333 + value: {x: 1.570077, y: 1.570077, z: 1.570077} + - time: 4.000000 + value: {x: 1.628306, y: 1.628306, z: 1.628306} + - time: 4.166667 + value: {x: 1.687441, y: 1.687441, z: 1.687441} + - time: 4.333333 + value: {x: 1.747478, y: 1.747478, z: 1.747478} + - time: 4.500000 + value: {x: 1.808412, y: 1.808412, z: 1.808412} + - time: 4.666667 + value: {x: 1.870239, y: 1.870239, z: 1.870239} + - time: 4.833333 + value: {x: 1.932955, y: 1.932955, z: 1.932955} + - time: 5.000000 + value: {x: 1.996554, y: 1.996554, z: 1.996554} + - time: 5.166667 + value: {x: 2.061035, y: 2.061035, z: 2.061035} + - time: 5.333333 + value: {x: 2.126391, y: 2.126391, z: 2.126391} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_12: + position: + - time: 0.000000 + value: {x: 0.018476, y: 0.495621, z: -0.013713} + - time: 0.033333 + value: {x: 0.018510, y: 0.495691, z: -0.013739} + - time: 0.066667 + value: {x: 0.028522, y: 0.341658, z: -0.021875} + - time: 0.100000 + value: {x: 0.036198, y: 0.238556, z: -0.030910} + - time: 0.133333 + value: {x: 0.042251, y: 0.178984, z: -0.040451} + - time: 0.166667 + value: {x: 0.047063, y: 0.152018, z: -0.050367} + - time: 0.200000 + value: {x: 0.050801, y: 0.144776, z: -0.060774} + - time: 0.233333 + value: {x: 0.053373, y: 0.146634, z: -0.072117} + - time: 0.266667 + value: {x: 0.053984, y: 0.153467, z: -0.086059} + - time: 0.300000 + value: {x: 0.051813, y: 0.162344, z: -0.104343} + - time: 0.333333 + value: {x: 0.046229, y: 0.171931, z: -0.128338} + - time: 0.366667 + value: {x: 0.036677, y: 0.182144, z: -0.158993} + - time: 0.400000 + value: {x: 0.023214, y: 0.192844, z: -0.196440} + - time: 0.433333 + value: {x: 0.008459, y: 0.204094, z: -0.235837} + - time: 0.466667 + value: {x: -0.004650, y: 0.216137, z: -0.271536} + - time: 0.500000 + value: {x: -0.014557, y: 0.229134, z: -0.300882} + - time: 0.533333 + value: {x: -0.022117, y: 0.243472, z: -0.325348} + - time: 0.566667 + value: {x: -0.028062, y: 0.259603, z: -0.346339} + - time: 0.600000 + value: {x: -0.032414, y: 0.277393, z: -0.364046} + - time: 0.633333 + value: {x: -0.034386, y: 0.296769, z: -0.377055} + - time: 0.666667 + value: {x: -0.033599, y: 0.317267, z: -0.384489} + - time: 0.700000 + value: {x: -0.030080, y: 0.336678, z: -0.386528} + - time: 0.733333 + value: {x: -0.024480, y: 0.352436, z: -0.384309} + - time: 0.766667 + value: {x: -0.017327, y: 0.362155, z: -0.379102} + - time: 0.800000 + value: {x: -0.010077, y: 0.365969, z: -0.373296} + - time: 0.833333 + value: {x: -0.004155, y: 0.364231, z: -0.369974} + - time: 0.866667 + value: {x: -0.000790, y: 0.357744, z: -0.371075} + - time: 0.900000 + value: {x: -0.000093, y: 0.348635, z: -0.377066} + - time: 0.933333 + value: {x: -0.001817, y: 0.339425, z: -0.387442} + - time: 0.966667 + value: {x: -0.006044, y: 0.332080, z: -0.402396} + - time: 1.000000 + value: {x: -0.014383, y: 0.327350, z: -0.424862} + - time: 1.033333 + value: {x: -0.029007, y: 0.325218, z: -0.459112} + - time: 1.066667 + value: {x: -0.051757, y: 0.325801, z: -0.508378} + - time: 1.100000 + value: {x: -0.082097, y: 0.328727, z: -0.571824} + - time: 1.133333 + value: {x: -0.117124, y: 0.333418, z: -0.643909} + - time: 1.166667 + value: {x: -0.154068, y: 0.339307, z: -0.719403} + - time: 1.200000 + value: {x: -0.190590, y: 0.345896, z: -0.794046} + - time: 1.233333 + value: {x: -0.225033, y: 0.353134, z: -0.864783} + - time: 1.266667 + value: {x: -0.256079, y: 0.361373, z: -0.928816} + - time: 1.300000 + value: {x: -0.282603, y: 0.370568, z: -0.984429} + - time: 1.333333 + value: {x: -0.304336, y: 0.380787, z: -1.030819} + - time: 1.366667 + value: {x: -0.321061, y: 0.391974, z: -1.067666} + - time: 1.400000 + value: {x: -0.334218, y: 0.403657, z: -1.097628} + - time: 1.433333 + value: {x: -0.343984, y: 0.415651, z: -1.121216} + - time: 1.466667 + value: {x: -0.351434, y: 0.427638, z: -1.140351} + - time: 1.500000 + value: {x: -0.356994, y: 0.439409, z: -1.155954} + - time: 1.533333 + value: {x: -0.361007, y: 0.451095, z: -1.168342} + - time: 1.566667 + value: {x: -0.363787, y: 0.462481, z: -1.178566} + - time: 1.600000 + value: {x: -0.365645, y: 0.473758, z: -1.186791} + - time: 1.633333 + value: {x: -0.366739, y: 0.484812, z: -1.193576} + - time: 1.666667 + value: {x: -0.367224, y: 0.495695, z: -1.199119} + - time: 1.700000 + value: {x: -0.367218, y: 0.506412, z: -1.203642} + - time: 1.733333 + value: {x: -0.366764, y: 0.516965, z: -1.207269} + - time: 1.766667 + value: {x: -0.365873, y: 0.527362, z: -1.209990} + - time: 1.800000 + value: {x: -0.364581, y: 0.537581, z: -1.211883} + - time: 1.833333 + value: {x: -0.362906, y: 0.547600, z: -1.213029} + - time: 1.866667 + value: {x: -0.360903, y: 0.557520, z: -1.213301} + - time: 1.900000 + value: {x: -0.358361, y: 0.567154, z: -1.212811} + - time: 1.933333 + value: {x: -0.355471, y: 0.576730, z: -1.211340} + - time: 1.966667 + value: {x: -0.352302, y: 0.586096, z: -1.209337} + - time: 2.000000 + value: {x: -0.348680, y: 0.595276, z: -1.206497} + - time: 2.033333 + value: {x: -0.344708, y: 0.604275, z: -1.202929} + - time: 2.066667 + value: {x: -0.340589, y: 0.613071, z: -1.199021} + - time: 2.100000 + value: {x: -0.336010, y: 0.621500, z: -1.194327} + - time: 2.133333 + value: {x: -0.331412, y: 0.629748, z: -1.189281} + - time: 2.166667 + value: {x: -0.326608, y: 0.637568, z: -1.183907} + - time: 2.200000 + value: {x: -0.321706, y: 0.644891, z: -1.178463} + - time: 2.233333 + value: {x: -0.316781, y: 0.651998, z: -1.172592} + - time: 2.266667 + value: {x: -0.311766, y: 0.658420, z: -1.166820} + - time: 2.300000 + value: {x: -0.306783, y: 0.664561, z: -1.160921} + - time: 2.333333 + value: {x: -0.301799, y: 0.670164, z: -1.154830} + - time: 2.366667 + value: {x: -0.296840, y: 0.675292, z: -1.148999} + - time: 2.400000 + value: {x: -0.291948, y: 0.679959, z: -1.143018} + - time: 2.433333 + value: {x: -0.287089, y: 0.684070, z: -1.137274} + - time: 2.466667 + value: {x: -0.282329, y: 0.687847, z: -1.131592} + - time: 2.533333 + value: {x: -0.273056, y: 0.694105, z: -1.120376} + - time: 2.600000 + value: {x: -0.264134, y: 0.698574, z: -1.109725} + - time: 2.633333 + value: {x: -0.259817, y: 0.700422, z: -1.104640} + - time: 2.700000 + value: {x: -0.251455, y: 0.703275, z: -1.094985} + - time: 2.800000 + value: {x: -0.239685, y: 0.706051, z: -1.081323} + - time: 2.866667 + value: {x: -0.232348, y: 0.706869, z: -1.073086} + - time: 2.900000 + value: {x: -0.228781, y: 0.707213, z: -1.069256} + - time: 3.000000 + value: {x: -0.218780, y: 0.707477, z: -1.058311} + - time: 3.100000 + value: {x: -0.209616, y: 0.707058, z: -1.048705} + - time: 3.166667 + value: {x: -0.203924, y: 0.706591, z: -1.042907} + - time: 3.266667 + value: {x: -0.195936, y: 0.705692, z: -1.035086} + - time: 3.333333 + value: {x: -0.190883, y: 0.704815, z: -1.030365} + - time: 3.500000 + value: {x: -0.178979, y: 0.702950, z: -1.019085} + - time: 3.700000 + value: {x: -0.165650, y: 0.701094, z: -1.006259} + - time: 3.733333 + value: {x: -0.163535, y: 0.700777, z: -1.004420} + - time: 3.833333 + value: {x: -0.157180, y: 0.700167, z: -0.998099} + - time: 3.900000 + value: {x: -0.153082, y: 0.699792, z: -0.994237} + - time: 4.000000 + value: {x: -0.147264, y: 0.699516, z: -0.988751} + - time: 4.033333 + value: {x: -0.145282, y: 0.699558, z: -0.986577} + - time: 4.066667 + value: {x: -0.143321, y: 0.699447, z: -0.984824} + - time: 4.100000 + value: {x: -0.141450, y: 0.699550, z: -0.982819} + - time: 4.133333 + value: {x: -0.139596, y: 0.699500, z: -0.981233} + - time: 4.200000 + value: {x: -0.136106, y: 0.699776, z: -0.977785} + - time: 4.266666 + value: {x: -0.132794, y: 0.700000, z: -0.974982} + - time: 4.400000 + value: {x: -0.126333, y: 0.701035, z: -0.968898} + - time: 4.433333 + value: {x: -0.124819, y: 0.701255, z: -0.967776} + - time: 4.533333 + value: {x: -0.120710, y: 0.702520, z: -0.964211} + - time: 4.566667 + value: {x: -0.119433, y: 0.702875, z: -0.963450} + - time: 4.600000 + value: {x: -0.118252, y: 0.703454, z: -0.962433} + - time: 4.700000 + value: {x: -0.115008, y: 0.705109, z: -0.960459} + - time: 4.733333 + value: {x: -0.114043, y: 0.705720, z: -0.960003} + - time: 4.800000 + value: {x: -0.112280, y: 0.706988, z: -0.959488} + - time: 4.866667 + value: {x: -0.110789, y: 0.708565, z: -0.959052} + - time: 4.966667 + value: {x: -0.108983, y: 0.711083, z: -0.959363} + - time: 5.333333 + value: {x: -0.104400, y: 0.720581, z: -0.962921} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.299833, y: 0.299833, z: 0.299833} + - time: 0.166667 + value: {x: 0.326207, y: 0.326207, z: 0.326207} + - time: 0.333333 + value: {x: 0.353527, y: 0.353527, z: 0.353527} + - time: 0.500000 + value: {x: 0.381785, y: 0.381785, z: 0.381785} + - time: 0.666667 + value: {x: 0.410968, y: 0.410968, z: 0.410968} + - time: 0.833333 + value: {x: 0.441068, y: 0.441068, z: 0.441068} + - time: 1.000000 + value: {x: 0.472075, y: 0.472075, z: 0.472075} + - time: 1.166667 + value: {x: 0.503980, y: 0.503980, z: 0.503980} + - time: 1.333333 + value: {x: 0.536776, y: 0.536776, z: 0.536776} + - time: 1.500000 + value: {x: 0.570453, y: 0.570453, z: 0.570453} + - time: 1.666667 + value: {x: 0.605005, y: 0.605005, z: 0.605005} + - time: 1.833333 + value: {x: 0.640424, y: 0.640424, z: 0.640424} + - time: 2.000000 + value: {x: 0.676704, y: 0.676704, z: 0.676704} + - time: 2.166667 + value: {x: 0.713836, y: 0.713836, z: 0.713836} + - time: 2.333333 + value: {x: 0.751816, y: 0.751816, z: 0.751816} + - time: 2.500000 + value: {x: 0.790636, y: 0.790636, z: 0.790636} + - time: 2.666667 + value: {x: 0.830290, y: 0.830290, z: 0.830290} + - time: 2.833333 + value: {x: 0.870774, y: 0.870774, z: 0.870774} + - time: 3.000000 + value: {x: 0.912081, y: 0.912081, z: 0.912081} + - time: 3.166667 + value: {x: 0.954205, y: 0.954205, z: 0.954205} + - time: 3.333333 + value: {x: 0.997142, y: 0.997142, z: 0.997142} + - time: 3.500000 + value: {x: 1.040886, y: 1.040886, z: 1.040886} + - time: 3.666667 + value: {x: 1.085433, y: 1.085433, z: 1.085433} + - time: 3.833333 + value: {x: 1.130777, y: 1.130777, z: 1.130777} + - time: 4.000000 + value: {x: 1.176914, y: 1.176914, z: 1.176914} + - time: 4.166667 + value: {x: 1.223840, y: 1.223840, z: 1.223840} + - time: 4.333333 + value: {x: 1.271550, y: 1.271550, z: 1.271550} + - time: 4.500000 + value: {x: 1.320039, y: 1.320039, z: 1.320039} + - time: 4.666667 + value: {x: 1.369305, y: 1.369305, z: 1.369305} + - time: 4.833333 + value: {x: 1.419342, y: 1.419342, z: 1.419342} + - time: 5.000000 + value: {x: 1.470146, y: 1.470146, z: 1.470146} + - time: 5.166667 + value: {x: 1.521715, y: 1.521715, z: 1.521715} + - time: 5.333333 + value: {x: 1.574043, y: 1.574043, z: 1.574043} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_13: + position: + - time: 0.000000 + value: {x: -0.047420, y: 0.457087, z: -0.007235} + - time: 0.033333 + value: {x: -0.047642, y: 0.457083, z: -0.007270} + - time: 0.066667 + value: {x: -0.074796, y: 0.281597, z: -0.011654} + - time: 0.100000 + value: {x: -0.100414, y: 0.159866, z: -0.016645} + - time: 0.133333 + value: {x: -0.124824, y: 0.083670, z: -0.022033} + - time: 0.166667 + value: {x: -0.148321, y: 0.041598, z: -0.027739} + - time: 0.200000 + value: {x: -0.171264, y: 0.020483, z: -0.033776} + - time: 0.233333 + value: {x: -0.194273, y: 0.009476, z: -0.040413} + - time: 0.266667 + value: {x: -0.219094, y: 0.004255, z: -0.048714} + - time: 0.300000 + value: {x: -0.247471, y: 0.001811, z: -0.059663} + - time: 0.333333 + value: {x: -0.280756, y: 0.000766, z: -0.074006} + - time: 0.366667 + value: {x: -0.320033, y: 0.000786, z: -0.092595} + - time: 0.400000 + value: {x: -0.365384, y: 0.001821, z: -0.115268} + - time: 0.433333 + value: {x: -0.412218, y: 0.003896, z: -0.139057} + - time: 0.466667 + value: {x: -0.455278, y: 0.007048, z: -0.160776} + - time: 0.500000 + value: {x: -0.491923, y: 0.011617, z: -0.178475} + - time: 0.533333 + value: {x: -0.523692, y: 0.017790, z: -0.193312} + - time: 0.566667 + value: {x: -0.551950, y: 0.025990, z: -0.206143} + - time: 0.600000 + value: {x: -0.576828, y: 0.036173, z: -0.216908} + - time: 0.633333 + value: {x: -0.596966, y: 0.048284, z: -0.224686} + - time: 0.666667 + value: {x: -0.611655, y: 0.061663, z: -0.229216} + - time: 0.700000 + value: {x: -0.621012, y: 0.074191, z: -0.230449} + - time: 0.733333 + value: {x: -0.626199, y: 0.083185, z: -0.229232} + - time: 0.766667 + value: {x: -0.628283, y: 0.086496, z: -0.225947} + - time: 0.800000 + value: {x: -0.629773, y: 0.083897, z: -0.222595} + - time: 0.833333 + value: {x: -0.633389, y: 0.076108, z: -0.220461} + - time: 0.866667 + value: {x: -0.641218, y: 0.063551, z: -0.221307} + - time: 0.900000 + value: {x: -0.653568, y: 0.048583, z: -0.225040} + - time: 0.933333 + value: {x: -0.669992, y: 0.033668, z: -0.231434} + - time: 0.966667 + value: {x: -0.690658, y: 0.020799, z: -0.240551} + - time: 1.000000 + value: {x: -0.718441, y: 0.010612, z: -0.254341} + - time: 1.033333 + value: {x: -0.757316, y: 0.003263, z: -0.275124} + - time: 1.066667 + value: {x: -0.810516, y: -0.001366, z: -0.305232} + - time: 1.100000 + value: {x: -0.877148, y: -0.003494, z: -0.343902} + - time: 1.133333 + value: {x: -0.951976, y: -0.003790, z: -0.387897} + - time: 1.166667 + value: {x: -1.030021, y: -0.002849, z: -0.434073} + - time: 1.200000 + value: {x: -1.107140, y: -0.001043, z: -0.479635} + - time: 1.233333 + value: {x: -1.180382, y: 0.001628, z: -0.522631} + - time: 1.266667 + value: {x: -1.247271, y: 0.005199, z: -0.561861} + - time: 1.300000 + value: {x: -1.305935, y: 0.010003, z: -0.595670} + - time: 1.333333 + value: {x: -1.355788, y: 0.015814, z: -0.624031} + - time: 1.366667 + value: {x: -1.396478, y: 0.022652, z: -0.646628} + - time: 1.400000 + value: {x: -1.430574, y: 0.029994, z: -0.665150} + - time: 1.433333 + value: {x: -1.458465, y: 0.037821, z: -0.679643} + - time: 1.466667 + value: {x: -1.482049, y: 0.045713, z: -0.691435} + - time: 1.500000 + value: {x: -1.502140, y: 0.053569, z: -0.700908} + - time: 1.533333 + value: {x: -1.519236, y: 0.061194, z: -0.708770} + - time: 1.566667 + value: {x: -1.534071, y: 0.068826, z: -0.714940} + - time: 1.600000 + value: {x: -1.547058, y: 0.076229, z: -0.720186} + - time: 1.633333 + value: {x: -1.558573, y: 0.083553, z: -0.724436} + - time: 1.666667 + value: {x: -1.568866, y: 0.090747, z: -0.727963} + - time: 1.700000 + value: {x: -1.578154, y: 0.097811, z: -0.730909} + - time: 1.733333 + value: {x: -1.586529, y: 0.104791, z: -0.733279} + - time: 1.766667 + value: {x: -1.594002, y: 0.111657, z: -0.735123} + - time: 1.800000 + value: {x: -1.600644, y: 0.118399, z: -0.736468} + - time: 1.833333 + value: {x: -1.606507, y: 0.125034, z: -0.737299} + - time: 1.866667 + value: {x: -1.611607, y: 0.131431, z: -0.737904} + - time: 1.900000 + value: {x: -1.615753, y: 0.137909, z: -0.737545} + - time: 1.933333 + value: {x: -1.619078, y: 0.144117, z: -0.737010} + - time: 1.966667 + value: {x: -1.621828, y: 0.150211, z: -0.736074} + - time: 2.000000 + value: {x: -1.623694, y: 0.156246, z: -0.734506} + - time: 2.033333 + value: {x: -1.624835, y: 0.162135, z: -0.732517} + - time: 2.066667 + value: {x: -1.625620, y: 0.167860, z: -0.730333} + - time: 2.100000 + value: {x: -1.625541, y: 0.173395, z: -0.727460} + - time: 2.133333 + value: {x: -1.625242, y: 0.178532, z: -0.724789} + - time: 2.166667 + value: {x: -1.624530, y: 0.183396, z: -0.721740} + - time: 2.200000 + value: {x: -1.623621, y: 0.187975, z: -0.718383} + - time: 2.233333 + value: {x: -1.622467, y: 0.192037, z: -0.715307} + - time: 2.266667 + value: {x: -1.621186, y: 0.195782, z: -0.711774} + - time: 2.300000 + value: {x: -1.619834, y: 0.199142, z: -0.708391} + - time: 2.333333 + value: {x: -1.618350, y: 0.201858, z: -0.705121} + - time: 2.366667 + value: {x: -1.616932, y: 0.204401, z: -0.701591} + - time: 2.400000 + value: {x: -1.615471, y: 0.206290, z: -0.698339} + - time: 2.433333 + value: {x: -1.614083, y: 0.207876, z: -0.694884} + - time: 2.466667 + value: {x: -1.612766, y: 0.209090, z: -0.691587} + - time: 2.533333 + value: {x: -1.610297, y: 0.210130, z: -0.685398} + - time: 2.600000 + value: {x: -1.608211, y: 0.209589, z: -0.679439} + - time: 2.633333 + value: {x: -1.607338, y: 0.209013, z: -0.676556} + - time: 2.666667 + value: {x: -1.606603, y: 0.208160, z: -0.673603} + - time: 2.700000 + value: {x: -1.605929, y: 0.207239, z: -0.670906} + - time: 2.733333 + value: {x: -1.605406, y: 0.205904, z: -0.668272} + - time: 2.800000 + value: {x: -1.604597, y: 0.202953, z: -0.663501} + - time: 2.833333 + value: {x: -1.604461, y: 0.201199, z: -0.661040} + - time: 2.866667 + value: {x: -1.604353, y: 0.199310, z: -0.658938} + - time: 2.900000 + value: {x: -1.604381, y: 0.197625, z: -0.656583} + - time: 2.933333 + value: {x: -1.604574, y: 0.195565, z: -0.654513} + - time: 3.000000 + value: {x: -1.605156, y: 0.191384, z: -0.650778} + - time: 3.066667 + value: {x: -1.606304, y: 0.187051, z: -0.647151} + - time: 3.133333 + value: {x: -1.607684, y: 0.182620, z: -0.644113} + - time: 3.233333 + value: {x: -1.610680, y: 0.175878, z: -0.639760} + - time: 3.333333 + value: {x: -1.614089, y: 0.169161, z: -0.635969} + - time: 3.533333 + value: {x: -1.621584, y: 0.156331, z: -0.629195} + - time: 3.666667 + value: {x: -1.626503, y: 0.148265, z: -0.625135} + - time: 3.733333 + value: {x: -1.629126, y: 0.144615, z: -0.623013} + - time: 3.766667 + value: {x: -1.630400, y: 0.142710, z: -0.622279} + - time: 3.800000 + value: {x: -1.631532, y: 0.141005, z: -0.621021} + - time: 3.833333 + value: {x: -1.632650, y: 0.139186, z: -0.620136} + - time: 3.933333 + value: {x: -1.636415, y: 0.134341, z: -0.617145} + - time: 3.966667 + value: {x: -1.637719, y: 0.132703, z: -0.616483} + - time: 4.000000 + value: {x: -1.639030, y: 0.131300, z: -0.615396} + - time: 4.033333 + value: {x: -1.640091, y: 0.129697, z: -0.614671} + - time: 4.066667 + value: {x: -1.641303, y: 0.128393, z: -0.613505} + - time: 4.100000 + value: {x: -1.642481, y: 0.126895, z: -0.612869} + - time: 4.133333 + value: {x: -1.643810, y: 0.125695, z: -0.611790} + - time: 4.166667 + value: {x: -1.645151, y: 0.124425, z: -0.610997} + - time: 4.200000 + value: {x: -1.646495, y: 0.123064, z: -0.610527} + - time: 4.233333 + value: {x: -1.647985, y: 0.121984, z: -0.609645} + - time: 4.300000 + value: {x: -1.650908, y: 0.119684, z: -0.608509} + - time: 4.333333 + value: {x: -1.652286, y: 0.118750, z: -0.607565} + - time: 4.400000 + value: {x: -1.655125, y: 0.116695, z: -0.606505} + - time: 4.433333 + value: {x: -1.656721, y: 0.115931, z: -0.605680} + - time: 4.500000 + value: {x: -1.660006, y: 0.114235, z: -0.604813} + - time: 4.533333 + value: {x: -1.661718, y: 0.113368, z: -0.604645} + - time: 4.566667 + value: {x: -1.663592, y: 0.112791, z: -0.604052} + - time: 4.600000 + value: {x: -1.665439, y: 0.112002, z: -0.604032} + - time: 4.666667 + value: {x: -1.669496, y: 0.110969, z: -0.603370} + - time: 4.700000 + value: {x: -1.671553, y: 0.110316, z: -0.603536} + - time: 4.766666 + value: {x: -1.676041, y: 0.109568, z: -0.603226} + - time: 4.800000 + value: {x: -1.678365, y: 0.109188, z: -0.603313} + - time: 4.833333 + value: {x: -1.680729, y: 0.108768, z: -0.603639} + - time: 4.900000 + value: {x: -1.685799, y: 0.108375, z: -0.603874} + - time: 4.933333 + value: {x: -1.688401, y: 0.108125, z: -0.604335} + - time: 5.333333 + value: {x: -1.720912, y: 0.107555, z: -0.609463} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.299833, y: 0.299833, z: 0.299833} + - time: 0.166667 + value: {x: 0.326207, y: 0.326207, z: 0.326207} + - time: 0.333333 + value: {x: 0.353527, y: 0.353527, z: 0.353527} + - time: 0.500000 + value: {x: 0.381785, y: 0.381785, z: 0.381785} + - time: 0.666667 + value: {x: 0.410968, y: 0.410968, z: 0.410968} + - time: 0.833333 + value: {x: 0.441068, y: 0.441068, z: 0.441068} + - time: 1.000000 + value: {x: 0.472075, y: 0.472075, z: 0.472075} + - time: 1.166667 + value: {x: 0.503980, y: 0.503980, z: 0.503980} + - time: 1.333333 + value: {x: 0.536776, y: 0.536776, z: 0.536776} + - time: 1.500000 + value: {x: 0.570453, y: 0.570453, z: 0.570453} + - time: 1.666667 + value: {x: 0.605005, y: 0.605005, z: 0.605005} + - time: 1.833333 + value: {x: 0.640424, y: 0.640424, z: 0.640424} + - time: 2.000000 + value: {x: 0.676704, y: 0.676704, z: 0.676704} + - time: 2.166667 + value: {x: 0.713836, y: 0.713836, z: 0.713836} + - time: 2.333333 + value: {x: 0.751816, y: 0.751816, z: 0.751816} + - time: 2.500000 + value: {x: 0.790636, y: 0.790636, z: 0.790636} + - time: 2.666667 + value: {x: 0.830290, y: 0.830290, z: 0.830290} + - time: 2.833333 + value: {x: 0.870774, y: 0.870774, z: 0.870774} + - time: 3.000000 + value: {x: 0.912081, y: 0.912081, z: 0.912081} + - time: 3.166667 + value: {x: 0.954205, y: 0.954205, z: 0.954205} + - time: 3.333333 + value: {x: 0.997142, y: 0.997142, z: 0.997142} + - time: 3.500000 + value: {x: 1.040886, y: 1.040886, z: 1.040886} + - time: 3.666667 + value: {x: 1.085433, y: 1.085433, z: 1.085433} + - time: 3.833333 + value: {x: 1.130777, y: 1.130777, z: 1.130777} + - time: 4.000000 + value: {x: 1.176914, y: 1.176914, z: 1.176914} + - time: 4.166667 + value: {x: 1.223840, y: 1.223840, z: 1.223840} + - time: 4.333333 + value: {x: 1.271550, y: 1.271550, z: 1.271550} + - time: 4.500000 + value: {x: 1.320039, y: 1.320039, z: 1.320039} + - time: 4.666667 + value: {x: 1.369305, y: 1.369305, z: 1.369305} + - time: 4.833333 + value: {x: 1.419342, y: 1.419342, z: 1.419342} + - time: 5.000000 + value: {x: 1.470146, y: 1.470146, z: 1.470146} + - time: 5.166667 + value: {x: 1.521715, y: 1.521715, z: 1.521715} + - time: 5.333333 + value: {x: 1.574043, y: 1.574043, z: 1.574043} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_14: + position: + - time: 0.000000 + value: {x: 0.041692, y: 0.463772, z: 0.026417} + - time: 0.033333 + value: {x: 0.041881, y: 0.463800, z: 0.026537} + - time: 0.066667 + value: {x: 0.064839, y: 0.292075, z: 0.041077} + - time: 0.100000 + value: {x: 0.083061, y: 0.173624, z: 0.052644} + - time: 0.133333 + value: {x: 0.098015, y: 0.100375, z: 0.062123} + - time: 0.166667 + value: {x: 0.110491, y: 0.061007, z: 0.070000} + - time: 0.200000 + value: {x: 0.120823, y: 0.042388, z: 0.076529} + - time: 0.233333 + value: {x: 0.128891, y: 0.033710, z: 0.081629} + - time: 0.266667 + value: {x: 0.133330, y: 0.030695, z: 0.084377} + - time: 0.300000 + value: {x: 0.132649, y: 0.030333, z: 0.083887} + - time: 0.333333 + value: {x: 0.125684, y: 0.031236, z: 0.079486} + - time: 0.366667 + value: {x: 0.111605, y: 0.033168, z: 0.070411} + - time: 0.400000 + value: {x: 0.090395, y: 0.036016, z: 0.056853} + - time: 0.433333 + value: {x: 0.066751, y: 0.039808, z: 0.041826} + - time: 0.466667 + value: {x: 0.046104, y: 0.044664, z: 0.028568} + - time: 0.500000 + value: {x: 0.031070, y: 0.050828, z: 0.019033} + - time: 0.533333 + value: {x: 0.020261, y: 0.058574, z: 0.012112} + - time: 0.566667 + value: {x: 0.012371, y: 0.068330, z: 0.006969} + - time: 0.600000 + value: {x: 0.007264, y: 0.080002, z: 0.003669} + - time: 0.633333 + value: {x: 0.006325, y: 0.093516, z: 0.003147} + - time: 0.666667 + value: {x: 0.010390, y: 0.108306, z: 0.005698} + - time: 0.700000 + value: {x: 0.019324, y: 0.122202, z: 0.011374} + - time: 0.733333 + value: {x: 0.032047, y: 0.132572, z: 0.019350} + - time: 0.766667 + value: {x: 0.047395, y: 0.137150, z: 0.029223} + - time: 0.800000 + value: {x: 0.063056, y: 0.135881, z: 0.039046} + - time: 0.833333 + value: {x: 0.076147, y: 0.129299, z: 0.047496} + - time: 0.866667 + value: {x: 0.084783, y: 0.118013, z: 0.052864} + - time: 0.900000 + value: {x: 0.088558, y: 0.104264, z: 0.055219} + - time: 0.933333 + value: {x: 0.087958, y: 0.090540, z: 0.054800} + - time: 0.966667 + value: {x: 0.082814, y: 0.078817, z: 0.051548} + - time: 1.000000 + value: {x: 0.070319, y: 0.069789, z: 0.043530} + - time: 1.033333 + value: {x: 0.046419, y: 0.063522, z: 0.028407} + - time: 1.066667 + value: {x: 0.008010, y: 0.060013, z: 0.003883} + - time: 1.100000 + value: {x: -0.044085, y: 0.058963, z: -0.029295} + - time: 1.133333 + value: {x: -0.104577, y: 0.059751, z: -0.067879} + - time: 1.166667 + value: {x: -0.168466, y: 0.061791, z: -0.108714} + - time: 1.200000 + value: {x: -0.231664, y: 0.064648, z: -0.149019} + - time: 1.233333 + value: {x: -0.291243, y: 0.068295, z: -0.186848} + - time: 1.266667 + value: {x: -0.344558, y: 0.072924, z: -0.220956} + - time: 1.300000 + value: {x: -0.389924, y: 0.078679, z: -0.249737} + - time: 1.333333 + value: {x: -0.426603, y: 0.085479, z: -0.273124} + - time: 1.366667 + value: {x: -0.454274, y: 0.093304, z: -0.290806} + - time: 1.400000 + value: {x: -0.475480, y: 0.101656, z: -0.304466} + - time: 1.433333 + value: {x: -0.490687, y: 0.110433, z: -0.314169} + - time: 1.466667 + value: {x: -0.501738, y: 0.119264, z: -0.321228} + - time: 1.500000 + value: {x: -0.509498, y: 0.127994, z: -0.326037} + - time: 1.533333 + value: {x: -0.514298, y: 0.136590, z: -0.329262} + - time: 1.566667 + value: {x: -0.517098, y: 0.145063, z: -0.330877} + - time: 1.600000 + value: {x: -0.518089, y: 0.153390, z: -0.331599} + - time: 1.633333 + value: {x: -0.517782, y: 0.161586, z: -0.331381} + - time: 1.666667 + value: {x: -0.516370, y: 0.169654, z: -0.330487} + - time: 1.700000 + value: {x: -0.514066, y: 0.177595, z: -0.329057} + - time: 1.733333 + value: {x: -0.510980, y: 0.185431, z: -0.327099} + - time: 1.766667 + value: {x: -0.507104, y: 0.193152, z: -0.324657} + - time: 1.800000 + value: {x: -0.502511, y: 0.200741, z: -0.321760} + - time: 1.833333 + value: {x: -0.497271, y: 0.208193, z: -0.318395} + - time: 1.866667 + value: {x: -0.491281, y: 0.215498, z: -0.314823} + - time: 1.900000 + value: {x: -0.484607, y: 0.222714, z: -0.310367} + - time: 1.933333 + value: {x: -0.477081, y: 0.229785, z: -0.305740} + - time: 1.966667 + value: {x: -0.469108, y: 0.236712, z: -0.300761} + - time: 2.000000 + value: {x: -0.460394, y: 0.243531, z: -0.295195} + - time: 2.033333 + value: {x: -0.451046, y: 0.250202, z: -0.289244} + - time: 2.066667 + value: {x: -0.441435, y: 0.256705, z: -0.283134} + - time: 2.100000 + value: {x: -0.431126, y: 0.262943, z: -0.276389} + - time: 2.133333 + value: {x: -0.420554, y: 0.268910, z: -0.269846} + - time: 2.166667 + value: {x: -0.409718, y: 0.274539, z: -0.262974} + - time: 2.200000 + value: {x: -0.398862, y: 0.279788, z: -0.255850} + - time: 2.233333 + value: {x: -0.387675, y: 0.284691, z: -0.248998} + - time: 2.266667 + value: {x: -0.376615, y: 0.289099, z: -0.241763} + - time: 2.300000 + value: {x: -0.365496, y: 0.293192, z: -0.234692} + - time: 2.333333 + value: {x: -0.354255, y: 0.296708, z: -0.227747} + - time: 2.366667 + value: {x: -0.343298, y: 0.299908, z: -0.220606} + - time: 2.400000 + value: {x: -0.332260, y: 0.302565, z: -0.213743} + - time: 2.433333 + value: {x: -0.321487, y: 0.304805, z: -0.206739} + - time: 2.466667 + value: {x: -0.310827, y: 0.306701, z: -0.199909} + - time: 2.533333 + value: {x: -0.289800, y: 0.309191, z: -0.186719} + - time: 2.600000 + value: {x: -0.269494, y: 0.310042, z: -0.173885} + - time: 2.633333 + value: {x: -0.259639, y: 0.310137, z: -0.167609} + - time: 2.666667 + value: {x: -0.250069, y: 0.309875, z: -0.161310} + - time: 2.700000 + value: {x: -0.240547, y: 0.309621, z: -0.155272} + - time: 2.766667 + value: {x: -0.222127, y: 0.308136, z: -0.143539} + - time: 2.800000 + value: {x: -0.213032, y: 0.307367, z: -0.137988} + - time: 2.833333 + value: {x: -0.204399, y: 0.306187, z: -0.132310} + - time: 2.866667 + value: {x: -0.195726, y: 0.305002, z: -0.126982} + - time: 2.900000 + value: {x: -0.187404, y: 0.303865, z: -0.121462} + - time: 2.933333 + value: {x: -0.179246, y: 0.302417, z: -0.116235} + - time: 3.000000 + value: {x: -0.163219, y: 0.299543, z: -0.106236} + - time: 3.066667 + value: {x: -0.148146, y: 0.296368, z: -0.096476} + - time: 3.133333 + value: {x: -0.133393, y: 0.293232, z: -0.087357} + - time: 3.166667 + value: {x: -0.126388, y: 0.291503, z: -0.082939} + - time: 3.233333 + value: {x: -0.112858, y: 0.288188, z: -0.074110} + - time: 3.266667 + value: {x: -0.106087, y: 0.286586, z: -0.070012} + - time: 3.333333 + value: {x: -0.093200, y: 0.283196, z: -0.061607} + - time: 3.466667 + value: {x: -0.068166, y: 0.276766, z: -0.045702} + - time: 3.600000 + value: {x: -0.044177, y: 0.270734, z: -0.030479} + - time: 3.700000 + value: {x: -0.026529, y: 0.266488, z: -0.019464} + - time: 3.733333 + value: {x: -0.020998, y: 0.265179, z: -0.015702} + - time: 3.766667 + value: {x: -0.015247, y: 0.263894, z: -0.012328} + - time: 3.800000 + value: {x: -0.009593, y: 0.262617, z: -0.008497} + - time: 3.866667 + value: {x: 0.001769, y: 0.260190, z: -0.001498} + - time: 3.933333 + value: {x: 0.012494, y: 0.257966, z: 0.005566} + - time: 3.966667 + value: {x: 0.017902, y: 0.256912, z: 0.008752} + - time: 4.000000 + value: {x: 0.023068, y: 0.255909, z: 0.012296} + - time: 4.033333 + value: {x: 0.028651, y: 0.254915, z: 0.015514} + - time: 4.066667 + value: {x: 0.033800, y: 0.253983, z: 0.019099} + - time: 4.100000 + value: {x: 0.039165, y: 0.253081, z: 0.022189} + - time: 4.133333 + value: {x: 0.044097, y: 0.252242, z: 0.025648} + - time: 4.166667 + value: {x: 0.049082, y: 0.251441, z: 0.028832} + - time: 4.200000 + value: {x: 0.054149, y: 0.250675, z: 0.031707} + - time: 4.233333 + value: {x: 0.058807, y: 0.249971, z: 0.034920} + - time: 4.300000 + value: {x: 0.068301, y: 0.248672, z: 0.040737} + - time: 4.333333 + value: {x: 0.072920, y: 0.248092, z: 0.043961} + - time: 4.400000 + value: {x: 0.082255, y: 0.247043, z: 0.049605} + - time: 4.433333 + value: {x: 0.086499, y: 0.246599, z: 0.052652} + - time: 4.500000 + value: {x: 0.095057, y: 0.245826, z: 0.057986} + - time: 4.533333 + value: {x: 0.099287, y: 0.245500, z: 0.060385} + - time: 4.566667 + value: {x: 0.103084, y: 0.245236, z: 0.063135} + - time: 4.600000 + value: {x: 0.107113, y: 0.244998, z: 0.065358} + - time: 4.666667 + value: {x: 0.114301, y: 0.244687, z: 0.070286} + - time: 4.700000 + value: {x: 0.118003, y: 0.244585, z: 0.072276} + - time: 4.733333 + value: {x: 0.121390, y: 0.244539, z: 0.074459} + - time: 4.766666 + value: {x: 0.124519, y: 0.244547, z: 0.076760} + - time: 4.800000 + value: {x: 0.127713, y: 0.244592, z: 0.078753} + - time: 4.866667 + value: {x: 0.133879, y: 0.244815, z: 0.082359} + - time: 4.900000 + value: {x: 0.136567, y: 0.245008, z: 0.084343} + - time: 4.933333 + value: {x: 0.139390, y: 0.245237, z: 0.085923} + - time: 5.000000 + value: {x: 0.144508, y: 0.245848, z: 0.089089} + - time: 5.333333 + value: {x: 0.167601, y: 0.249246, z: 0.103720} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.299833, y: 0.299833, z: 0.299833} + - time: 0.166667 + value: {x: 0.326207, y: 0.326207, z: 0.326207} + - time: 0.333333 + value: {x: 0.353527, y: 0.353527, z: 0.353527} + - time: 0.500000 + value: {x: 0.381785, y: 0.381785, z: 0.381785} + - time: 0.666667 + value: {x: 0.410968, y: 0.410968, z: 0.410968} + - time: 0.833333 + value: {x: 0.441068, y: 0.441068, z: 0.441068} + - time: 1.000000 + value: {x: 0.472075, y: 0.472075, z: 0.472075} + - time: 1.166667 + value: {x: 0.503980, y: 0.503980, z: 0.503980} + - time: 1.333333 + value: {x: 0.536776, y: 0.536776, z: 0.536776} + - time: 1.500000 + value: {x: 0.570453, y: 0.570453, z: 0.570453} + - time: 1.666667 + value: {x: 0.605005, y: 0.605005, z: 0.605005} + - time: 1.833333 + value: {x: 0.640424, y: 0.640424, z: 0.640424} + - time: 2.000000 + value: {x: 0.676704, y: 0.676704, z: 0.676704} + - time: 2.166667 + value: {x: 0.713836, y: 0.713836, z: 0.713836} + - time: 2.333333 + value: {x: 0.751816, y: 0.751816, z: 0.751816} + - time: 2.500000 + value: {x: 0.790636, y: 0.790636, z: 0.790636} + - time: 2.666667 + value: {x: 0.830290, y: 0.830290, z: 0.830290} + - time: 2.833333 + value: {x: 0.870774, y: 0.870774, z: 0.870774} + - time: 3.000000 + value: {x: 0.912081, y: 0.912081, z: 0.912081} + - time: 3.166667 + value: {x: 0.954205, y: 0.954205, z: 0.954205} + - time: 3.333333 + value: {x: 0.997142, y: 0.997142, z: 0.997142} + - time: 3.500000 + value: {x: 1.040886, y: 1.040886, z: 1.040886} + - time: 3.666667 + value: {x: 1.085433, y: 1.085433, z: 1.085433} + - time: 3.833333 + value: {x: 1.130777, y: 1.130777, z: 1.130777} + - time: 4.000000 + value: {x: 1.176914, y: 1.176914, z: 1.176914} + - time: 4.166667 + value: {x: 1.223840, y: 1.223840, z: 1.223840} + - time: 4.333333 + value: {x: 1.271550, y: 1.271550, z: 1.271550} + - time: 4.500000 + value: {x: 1.320039, y: 1.320039, z: 1.320039} + - time: 4.666667 + value: {x: 1.369305, y: 1.369305, z: 1.369305} + - time: 4.833333 + value: {x: 1.419342, y: 1.419342, z: 1.419342} + - time: 5.000000 + value: {x: 1.470146, y: 1.470146, z: 1.470146} + - time: 5.166667 + value: {x: 1.521715, y: 1.521715, z: 1.521715} + - time: 5.333333 + value: {x: 1.574043, y: 1.574043, z: 1.574043} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_15: + position: + - time: 0.000000 + value: {x: 0.020563, y: 0.499403, z: -0.015403} + - time: 0.033333 + value: {x: 0.020655, y: 0.499596, z: -0.015476} + - time: 0.066667 + value: {x: 0.031729, y: 0.347909, z: -0.024445} + - time: 0.100000 + value: {x: 0.039571, y: 0.246979, z: -0.033498} + - time: 0.133333 + value: {x: 0.045199, y: 0.189467, z: -0.042518} + - time: 0.166667 + value: {x: 0.049140, y: 0.164484, z: -0.051502} + - time: 0.200000 + value: {x: 0.051583, y: 0.159171, z: -0.060590} + - time: 0.233333 + value: {x: 0.052288, y: 0.162916, z: -0.070090} + - time: 0.266667 + value: {x: 0.049772, y: 0.171610, z: -0.081022} + - time: 0.300000 + value: {x: 0.042519, y: 0.182326, z: -0.094491} + - time: 0.333333 + value: {x: 0.029353, y: 0.193730, z: -0.111369} + - time: 0.366667 + value: {x: 0.009266, y: 0.205757, z: -0.132166} + - time: 0.400000 + value: {x: -0.017671, y: 0.218259, z: -0.157043} + - time: 0.433333 + value: {x: -0.046776, y: 0.231302, z: -0.183068} + - time: 0.466667 + value: {x: -0.072772, y: 0.245140, z: -0.206736} + - time: 0.500000 + value: {x: -0.092890, y: 0.259923, z: -0.226537} + - time: 0.533333 + value: {x: -0.108670, y: 0.276050, z: -0.243292} + - time: 0.566667 + value: {x: -0.121432, y: 0.293974, z: -0.257861} + - time: 0.600000 + value: {x: -0.131233, y: 0.313555, z: -0.270416} + - time: 0.633333 + value: {x: -0.136671, y: 0.334716, z: -0.280119} + - time: 0.666667 + value: {x: -0.137056, y: 0.357006, z: -0.286355} + - time: 0.700000 + value: {x: -0.132452, y: 0.378212, z: -0.289285} + - time: 0.733333 + value: {x: -0.124027, y: 0.395773, z: -0.289555} + - time: 0.766667 + value: {x: -0.112749, y: 0.407285, z: -0.288058} + - time: 0.800000 + value: {x: -0.101219, y: 0.412910, z: -0.286084} + - time: 0.833333 + value: {x: -0.092020, y: 0.412970, z: -0.285692} + - time: 0.866667 + value: {x: -0.087342, y: 0.408298, z: -0.287881} + - time: 0.900000 + value: {x: -0.087403, y: 0.401002, z: -0.293055} + - time: 0.933333 + value: {x: -0.091759, y: 0.393609, z: -0.300882} + - time: 0.966667 + value: {x: -0.100560, y: 0.388080, z: -0.311499} + - time: 1.000000 + value: {x: -0.116696, y: 0.385173, z: -0.326638} + - time: 1.033333 + value: {x: -0.144081, y: 0.384857, z: -0.348990} + - time: 1.066667 + value: {x: -0.186013, y: 0.387271, z: -0.380407} + - time: 1.100000 + value: {x: -0.241538, y: 0.392025, z: -0.420460} + - time: 1.133333 + value: {x: -0.305440, y: 0.398551, z: -0.465735} + - time: 1.166667 + value: {x: -0.372742, y: 0.406283, z: -0.513039} + - time: 1.200000 + value: {x: -0.439251, y: 0.414712, z: -0.559844} + - time: 1.233333 + value: {x: -0.501994, y: 0.423781, z: -0.604321} + - time: 1.266667 + value: {x: -0.558590, y: 0.433872, z: -0.644608} + - time: 1.300000 + value: {x: -0.607037, y: 0.444903, z: -0.679855} + - time: 1.333333 + value: {x: -0.646838, y: 0.456969, z: -0.709426} + - time: 1.366667 + value: {x: -0.677612, y: 0.470008, z: -0.733166} + - time: 1.400000 + value: {x: -0.701940, y: 0.483553, z: -0.752669} + - time: 1.433333 + value: {x: -0.720152, y: 0.497400, z: -0.768334} + - time: 1.466667 + value: {x: -0.734174, y: 0.511242, z: -0.781277} + - time: 1.500000 + value: {x: -0.744779, y: 0.524858, z: -0.792118} + - time: 1.533333 + value: {x: -0.752569, y: 0.538413, z: -0.800880} + - time: 1.566667 + value: {x: -0.758128, y: 0.551645, z: -0.808441} + - time: 1.600000 + value: {x: -0.761998, y: 0.564787, z: -0.814680} + - time: 1.633333 + value: {x: -0.764474, y: 0.577700, z: -0.820076} + - time: 1.666667 + value: {x: -0.765831, y: 0.590444, z: -0.824697} + - time: 1.700000 + value: {x: -0.766284, y: 0.603025, z: -0.828676} + - time: 1.733333 + value: {x: -0.765910, y: 0.615440, z: -0.832113} + - time: 1.766667 + value: {x: -0.764729, y: 0.627702, z: -0.834983} + - time: 1.800000 + value: {x: -0.762805, y: 0.639786, z: -0.837341} + - time: 1.833333 + value: {x: -0.760177, y: 0.651666, z: -0.839258} + - time: 1.866667 + value: {x: -0.756930, y: 0.663469, z: -0.840531} + - time: 1.900000 + value: {x: -0.752710, y: 0.674949, z: -0.841504} + - time: 1.933333 + value: {x: -0.747834, y: 0.686402, z: -0.841732} + - time: 1.966667 + value: {x: -0.742443, y: 0.697639, z: -0.841654} + - time: 2.000000 + value: {x: -0.736222, y: 0.708680, z: -0.841103} + - time: 2.033333 + value: {x: -0.729355, y: 0.719541, z: -0.840095} + - time: 2.066667 + value: {x: -0.722208, y: 0.730200, z: -0.838870} + - time: 2.100000 + value: {x: -0.714225, y: 0.740474, z: -0.837233} + - time: 2.133333 + value: {x: -0.706178, y: 0.750598, z: -0.835232} + - time: 2.166667 + value: {x: -0.697750, y: 0.760279, z: -0.833088} + - time: 2.200000 + value: {x: -0.689140, y: 0.769442, z: -0.830987} + - time: 2.233333 + value: {x: -0.680460, y: 0.778430, z: -0.828433} + - time: 2.266667 + value: {x: -0.671616, y: 0.786690, z: -0.826113} + - time: 2.300000 + value: {x: -0.662811, y: 0.794686, z: -0.823630} + - time: 2.333333 + value: {x: -0.653985, y: 0.802161, z: -0.820946} + - time: 2.366667 + value: {x: -0.645200, y: 0.809125, z: -0.818560} + - time: 2.400000 + value: {x: -0.636512, y: 0.815657, z: -0.815948} + - time: 2.433333 + value: {x: -0.627884, y: 0.821602, z: -0.813596} + - time: 2.466667 + value: {x: -0.619413, y: 0.827221, z: -0.811235} + - time: 2.533333 + value: {x: -0.602877, y: 0.837183, z: -0.806476} + - time: 2.600000 + value: {x: -0.586926, y: 0.845337, z: -0.802078} + - time: 2.633333 + value: {x: -0.579194, y: 0.849020, z: -0.800036} + - time: 2.700000 + value: {x: -0.564193, y: 0.855518, z: -0.796319} + - time: 2.733333 + value: {x: -0.556967, y: 0.858312, z: -0.794558} + - time: 2.800000 + value: {x: -0.542988, y: 0.863791, z: -0.791000} + - time: 2.866667 + value: {x: -0.529723, y: 0.868245, z: -0.788016} + - time: 2.900000 + value: {x: -0.523265, y: 0.870381, z: -0.786782} + - time: 2.933333 + value: {x: -0.517065, y: 0.872261, z: -0.785542} + - time: 3.000000 + value: {x: -0.505070, y: 0.876082, z: -0.783045} + - time: 3.033333 + value: {x: -0.499313, y: 0.877735, z: -0.782127} + - time: 3.133333 + value: {x: -0.482949, y: 0.882725, z: -0.779238} + - time: 3.233333 + value: {x: -0.467890, y: 0.887031, z: -0.777357} + - time: 3.266667 + value: {x: -0.463078, y: 0.888617, z: -0.776607} + - time: 3.333333 + value: {x: -0.453693, y: 0.891258, z: -0.775705} + - time: 3.466667 + value: {x: -0.435760, y: 0.896806, z: -0.773868} + - time: 3.600000 + value: {x: -0.418672, y: 0.902406, z: -0.772272} + - time: 3.700000 + value: {x: -0.406177, y: 0.906738, z: -0.770952} + - time: 3.733333 + value: {x: -0.402152, y: 0.908111, z: -0.770817} + - time: 3.766667 + value: {x: -0.398207, y: 0.909714, z: -0.770298} + - time: 3.800000 + value: {x: -0.394041, y: 0.911082, z: -0.770032} + - time: 3.833333 + value: {x: -0.389999, y: 0.912651, z: -0.769492} + - time: 3.900000 + value: {x: -0.382130, y: 0.915647, z: -0.768934} + - time: 3.966667 + value: {x: -0.374641, y: 0.918908, z: -0.768252} + - time: 4.000000 + value: {x: -0.370877, y: 0.920417, z: -0.768166} + - time: 4.033333 + value: {x: -0.367032, y: 0.922172, z: -0.767545} + - time: 4.066667 + value: {x: -0.363234, y: 0.923694, z: -0.767444} + - time: 4.100000 + value: {x: -0.359580, y: 0.925499, z: -0.766922} + - time: 4.133333 + value: {x: -0.355968, y: 0.927070, z: -0.766920} + - time: 4.200000 + value: {x: -0.349100, y: 0.930689, z: -0.766325} + - time: 4.266666 + value: {x: -0.342550, y: 0.934162, z: -0.766366} + - time: 4.300000 + value: {x: -0.339328, y: 0.936097, z: -0.766077} + - time: 4.333333 + value: {x: -0.335984, y: 0.937832, z: -0.766129} + - time: 4.400000 + value: {x: -0.329679, y: 0.941732, z: -0.765749} + - time: 4.433333 + value: {x: -0.326643, y: 0.943524, z: -0.766002} + - time: 4.533333 + value: {x: -0.318264, y: 0.949644, z: -0.766004} + - time: 4.566667 + value: {x: -0.315640, y: 0.951550, z: -0.766455} + - time: 4.600000 + value: {x: -0.313173, y: 0.953757, z: -0.766460} + - time: 4.666667 + value: {x: -0.308467, y: 0.957839, z: -0.767391} + - time: 4.700000 + value: {x: -0.306311, y: 0.960141, z: -0.767534} + - time: 4.800000 + value: {x: -0.300357, y: 0.966663, z: -0.769314} + - time: 4.866667 + value: {x: -0.296954, y: 0.971373, z: -0.770389} + - time: 4.900000 + value: {x: -0.295378, y: 0.973600, z: -0.771330} + - time: 4.966667 + value: {x: -0.292614, y: 0.978494, z: -0.772751} + - time: 5.333333 + value: {x: -0.280173, y: 1.004369, z: -0.782540} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.299833, y: 0.299833, z: 0.299833} + - time: 0.166667 + value: {x: 0.326207, y: 0.326207, z: 0.326207} + - time: 0.333333 + value: {x: 0.353527, y: 0.353527, z: 0.353527} + - time: 0.500000 + value: {x: 0.381785, y: 0.381785, z: 0.381785} + - time: 0.666667 + value: {x: 0.410968, y: 0.410968, z: 0.410968} + - time: 0.833333 + value: {x: 0.441068, y: 0.441068, z: 0.441068} + - time: 1.000000 + value: {x: 0.472075, y: 0.472075, z: 0.472075} + - time: 1.166667 + value: {x: 0.503980, y: 0.503980, z: 0.503980} + - time: 1.333333 + value: {x: 0.536776, y: 0.536776, z: 0.536776} + - time: 1.500000 + value: {x: 0.570453, y: 0.570453, z: 0.570453} + - time: 1.666667 + value: {x: 0.605005, y: 0.605005, z: 0.605005} + - time: 1.833333 + value: {x: 0.640424, y: 0.640424, z: 0.640424} + - time: 2.000000 + value: {x: 0.676704, y: 0.676704, z: 0.676704} + - time: 2.166667 + value: {x: 0.713836, y: 0.713836, z: 0.713836} + - time: 2.333333 + value: {x: 0.751816, y: 0.751816, z: 0.751816} + - time: 2.500000 + value: {x: 0.790636, y: 0.790636, z: 0.790636} + - time: 2.666667 + value: {x: 0.830290, y: 0.830290, z: 0.830290} + - time: 2.833333 + value: {x: 0.870774, y: 0.870774, z: 0.870774} + - time: 3.000000 + value: {x: 0.912081, y: 0.912081, z: 0.912081} + - time: 3.166667 + value: {x: 0.954205, y: 0.954205, z: 0.954205} + - time: 3.333333 + value: {x: 0.997142, y: 0.997142, z: 0.997142} + - time: 3.500000 + value: {x: 1.040886, y: 1.040886, z: 1.040886} + - time: 3.666667 + value: {x: 1.085433, y: 1.085433, z: 1.085433} + - time: 3.833333 + value: {x: 1.130777, y: 1.130777, z: 1.130777} + - time: 4.000000 + value: {x: 1.176914, y: 1.176914, z: 1.176914} + - time: 4.166667 + value: {x: 1.223840, y: 1.223840, z: 1.223840} + - time: 4.333333 + value: {x: 1.271550, y: 1.271550, z: 1.271550} + - time: 4.500000 + value: {x: 1.320039, y: 1.320039, z: 1.320039} + - time: 4.666667 + value: {x: 1.369305, y: 1.369305, z: 1.369305} + - time: 4.833333 + value: {x: 1.419342, y: 1.419342, z: 1.419342} + - time: 5.000000 + value: {x: 1.470146, y: 1.470146, z: 1.470146} + - time: 5.166667 + value: {x: 1.521715, y: 1.521715, z: 1.521715} + - time: 5.333333 + value: {x: 1.574043, y: 1.574043, z: 1.574043} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_16: + position: + - time: 0.000000 + value: {x: 0.000626, y: 0.457730, z: 0.000399} + - time: 0.033333 + value: {x: 0.000626, y: 0.457730, z: 0.000399} + - time: 0.066667 + value: {x: 0.000489, y: 0.282607, z: 0.000312} + - time: 0.100000 + value: {x: -0.001483, y: 0.161182, z: -0.000944} + - time: 0.133333 + value: {x: -0.004664, y: 0.085264, z: -0.002971} + - time: 0.166667 + value: {x: -0.008770, y: 0.043457, z: -0.005587} + - time: 0.200000 + value: {x: -0.013772, y: 0.022582, z: -0.008774} + - time: 0.233333 + value: {x: -0.020021, y: 0.011796, z: -0.012755} + - time: 0.266667 + value: {x: -0.029078, y: 0.006799, z: -0.018525} + - time: 0.300000 + value: {x: -0.042526, y: 0.004559, z: -0.027092} + - time: 0.333333 + value: {x: -0.061593, y: 0.003674, z: -0.039239} + - time: 0.366667 + value: {x: -0.087307, y: 0.003901, z: -0.055620} + - time: 0.400000 + value: {x: -0.119644, y: 0.005112, z: -0.076221} + - time: 0.433333 + value: {x: -0.153949, y: 0.007328, z: -0.098077} + - time: 0.466667 + value: {x: -0.184949, y: 0.010668, z: -0.117825} + - time: 0.500000 + value: {x: -0.209915, y: 0.015363, z: -0.133731} + - time: 0.533333 + value: {x: -0.230384, y: 0.021688, z: -0.146771} + - time: 0.566667 + value: {x: -0.247689, y: 0.030067, z: -0.157795} + - time: 0.600000 + value: {x: -0.261912, y: 0.040399, z: -0.166856} + - time: 0.633333 + value: {x: -0.271662, y: 0.052606, z: -0.173068} + - time: 0.666667 + value: {x: -0.276242, y: 0.066125, z: -0.175986} + - time: 0.700000 + value: {x: -0.275732, y: 0.078779, z: -0.175661} + - time: 0.733333 + value: {x: -0.271298, y: 0.087941, z: -0.172836} + - time: 0.766667 + value: {x: -0.263940, y: 0.091330, z: -0.168149} + - time: 0.800000 + value: {x: -0.256227, y: 0.088904, z: -0.163234} + - time: 0.833333 + value: {x: -0.250788, y: 0.081183, z: -0.159769} + - time: 0.866667 + value: {x: -0.249776, y: 0.068786, z: -0.159125} + - time: 0.900000 + value: {x: -0.253440, y: 0.053944, z: -0.161459} + - time: 0.933333 + value: {x: -0.261336, y: 0.039148, z: -0.166490} + - time: 0.966667 + value: {x: -0.273616, y: 0.026371, z: -0.174313} + - time: 1.000000 + value: {x: -0.293168, y: 0.016308, z: -0.186769} + - time: 1.033333 + value: {x: -0.323925, y: 0.009019, z: -0.206363} + - time: 1.066667 + value: {x: -0.369161, y: 0.004508, z: -0.235181} + - time: 1.100000 + value: {x: -0.427944, y: 0.002471, z: -0.272630} + - time: 1.133333 + value: {x: -0.495050, y: 0.002288, z: -0.315382} + - time: 1.166667 + value: {x: -0.565501, y: 0.003374, z: -0.360264} + - time: 1.200000 + value: {x: -0.635121, y: 0.005288, z: -0.404617} + - time: 1.233333 + value: {x: -0.700946, y: 0.008001, z: -0.446552} + - time: 1.266667 + value: {x: -0.760557, y: 0.011716, z: -0.484528} + - time: 1.300000 + value: {x: -0.812003, y: 0.016562, z: -0.517303} + - time: 1.333333 + value: {x: -0.854752, y: 0.022468, z: -0.544537} + - time: 1.366667 + value: {x: -0.888434, y: 0.029412, z: -0.565995} + - time: 1.400000 + value: {x: -0.915625, y: 0.036897, z: -0.583317} + - time: 1.433333 + value: {x: -0.936675, y: 0.044814, z: -0.596728} + - time: 1.466667 + value: {x: -0.953501, y: 0.052795, z: -0.607447} + - time: 1.500000 + value: {x: -0.966891, y: 0.060681, z: -0.615977} + - time: 1.533333 + value: {x: -0.977408, y: 0.068451, z: -0.622677} + - time: 1.566667 + value: {x: -0.985690, y: 0.076098, z: -0.627954} + - time: 1.600000 + value: {x: -0.992233, y: 0.083615, z: -0.632122} + - time: 1.633333 + value: {x: -0.997360, y: 0.091008, z: -0.635388} + - time: 1.666667 + value: {x: -1.001337, y: 0.098281, z: -0.637922} + - time: 1.700000 + value: {x: -1.004382, y: 0.105437, z: -0.639862} + - time: 1.733333 + value: {x: -1.006574, y: 0.112495, z: -0.641258} + - time: 1.766667 + value: {x: -1.007931, y: 0.119447, z: -0.642123} + - time: 1.800000 + value: {x: -1.008519, y: 0.126275, z: -0.642497} + - time: 1.833333 + value: {x: -1.008381, y: 0.132973, z: -0.642409} + - time: 1.866667 + value: {x: -1.007579, y: 0.139537, z: -0.641899} + - time: 1.900000 + value: {x: -1.005815, y: 0.146008, z: -0.640775} + - time: 1.933333 + value: {x: -1.003341, y: 0.152352, z: -0.639199} + - time: 1.966667 + value: {x: -1.000338, y: 0.158555, z: -0.637285} + - time: 2.000000 + value: {x: -0.996489, y: 0.164655, z: -0.634834} + - time: 2.033333 + value: {x: -0.991970, y: 0.170614, z: -0.631955} + - time: 2.066667 + value: {x: -0.987149, y: 0.176413, z: -0.628883} + - time: 2.100000 + value: {x: -0.981488, y: 0.181947, z: -0.625277} + - time: 2.133333 + value: {x: -0.975710, y: 0.187226, z: -0.621596} + - time: 2.166667 + value: {x: -0.969545, y: 0.192169, z: -0.617668} + - time: 2.200000 + value: {x: -0.963196, y: 0.196733, z: -0.613623} + - time: 2.233333 + value: {x: -0.956721, y: 0.200968, z: -0.609498} + - time: 2.266667 + value: {x: -0.950097, y: 0.204703, z: -0.605279} + - time: 2.300000 + value: {x: -0.943478, y: 0.208133, z: -0.601062} + - time: 2.333333 + value: {x: -0.936802, y: 0.210998, z: -0.596809} + - time: 2.366667 + value: {x: -0.930180, y: 0.213542, z: -0.592590} + - time: 2.400000 + value: {x: -0.923609, y: 0.215559, z: -0.588404} + - time: 2.433333 + value: {x: -0.917107, y: 0.217153, z: -0.584262} + - time: 2.466667 + value: {x: -0.910734, y: 0.218414, z: -0.580202} + - time: 2.533333 + value: {x: -0.898320, y: 0.219655, z: -0.572293} + - time: 2.600000 + value: {x: -0.886435, y: 0.219273, z: -0.564721} + - time: 2.633333 + value: {x: -0.880715, y: 0.218758, z: -0.561078} + - time: 2.700000 + value: {x: -0.869703, y: 0.217034, z: -0.554062} + - time: 2.733333 + value: {x: -0.864443, y: 0.215744, z: -0.550711} + - time: 2.800000 + value: {x: -0.854323, y: 0.213014, z: -0.544264} + - time: 2.900000 + value: {x: -0.840324, y: 0.207777, z: -0.535345} + - time: 2.966667 + value: {x: -0.831795, y: 0.203742, z: -0.529912} + - time: 3.033333 + value: {x: -0.823777, y: 0.199670, z: -0.524804} + - time: 3.133333 + value: {x: -0.812798, y: 0.193269, z: -0.517809} + - time: 3.233333 + value: {x: -0.803037, y: 0.186618, z: -0.511591} + - time: 3.333333 + value: {x: -0.794003, y: 0.180061, z: -0.505836} + - time: 3.500000 + value: {x: -0.780071, y: 0.169539, z: -0.496960} + - time: 3.666667 + value: {x: -0.766946, y: 0.159757, z: -0.488598} + - time: 3.800000 + value: {x: -0.756960, y: 0.152631, z: -0.482237} + - time: 3.900000 + value: {x: -0.749594, y: 0.147693, z: -0.477544} + - time: 4.033333 + value: {x: -0.740380, y: 0.141769, z: -0.471674} + - time: 4.133333 + value: {x: -0.733654, y: 0.137780, z: -0.467389} + - time: 4.233333 + value: {x: -0.727671, y: 0.134232, z: -0.463578} + - time: 4.366667 + value: {x: -0.720156, y: 0.130147, z: -0.458790} + - time: 4.466667 + value: {x: -0.715136, y: 0.127574, z: -0.455592} + - time: 4.566667 + value: {x: -0.710955, y: 0.125431, z: -0.452928} + - time: 4.666667 + value: {x: -0.707617, y: 0.123720, z: -0.450802} + - time: 4.766666 + value: {x: -0.705127, y: 0.122444, z: -0.449215} + - time: 4.866667 + value: {x: -0.703496, y: 0.121608, z: -0.448177} + - time: 4.966667 + value: {x: -0.702745, y: 0.121224, z: -0.447698} + - time: 5.333333 + value: {x: -0.702695, y: 0.121198, z: -0.447666} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.595720, y: 0.595720, z: 0.595720} + - time: 0.233333 + value: {x: 0.623086, y: 0.623086, z: 0.623086} + - time: 0.533333 + value: {x: 0.659042, y: 0.659042, z: 0.659042} + - time: 0.833333 + value: {x: 0.695859, y: 0.695859, z: 0.695859} + - time: 1.133333 + value: {x: 0.733531, y: 0.733531, z: 0.733531} + - time: 1.433333 + value: {x: 0.772050, y: 0.772050, z: 0.772050} + - time: 1.733333 + value: {x: 0.811411, y: 0.811411, z: 0.811411} + - time: 2.033333 + value: {x: 0.851609, y: 0.851609, z: 0.851609} + - time: 2.333333 + value: {x: 0.892636, y: 0.892636, z: 0.892636} + - time: 2.633333 + value: {x: 0.934488, y: 0.934488, z: 0.934488} + - time: 2.933333 + value: {x: 0.977159, y: 0.977159, z: 0.977159} + - time: 3.233333 + value: {x: 1.020643, y: 1.020643, z: 1.020643} + - time: 3.533333 + value: {x: 1.064937, y: 1.064937, z: 1.064937} + - time: 3.833333 + value: {x: 1.110035, y: 1.110035, z: 1.110035} + - time: 4.133333 + value: {x: 1.155932, y: 1.155932, z: 1.155932} + - time: 4.433333 + value: {x: 1.202623, y: 1.202623, z: 1.202623} + - time: 4.733333 + value: {x: 1.250105, y: 1.250105, z: 1.250105} + - time: 5.033333 + value: {x: 1.298373, y: 1.298373, z: 1.298373} + - time: 5.333333 + value: {x: 1.347422, y: 1.347422, z: 1.347422} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_17: + position: + - time: 0.000000 + value: {x: -0.045716, y: 0.457109, z: -0.007700} + - time: 0.033333 + value: {x: -0.045762, y: 0.457108, z: -0.007708} + - time: 0.066667 + value: {x: -0.071635, y: 0.281639, z: -0.011727} + - time: 0.100000 + value: {x: -0.096053, y: 0.159925, z: -0.014210} + - time: 0.133333 + value: {x: -0.119297, y: 0.083747, z: -0.015673} + - time: 0.166667 + value: {x: -0.141641, y: 0.041694, z: -0.016367} + - time: 0.200000 + value: {x: -0.163440, y: 0.020598, z: -0.016341} + - time: 0.233333 + value: {x: -0.185336, y: 0.009611, z: -0.015453} + - time: 0.266667 + value: {x: -0.209173, y: 0.004412, z: -0.012947} + - time: 0.300000 + value: {x: -0.236792, y: 0.001989, z: -0.007962} + - time: 0.333333 + value: {x: -0.269620, y: 0.000964, z: 0.000182} + - time: 0.366667 + value: {x: -0.308809, y: 0.001008, z: 0.011846} + - time: 0.400000 + value: {x: -0.354438, y: 0.002065, z: 0.027152} + - time: 0.433333 + value: {x: -0.401633, y: 0.004162, z: 0.043639} + - time: 0.466667 + value: {x: -0.444820, y: 0.007340, z: 0.058354} + - time: 0.500000 + value: {x: -0.481188, y: 0.011930, z: 0.070050} + - time: 0.533333 + value: {x: -0.512373, y: 0.018128, z: 0.079374} + - time: 0.566667 + value: {x: -0.539825, y: 0.026356, z: 0.087025} + - time: 0.600000 + value: {x: -0.563678, y: 0.036564, z: 0.093147} + - time: 0.633333 + value: {x: -0.582488, y: 0.048697, z: 0.097037} + - time: 0.666667 + value: {x: -0.595508, y: 0.062103, z: 0.098157} + - time: 0.700000 + value: {x: -0.602858, y: 0.074656, z: 0.096643} + - time: 0.733333 + value: {x: -0.605775, y: 0.083681, z: 0.093014} + - time: 0.766667 + value: {x: -0.605383, y: 0.087014, z: 0.088031} + - time: 0.800000 + value: {x: -0.604357, y: 0.084448, z: 0.082724} + - time: 0.833333 + value: {x: -0.605569, y: 0.076680, z: 0.078832} + - time: 0.866667 + value: {x: -0.611248, y: 0.064156, z: 0.077149} + - time: 0.900000 + value: {x: -0.621711, y: 0.049218, z: 0.078026} + - time: 0.933333 + value: {x: -0.636487, y: 0.034332, z: 0.081179} + - time: 0.966667 + value: {x: -0.655754, y: 0.021488, z: 0.086719} + - time: 1.000000 + value: {x: -0.682565, y: 0.011333, z: 0.096077} + - time: 1.033333 + value: {x: -0.721132, y: 0.004007, z: 0.111494} + - time: 1.066667 + value: {x: -0.774896, y: -0.000591, z: 0.134489} + - time: 1.100000 + value: {x: -0.842902, y: -0.002692, z: 0.164716} + - time: 1.133333 + value: {x: -0.919599, y: -0.002957, z: 0.199331} + - time: 1.166667 + value: {x: -0.999704, y: -0.001979, z: 0.235678} + - time: 1.200000 + value: {x: -1.078816, y: -0.000143, z: 0.271665} + - time: 1.233333 + value: {x: -1.153803, y: 0.002551, z: 0.305772} + - time: 1.266667 + value: {x: -1.222049, y: 0.006159, z: 0.336435} + - time: 1.300000 + value: {x: -1.281552, y: 0.010986, z: 0.362967} + - time: 1.333333 + value: {x: -1.331704, y: 0.016828, z: 0.384823} + - time: 1.366667 + value: {x: -1.372128, y: 0.023698, z: 0.401877} + - time: 1.400000 + value: {x: -1.405553, y: 0.031079, z: 0.415449} + - time: 1.433333 + value: {x: -1.432385, y: 0.038938, z: 0.425875} + - time: 1.466667 + value: {x: -1.454640, y: 0.046861, z: 0.434079} + - time: 1.500000 + value: {x: -1.473179, y: 0.054739, z: 0.440576} + - time: 1.533333 + value: {x: -1.488547, y: 0.062405, z: 0.445374} + - time: 1.566667 + value: {x: -1.501499, y: 0.070057, z: 0.449217} + - time: 1.600000 + value: {x: -1.512494, y: 0.077496, z: 0.451989} + - time: 1.633333 + value: {x: -1.521921, y: 0.084849, z: 0.454094} + - time: 1.666667 + value: {x: -1.530049, y: 0.092075, z: 0.455586} + - time: 1.700000 + value: {x: -1.537107, y: 0.099173, z: 0.456577} + - time: 1.733333 + value: {x: -1.543193, y: 0.106184, z: 0.457145} + - time: 1.766667 + value: {x: -1.548321, y: 0.113083, z: 0.457271} + - time: 1.800000 + value: {x: -1.552563, y: 0.119859, z: 0.457000} + - time: 1.833333 + value: {x: -1.555974, y: 0.126523, z: 0.456389} + - time: 1.866667 + value: {x: -1.558585, y: 0.132969, z: 0.455271} + - time: 1.900000 + value: {x: -1.560165, y: 0.139464, z: 0.453930} + - time: 1.933333 + value: {x: -1.560886, y: 0.145715, z: 0.451993} + - time: 1.966667 + value: {x: -1.560992, y: 0.151849, z: 0.449829} + - time: 2.000000 + value: {x: -1.560157, y: 0.157915, z: 0.447296} + - time: 2.033333 + value: {x: -1.558551, y: 0.163835, z: 0.444407} + - time: 2.066667 + value: {x: -1.556567, y: 0.169593, z: 0.441361} + - time: 2.100000 + value: {x: -1.553659, y: 0.175146, z: 0.437995} + - time: 2.133333 + value: {x: -1.550532, y: 0.180330, z: 0.434351} + - time: 2.166667 + value: {x: -1.546959, y: 0.185229, z: 0.430608} + - time: 2.200000 + value: {x: -1.543168, y: 0.189822, z: 0.426920} + - time: 2.233333 + value: {x: -1.539138, y: 0.193940, z: 0.422882} + - time: 2.266667 + value: {x: -1.534955, y: 0.197700, z: 0.419054} + - time: 2.300000 + value: {x: -1.530705, y: 0.201093, z: 0.415113} + - time: 2.333333 + value: {x: -1.526325, y: 0.203860, z: 0.411027} + - time: 2.366667 + value: {x: -1.522000, y: 0.206422, z: 0.407204} + - time: 2.400000 + value: {x: -1.517644, y: 0.208357, z: 0.403215} + - time: 2.433333 + value: {x: -1.513355, y: 0.209963, z: 0.399458} + - time: 2.466667 + value: {x: -1.509147, y: 0.211205, z: 0.395711} + - time: 2.533333 + value: {x: -1.500925, y: 0.212327, z: 0.388249} + - time: 2.600000 + value: {x: -1.493113, y: 0.211860, z: 0.381156} + - time: 2.633333 + value: {x: -1.489389, y: 0.211317, z: 0.377764} + - time: 2.700000 + value: {x: -1.482300, y: 0.209591, z: 0.371329} + - time: 2.800000 + value: {x: -1.472540, y: 0.205424, z: 0.362029} + - time: 2.866667 + value: {x: -1.466728, y: 0.201847, z: 0.356368} + - time: 2.900000 + value: {x: -1.463976, y: 0.200173, z: 0.353765} + - time: 3.000000 + value: {x: -1.456516, y: 0.194046, z: 0.346051} + - time: 3.033333 + value: {x: -1.454305, y: 0.191968, z: 0.343773} + - time: 3.133333 + value: {x: -1.448209, y: 0.185422, z: 0.336941} + - time: 3.266667 + value: {x: -1.441589, y: 0.176557, z: 0.329023} + - time: 3.366667 + value: {x: -1.437248, y: 0.169987, z: 0.323716} + - time: 3.533333 + value: {x: -1.430453, y: 0.159497, z: 0.315250} + - time: 3.666667 + value: {x: -1.425036, y: 0.151585, z: 0.308665} + - time: 3.733333 + value: {x: -1.422523, y: 0.147976, z: 0.305724} + - time: 3.833333 + value: {x: -1.418394, y: 0.142669, z: 0.300981} + - time: 3.966667 + value: {x: -1.413363, y: 0.136316, z: 0.295229} + - time: 4.000000 + value: {x: -1.412154, y: 0.134915, z: 0.293982} + - time: 4.033333 + value: {x: -1.410718, y: 0.133381, z: 0.292349} + - time: 4.066667 + value: {x: -1.409416, y: 0.132072, z: 0.291105} + - time: 4.100000 + value: {x: -1.408118, y: 0.130643, z: 0.289575} + - time: 4.133333 + value: {x: -1.406954, y: 0.129435, z: 0.288432} + - time: 4.200000 + value: {x: -1.404729, y: 0.126906, z: 0.285769} + - time: 4.266666 + value: {x: -1.402837, y: 0.124738, z: 0.283620} + - time: 4.400000 + value: {x: -1.398785, y: 0.120716, z: 0.278931} + - time: 4.533333 + value: {x: -1.395870, y: 0.117516, z: 0.275098} + - time: 4.566667 + value: {x: -1.395380, y: 0.116927, z: 0.274449} + - time: 4.600000 + value: {x: -1.394907, y: 0.116210, z: 0.273506} + - time: 4.700000 + value: {x: -1.394088, y: 0.114613, z: 0.271507} + - time: 4.766666 + value: {x: -1.393999, y: 0.113880, z: 0.270612} + - time: 4.866667 + value: {x: -1.394429, y: 0.112928, z: 0.269230} + - time: 4.966667 + value: {x: -1.395694, y: 0.112514, z: 0.268502} + - time: 5.333333 + value: {x: -1.401970, y: 0.112404, z: 0.267469} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.595720, y: 0.595720, z: 0.595720} + - time: 0.233333 + value: {x: 0.623086, y: 0.623086, z: 0.623086} + - time: 0.533333 + value: {x: 0.659042, y: 0.659042, z: 0.659042} + - time: 0.833333 + value: {x: 0.695859, y: 0.695859, z: 0.695859} + - time: 1.133333 + value: {x: 0.733531, y: 0.733531, z: 0.733531} + - time: 1.433333 + value: {x: 0.772050, y: 0.772050, z: 0.772050} + - time: 1.733333 + value: {x: 0.811411, y: 0.811411, z: 0.811411} + - time: 2.033333 + value: {x: 0.851609, y: 0.851609, z: 0.851609} + - time: 2.333333 + value: {x: 0.892636, y: 0.892636, z: 0.892636} + - time: 2.633333 + value: {x: 0.934488, y: 0.934488, z: 0.934488} + - time: 2.933333 + value: {x: 0.977159, y: 0.977159, z: 0.977159} + - time: 3.233333 + value: {x: 1.020643, y: 1.020643, z: 1.020643} + - time: 3.533333 + value: {x: 1.064937, y: 1.064937, z: 1.064937} + - time: 3.833333 + value: {x: 1.110035, y: 1.110035, z: 1.110035} + - time: 4.133333 + value: {x: 1.155932, y: 1.155932, z: 1.155932} + - time: 4.433333 + value: {x: 1.202623, y: 1.202623, z: 1.202623} + - time: 4.733333 + value: {x: 1.250105, y: 1.250105, z: 1.250105} + - time: 5.033333 + value: {x: 1.298373, y: 1.298373, z: 1.298373} + - time: 5.333333 + value: {x: 1.347422, y: 1.347422, z: 1.347422} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_18: + position: + - time: 0.000000 + value: {x: 0.019910, y: 0.497958, z: -0.015585} + - time: 0.033333 + value: {x: 0.019929, y: 0.497998, z: -0.015601} + - time: 0.066667 + value: {x: 0.030460, y: 0.345193, z: -0.023986} + - time: 0.100000 + value: {x: 0.037633, y: 0.243119, z: -0.030305} + - time: 0.133333 + value: {x: 0.042503, y: 0.184427, z: -0.035166} + - time: 0.166667 + value: {x: 0.045609, y: 0.158226, z: -0.038902} + - time: 0.200000 + value: {x: 0.047145, y: 0.151655, z: -0.041679} + - time: 0.233333 + value: {x: 0.046848, y: 0.154105, z: -0.043399} + - time: 0.266667 + value: {x: 0.043141, y: 0.161464, z: -0.043266} + - time: 0.300000 + value: {x: 0.034410, y: 0.170808, z: -0.040534} + - time: 0.333333 + value: {x: 0.019406, y: 0.180809, z: -0.034640} + - time: 0.366667 + value: {x: -0.002941, y: 0.191394, z: -0.024909} + - time: 0.400000 + value: {x: -0.032559, y: 0.202423, z: -0.011519} + - time: 0.433333 + value: {x: -0.064481, y: 0.213964, z: 0.003035} + - time: 0.466667 + value: {x: -0.093105, y: 0.226266, z: 0.016093} + - time: 0.500000 + value: {x: -0.115497, y: 0.239488, z: 0.026005} + - time: 0.533333 + value: {x: -0.133289, y: 0.254024, z: 0.033721} + - time: 0.566667 + value: {x: -0.147882, y: 0.270328, z: 0.039940} + - time: 0.600000 + value: {x: -0.159338, y: 0.288265, z: 0.044593} + - time: 0.633333 + value: {x: -0.166170, y: 0.307763, z: 0.046899} + - time: 0.666667 + value: {x: -0.167644, y: 0.328362, z: 0.046645} + - time: 0.700000 + value: {x: -0.163829, y: 0.347855, z: 0.043772} + - time: 0.733333 + value: {x: -0.155962, y: 0.363677, z: 0.038981} + - time: 0.766667 + value: {x: -0.145076, y: 0.373439, z: 0.032574} + - time: 0.800000 + value: {x: -0.133922, y: 0.377282, z: 0.026216} + - time: 0.833333 + value: {x: -0.125251, y: 0.375554, z: 0.020958} + - time: 0.866667 + value: {x: -0.121378, y: 0.369064, z: 0.018268} + - time: 0.900000 + value: {x: -0.122538, y: 0.359936, z: 0.018059} + - time: 0.933333 + value: {x: -0.128261, y: 0.350694, z: 0.020139} + - time: 0.966667 + value: {x: -0.138704, y: 0.343303, z: 0.024554} + - time: 1.000000 + value: {x: -0.156935, y: 0.338515, z: 0.032924} + - time: 1.033333 + value: {x: -0.187108, y: 0.336311, z: 0.047169} + - time: 1.066667 + value: {x: -0.232717, y: 0.336814, z: 0.069224} + - time: 1.100000 + value: {x: -0.292755, y: 0.339646, z: 0.098451} + - time: 1.133333 + value: {x: -0.361685, y: 0.344235, z: 0.132162} + - time: 1.166667 + value: {x: -0.434223, y: 0.350011, z: 0.167741} + - time: 1.200000 + value: {x: -0.505926, y: 0.356477, z: 0.202864} + - time: 1.233333 + value: {x: -0.573638, y: 0.363580, z: 0.235911} + - time: 1.266667 + value: {x: -0.634824, y: 0.371679, z: 0.265878} + - time: 1.300000 + value: {x: -0.687372, y: 0.380723, z: 0.291396} + - time: 1.333333 + value: {x: -0.730746, y: 0.390784, z: 0.312437} + - time: 1.366667 + value: {x: -0.764543, y: 0.401804, z: 0.328735} + - time: 1.400000 + value: {x: -0.791500, y: 0.413314, z: 0.341692} + - time: 1.433333 + value: {x: -0.811972, y: 0.425127, z: 0.351347} + - time: 1.466667 + value: {x: -0.828000, y: 0.436925, z: 0.358800} + - time: 1.500000 + value: {x: -0.840408, y: 0.448499, z: 0.364371} + - time: 1.533333 + value: {x: -0.849824, y: 0.459984, z: 0.368636} + - time: 1.566667 + value: {x: -0.856881, y: 0.471160, z: 0.371540} + - time: 1.600000 + value: {x: -0.862143, y: 0.482222, z: 0.373710} + - time: 1.633333 + value: {x: -0.865929, y: 0.493056, z: 0.375088} + - time: 1.666667 + value: {x: -0.868529, y: 0.503712, z: 0.375899} + - time: 1.700000 + value: {x: -0.870170, y: 0.514197, z: 0.376263} + - time: 1.733333 + value: {x: -0.870936, y: 0.524512, z: 0.376180} + - time: 1.766667 + value: {x: -0.870846, y: 0.534666, z: 0.375691} + - time: 1.800000 + value: {x: -0.869968, y: 0.544637, z: 0.374818} + - time: 1.833333 + value: {x: -0.868345, y: 0.554402, z: 0.373550} + - time: 1.866667 + value: {x: -0.866061, y: 0.564066, z: 0.372114} + - time: 1.900000 + value: {x: -0.862755, y: 0.573436, z: 0.369922} + - time: 1.933333 + value: {x: -0.858744, y: 0.582747, z: 0.367597} + - time: 1.966667 + value: {x: -0.854190, y: 0.591842, z: 0.364970} + - time: 2.000000 + value: {x: -0.848758, y: 0.600746, z: 0.361849} + - time: 2.033333 + value: {x: -0.842640, y: 0.609466, z: 0.358402} + - time: 2.066667 + value: {x: -0.836224, y: 0.617979, z: 0.354819} + - time: 2.133333 + value: {x: -0.821554, y: 0.634078, z: 0.346750} + - time: 2.166667 + value: {x: -0.813780, y: 0.641604, z: 0.342520} + - time: 2.233333 + value: {x: -0.797770, y: 0.655436, z: 0.333851} + - time: 2.266667 + value: {x: -0.789558, y: 0.661553, z: 0.329299} + - time: 2.300000 + value: {x: -0.781383, y: 0.667388, z: 0.324884} + - time: 2.333333 + value: {x: -0.773181, y: 0.672681, z: 0.320572} + - time: 2.366667 + value: {x: -0.765030, y: 0.677495, z: 0.316086} + - time: 2.400000 + value: {x: -0.756974, y: 0.681847, z: 0.311830} + - time: 2.433333 + value: {x: -0.748989, y: 0.685639, z: 0.307448} + - time: 2.466667 + value: {x: -0.741167, y: 0.689095, z: 0.303209} + - time: 2.533333 + value: {x: -0.725943, y: 0.694703, z: 0.295107} + - time: 2.600000 + value: {x: -0.711340, y: 0.698512, z: 0.287278} + - time: 2.633333 + value: {x: -0.704297, y: 0.700027, z: 0.283475} + - time: 2.700000 + value: {x: -0.690701, y: 0.702207, z: 0.276031} + - time: 2.733333 + value: {x: -0.684193, y: 0.702838, z: 0.272489} + - time: 2.800000 + value: {x: -0.671663, y: 0.703960, z: 0.265844} + - time: 2.833333 + value: {x: -0.665695, y: 0.703976, z: 0.262507} + - time: 2.900000 + value: {x: -0.654194, y: 0.704083, z: 0.256243} + - time: 2.933333 + value: {x: -0.648766, y: 0.703807, z: 0.253268} + - time: 3.000000 + value: {x: -0.638324, y: 0.703292, z: 0.247677} + - time: 3.033333 + value: {x: -0.633363, y: 0.702807, z: 0.244882} + - time: 3.133333 + value: {x: -0.619411, y: 0.701318, z: 0.237369} + - time: 3.233333 + value: {x: -0.606838, y: 0.699212, z: 0.230349} + - time: 3.266667 + value: {x: -0.602855, y: 0.698637, z: 0.228258} + - time: 3.333333 + value: {x: -0.595155, y: 0.697033, z: 0.223900} + - time: 3.466667 + value: {x: -0.580603, y: 0.694081, z: 0.215868} + - time: 3.633333 + value: {x: -0.563497, y: 0.690516, z: 0.206440} + - time: 3.733333 + value: {x: -0.553779, y: 0.688560, z: 0.201073} + - time: 3.766667 + value: {x: -0.550677, y: 0.688044, z: 0.199503} + - time: 3.800000 + value: {x: -0.547353, y: 0.687359, z: 0.197568} + - time: 3.900000 + value: {x: -0.537968, y: 0.685705, z: 0.192433} + - time: 3.966667 + value: {x: -0.532169, y: 0.684816, z: 0.189346} + - time: 4.000000 + value: {x: -0.529256, y: 0.684304, z: 0.187622} + - time: 4.033333 + value: {x: -0.526237, y: 0.683968, z: 0.186138} + - time: 4.066667 + value: {x: -0.523283, y: 0.683484, z: 0.184373} + - time: 4.166667 + value: {x: -0.515049, y: 0.682480, z: 0.179855} + - time: 4.300000 + value: {x: -0.505292, y: 0.681675, z: 0.174633} + - time: 4.333333 + value: {x: -0.502796, y: 0.681442, z: 0.173131} + - time: 4.433333 + value: {x: -0.495994, y: 0.681160, z: 0.169362} + - time: 4.466667 + value: {x: -0.493945, y: 0.681166, z: 0.168280} + - time: 4.566667 + value: {x: -0.488419, y: 0.681280, z: 0.165178} + - time: 4.666667 + value: {x: -0.483850, y: 0.681705, z: 0.162583} + - time: 4.733333 + value: {x: -0.481354, y: 0.682254, z: 0.161300} + - time: 4.800000 + value: {x: -0.479254, y: 0.682780, z: 0.159937} + - time: 4.900000 + value: {x: -0.476943, y: 0.683964, z: 0.158535} + - time: 4.966667 + value: {x: -0.475966, y: 0.685015, z: 0.158015} + - time: 5.333333 + value: {x: -0.473286, y: 0.690480, z: 0.155906} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.595720, y: 0.595720, z: 0.595720} + - time: 0.233333 + value: {x: 0.623086, y: 0.623086, z: 0.623086} + - time: 0.533333 + value: {x: 0.659042, y: 0.659042, z: 0.659042} + - time: 0.833333 + value: {x: 0.695859, y: 0.695859, z: 0.695859} + - time: 1.133333 + value: {x: 0.733531, y: 0.733531, z: 0.733531} + - time: 1.433333 + value: {x: 0.772050, y: 0.772050, z: 0.772050} + - time: 1.733333 + value: {x: 0.811411, y: 0.811411, z: 0.811411} + - time: 2.033333 + value: {x: 0.851609, y: 0.851609, z: 0.851609} + - time: 2.333333 + value: {x: 0.892636, y: 0.892636, z: 0.892636} + - time: 2.633333 + value: {x: 0.934488, y: 0.934488, z: 0.934488} + - time: 2.933333 + value: {x: 0.977159, y: 0.977159, z: 0.977159} + - time: 3.233333 + value: {x: 1.020643, y: 1.020643, z: 1.020643} + - time: 3.533333 + value: {x: 1.064937, y: 1.064937, z: 1.064937} + - time: 3.833333 + value: {x: 1.110035, y: 1.110035, z: 1.110035} + - time: 4.133333 + value: {x: 1.155932, y: 1.155932, z: 1.155932} + - time: 4.433333 + value: {x: 1.202623, y: 1.202623, z: 1.202623} + - time: 4.733333 + value: {x: 1.250105, y: 1.250105, z: 1.250105} + - time: 5.033333 + value: {x: 1.298373, y: 1.298373, z: 1.298373} + - time: 5.333333 + value: {x: 1.347422, y: 1.347422, z: 1.347422} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_19: + position: + - time: 0.000000 + value: {x: -0.043286, y: 0.457145, z: -0.007559} + - time: 0.033333 + value: {x: -0.043335, y: 0.457144, z: -0.007567} + - time: 0.066667 + value: {x: -0.067677, y: 0.281694, z: -0.011289} + - time: 0.100000 + value: {x: -0.090037, y: 0.159997, z: -0.012676} + - time: 0.133333 + value: {x: -0.110886, y: 0.083834, z: -0.012516} + - time: 0.166667 + value: {x: -0.130578, y: 0.041795, z: -0.011185} + - time: 0.200000 + value: {x: -0.149459, y: 0.020712, z: -0.008740} + - time: 0.233333 + value: {x: -0.168013, y: 0.009736, z: -0.004880} + - time: 0.266667 + value: {x: -0.187453, y: 0.004547, z: 0.001864} + - time: 0.300000 + value: {x: -0.208979, y: 0.002135, z: 0.013071} + - time: 0.333333 + value: {x: -0.233524, y: 0.001118, z: 0.029977} + - time: 0.366667 + value: {x: -0.261825, y: 0.001172, z: 0.053420} + - time: 0.400000 + value: {x: -0.293966, y: 0.002237, z: 0.083503} + - time: 0.433333 + value: {x: -0.326920, y: 0.004340, z: 0.115652} + - time: 0.466667 + value: {x: -0.357213, y: 0.007527, z: 0.144529} + - time: 0.500000 + value: {x: -0.383114, y: 0.012123, z: 0.167639} + - time: 0.533333 + value: {x: -0.405648, y: 0.018327, z: 0.186334} + - time: 0.566667 + value: {x: -0.425731, y: 0.026563, z: 0.201919} + - time: 0.600000 + value: {x: -0.443463, y: 0.036778, z: 0.214572} + - time: 0.633333 + value: {x: -0.457950, y: 0.048914, z: 0.222953} + - time: 0.666667 + value: {x: -0.468723, y: 0.062326, z: 0.226220} + - time: 0.700000 + value: {x: -0.475870, y: 0.074885, z: 0.224539} + - time: 0.733333 + value: {x: -0.480163, y: 0.083917, z: 0.218963} + - time: 0.766667 + value: {x: -0.482323, y: 0.087252, z: 0.210695} + - time: 0.800000 + value: {x: -0.484007, y: 0.084694, z: 0.201949} + - time: 0.833333 + value: {x: -0.487034, y: 0.076928, z: 0.195638} + - time: 0.866667 + value: {x: -0.492779, y: 0.064411, z: 0.193554} + - time: 0.900000 + value: {x: -0.501459, y: 0.049477, z: 0.196146} + - time: 0.933333 + value: {x: -0.512778, y: 0.034595, z: 0.202934} + - time: 0.966667 + value: {x: -0.526852, y: 0.021755, z: 0.214095} + - time: 1.000000 + value: {x: -0.545587, y: 0.011604, z: 0.232375} + - time: 1.033333 + value: {x: -0.571625, y: 0.004280, z: 0.261794} + - time: 1.066667 + value: {x: -0.607107, y: -0.000314, z: 0.305369} + - time: 1.100000 + value: {x: -0.651446, y: -0.002412, z: 0.362319} + - time: 1.133333 + value: {x: -0.701172, y: -0.002673, z: 0.427438} + - time: 1.166667 + value: {x: -0.752983, y: -0.001690, z: 0.495808} + - time: 1.200000 + value: {x: -0.804139, y: 0.000150, z: 0.563436} + - time: 1.233333 + value: {x: -0.852686, y: 0.002845, z: 0.627456} + - time: 1.266667 + value: {x: -0.896975, y: 0.006457, z: 0.685218} + - time: 1.300000 + value: {x: -0.935777, y: 0.011285, z: 0.735133} + - time: 1.333333 + value: {x: -0.968697, y: 0.017130, z: 0.776429} + - time: 1.366667 + value: {x: -0.995506, y: 0.024003, z: 0.808805} + - time: 1.400000 + value: {x: -1.017906, y: 0.031390, z: 0.834756} + - time: 1.433333 + value: {x: -1.036162, y: 0.039251, z: 0.854769} + - time: 1.466667 + value: {x: -1.051530, y: 0.047177, z: 0.870640} + - time: 1.500000 + value: {x: -1.064553, y: 0.055054, z: 0.883240} + - time: 1.533333 + value: {x: -1.075556, y: 0.062725, z: 0.892846} + - time: 1.566667 + value: {x: -1.085037, y: 0.070376, z: 0.900469} + - time: 1.600000 + value: {x: -1.093259, y: 0.077819, z: 0.906240} + - time: 1.633333 + value: {x: -1.100480, y: 0.085173, z: 0.910697} + - time: 1.666667 + value: {x: -1.106865, y: 0.092401, z: 0.914020} + - time: 1.700000 + value: {x: -1.112558, y: 0.099501, z: 0.916417} + - time: 1.733333 + value: {x: -1.117621, y: 0.106514, z: 0.918004} + - time: 1.766667 + value: {x: -1.122062, y: 0.113415, z: 0.918770} + - time: 1.800000 + value: {x: -1.125929, y: 0.120193, z: 0.918788} + - time: 1.833333 + value: {x: -1.129258, y: 0.126858, z: 0.918135} + - time: 1.866667 + value: {x: -1.132056, y: 0.133310, z: 0.916681} + - time: 1.900000 + value: {x: -1.134207, y: 0.139803, z: 0.914553} + - time: 1.933333 + value: {x: -1.135787, y: 0.146059, z: 0.911518} + - time: 1.966667 + value: {x: -1.136968, y: 0.152195, z: 0.908013} + - time: 2.000000 + value: {x: -1.137546, y: 0.158262, z: 0.903751} + - time: 2.033333 + value: {x: -1.137624, y: 0.164184, z: 0.898829} + - time: 2.066667 + value: {x: -1.137447, y: 0.169944, z: 0.893612} + - time: 2.100000 + value: {x: -1.136684, y: 0.175494, z: 0.887687} + - time: 2.133333 + value: {x: -1.135752, y: 0.180683, z: 0.881442} + - time: 2.166667 + value: {x: -1.134532, y: 0.185583, z: 0.874918} + - time: 2.200000 + value: {x: -1.133168, y: 0.190175, z: 0.868356} + - time: 2.233333 + value: {x: -1.131621, y: 0.194297, z: 0.861403} + - time: 2.266667 + value: {x: -1.129981, y: 0.198056, z: 0.854576} + - time: 2.300000 + value: {x: -1.128276, y: 0.201450, z: 0.847645} + - time: 2.333333 + value: {x: -1.126467, y: 0.204221, z: 0.840549} + - time: 2.366667 + value: {x: -1.124692, y: 0.206781, z: 0.833727} + - time: 2.400000 + value: {x: -1.122872, y: 0.208720, z: 0.826773} + - time: 2.433333 + value: {x: -1.121091, y: 0.210325, z: 0.820073} + - time: 2.466667 + value: {x: -1.119343, y: 0.211567, z: 0.813444} + - time: 2.533333 + value: {x: -1.115918, y: 0.212694, z: 0.800375} + - time: 2.600000 + value: {x: -1.112701, y: 0.212229, z: 0.787911} + - time: 2.633333 + value: {x: -1.111190, y: 0.211687, z: 0.781932} + - time: 2.700000 + value: {x: -1.108361, y: 0.209960, z: 0.770512} + - time: 2.800000 + value: {x: -1.104557, y: 0.205798, z: 0.754263} + - time: 2.866667 + value: {x: -1.102404, y: 0.202223, z: 0.744330} + - time: 2.900000 + value: {x: -1.101415, y: 0.200545, z: 0.739662} + - time: 3.000000 + value: {x: -1.098853, y: 0.194422, z: 0.726238} + - time: 3.100000 + value: {x: -1.096902, y: 0.187916, z: 0.714204} + - time: 3.166667 + value: {x: -1.095877, y: 0.183502, z: 0.706818} + - time: 3.266667 + value: {x: -1.094699, y: 0.176938, z: 0.696659} + - time: 3.366667 + value: {x: -1.093783, y: 0.170365, z: 0.687364} + - time: 3.500000 + value: {x: -1.092610, y: 0.161899, z: 0.675506} + - time: 3.666667 + value: {x: -1.091055, y: 0.151968, z: 0.661358} + - time: 3.733333 + value: {x: -1.090495, y: 0.148357, z: 0.656164} + - time: 3.866667 + value: {x: -1.088983, y: 0.141382, z: 0.645369} + - time: 4.000000 + value: {x: -1.087740, y: 0.135296, z: 0.635712} + - time: 4.033333 + value: {x: -1.087266, y: 0.133767, z: 0.632993} + - time: 4.100000 + value: {x: -1.086491, y: 0.131028, z: 0.628146} + - time: 4.200000 + value: {x: -1.085598, y: 0.127291, z: 0.621509} + - time: 4.400000 + value: {x: -1.084168, y: 0.121100, z: 0.609579} + - time: 4.533333 + value: {x: -1.083751, y: 0.117899, z: 0.602954} + - time: 4.600000 + value: {x: -1.083819, y: 0.116593, z: 0.600218} + - time: 4.700000 + value: {x: -1.084272, y: 0.114995, z: 0.596823} + - time: 4.733333 + value: {x: -1.084521, y: 0.114567, z: 0.595896} + - time: 4.866667 + value: {x: -1.085991, y: 0.113308, z: 0.593078} + - time: 4.966667 + value: {x: -1.087627, y: 0.112893, z: 0.591997} + - time: 5.333333 + value: {x: -1.094240, y: 0.112779, z: 0.590892} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.595720, y: 0.595720, z: 0.595720} + - time: 0.233333 + value: {x: 0.623086, y: 0.623086, z: 0.623086} + - time: 0.533333 + value: {x: 0.659042, y: 0.659042, z: 0.659042} + - time: 0.833333 + value: {x: 0.695859, y: 0.695859, z: 0.695859} + - time: 1.133333 + value: {x: 0.733531, y: 0.733531, z: 0.733531} + - time: 1.433333 + value: {x: 0.772050, y: 0.772050, z: 0.772050} + - time: 1.733333 + value: {x: 0.811411, y: 0.811411, z: 0.811411} + - time: 2.033333 + value: {x: 0.851609, y: 0.851609, z: 0.851609} + - time: 2.333333 + value: {x: 0.892636, y: 0.892636, z: 0.892636} + - time: 2.633333 + value: {x: 0.934488, y: 0.934488, z: 0.934488} + - time: 2.933333 + value: {x: 0.977159, y: 0.977159, z: 0.977159} + - time: 3.233333 + value: {x: 1.020643, y: 1.020643, z: 1.020643} + - time: 3.533333 + value: {x: 1.064937, y: 1.064937, z: 1.064937} + - time: 3.833333 + value: {x: 1.110035, y: 1.110035, z: 1.110035} + - time: 4.133333 + value: {x: 1.155932, y: 1.155932, z: 1.155932} + - time: 4.433333 + value: {x: 1.202623, y: 1.202623, z: 1.202623} + - time: 4.733333 + value: {x: 1.250105, y: 1.250105, z: 1.250105} + - time: 5.033333 + value: {x: 1.298373, y: 1.298373, z: 1.298373} + - time: 5.333333 + value: {x: 1.347422, y: 1.347422, z: 1.347422} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_2: + position: + - time: 0.000000 + value: {x: 0.013710, y: 0.487939, z: -0.011455} + - time: 0.033333 + value: {x: 0.013901, y: 0.488338, z: -0.011606} + - time: 0.066667 + value: {x: 0.022452, y: 0.330751, z: -0.018252} + - time: 0.100000 + value: {x: 0.032275, y: 0.224959, z: -0.024199} + - time: 0.133333 + value: {x: 0.042896, y: 0.163353, z: -0.029636} + - time: 0.166667 + value: {x: 0.054142, y: 0.134878, z: -0.034684} + - time: 0.200000 + value: {x: 0.066084, y: 0.126569, z: -0.039449} + - time: 0.233333 + value: {x: 0.079214, y: 0.127734, z: -0.043987} + - time: 0.266667 + value: {x: 0.095430, y: 0.134202, z: -0.048312} + - time: 0.300000 + value: {x: 0.116655, y: 0.143004, z: -0.052490} + - time: 0.333333 + value: {x: 0.144379, y: 0.152778, z: -0.056587} + - time: 0.366667 + value: {x: 0.179830, y: 0.163408, z: -0.060486} + - time: 0.400000 + value: {x: 0.223013, y: 0.174740, z: -0.064320} + - time: 0.433333 + value: {x: 0.268425, y: 0.186822, z: -0.068113} + - time: 0.466667 + value: {x: 0.309810, y: 0.199871, z: -0.071745} + - time: 0.500000 + value: {x: 0.343966, y: 0.214047, z: -0.075397} + - time: 0.533333 + value: {x: 0.372707, y: 0.229717, z: -0.078940} + - time: 0.566667 + value: {x: 0.397621, y: 0.247325, z: -0.082378} + - time: 0.600000 + value: {x: 0.418823, y: 0.266730, z: -0.085808} + - time: 0.633333 + value: {x: 0.434672, y: 0.287850, z: -0.089267} + - time: 0.666667 + value: {x: 0.444331, y: 0.310211, z: -0.092614} + - time: 0.700000 + value: {x: 0.447909, y: 0.331600, z: -0.095937} + - time: 0.733333 + value: {x: 0.446781, y: 0.349443, z: -0.099153} + - time: 0.766667 + value: {x: 0.442162, y: 0.361351, z: -0.102477} + - time: 0.800000 + value: {x: 0.437065, y: 0.367450, z: -0.105614} + - time: 0.833333 + value: {x: 0.434648, y: 0.368090, z: -0.108889} + - time: 0.866667 + value: {x: 0.437430, y: 0.364069, z: -0.111983} + - time: 0.900000 + value: {x: 0.445732, y: 0.357510, z: -0.115104} + - time: 0.933333 + value: {x: 0.459022, y: 0.350930, z: -0.118211} + - time: 0.966667 + value: {x: 0.477487, y: 0.346291, z: -0.121337} + - time: 1.000000 + value: {x: 0.504543, y: 0.344341, z: -0.124386} + - time: 1.033333 + value: {x: 0.544872, y: 0.345055, z: -0.127522} + - time: 1.066667 + value: {x: 0.602334, y: 0.348556, z: -0.130536} + - time: 1.100000 + value: {x: 0.675839, y: 0.354461, z: -0.133575} + - time: 1.133333 + value: {x: 0.759189, y: 0.362195, z: -0.136559} + - time: 1.166667 + value: {x: 0.846477, y: 0.371188, z: -0.139468} + - time: 1.200000 + value: {x: 0.932768, y: 0.380936, z: -0.142421} + - time: 1.233333 + value: {x: 1.014551, y: 0.391380, z: -0.145475} + - time: 1.266667 + value: {x: 1.088930, y: 0.402889, z: -0.148331} + - time: 1.300000 + value: {x: 1.153629, y: 0.415394, z: -0.151353} + - time: 1.333333 + value: {x: 1.207989, y: 0.428975, z: -0.154265} + - time: 1.366667 + value: {x: 1.251580, y: 0.443573, z: -0.157141} + - time: 1.400000 + value: {x: 1.287449, y: 0.458717, z: -0.159936} + - time: 1.433333 + value: {x: 1.316034, y: 0.474209, z: -0.162813} + - time: 1.466667 + value: {x: 1.339594, y: 0.489735, z: -0.165675} + - time: 1.500000 + value: {x: 1.359077, y: 0.505076, z: -0.168634} + - time: 1.533333 + value: {x: 1.375116, y: 0.520387, z: -0.171367} + - time: 1.566667 + value: {x: 1.388517, y: 0.535416, z: -0.174328} + - time: 1.600000 + value: {x: 1.399824, y: 0.550386, z: -0.177094} + - time: 1.633333 + value: {x: 1.409445, y: 0.565162, z: -0.179930} + - time: 1.666667 + value: {x: 1.417688, y: 0.579800, z: -0.182735} + - time: 1.700000 + value: {x: 1.424810, y: 0.594306, z: -0.185506} + - time: 1.733333 + value: {x: 1.430910, y: 0.608677, z: -0.188289} + - time: 1.766667 + value: {x: 1.436008, y: 0.622923, z: -0.191046} + - time: 1.800000 + value: {x: 1.440179, y: 0.637019, z: -0.193793} + - time: 1.833333 + value: {x: 1.443481, y: 0.650937, z: -0.196571} + - time: 1.866667 + value: {x: 1.445964, y: 0.664805, z: -0.199139} + - time: 1.900000 + value: {x: 1.447328, y: 0.678374, z: -0.202029} + - time: 1.933333 + value: {x: 1.447809, y: 0.691942, z: -0.204634} + - time: 1.966667 + value: {x: 1.447657, y: 0.705317, z: -0.207279} + - time: 2.000000 + value: {x: 1.446500, y: 0.718518, z: -0.209999} + - time: 2.033333 + value: {x: 1.444534, y: 0.731561, z: -0.212698} + - time: 2.066667 + value: {x: 1.442198, y: 0.744424, z: -0.215380} + - time: 2.100000 + value: {x: 1.438871, y: 0.756919, z: -0.218197} + - time: 2.133333 + value: {x: 1.435363, y: 0.769289, z: -0.220724} + - time: 2.166667 + value: {x: 1.431398, y: 0.781233, z: -0.223365} + - time: 2.200000 + value: {x: 1.427222, y: 0.792673, z: -0.226180} + - time: 2.233333 + value: {x: 1.422849, y: 0.803963, z: -0.228615} + - time: 2.266667 + value: {x: 1.418324, y: 0.814535, z: -0.231400} + - time: 2.300000 + value: {x: 1.413778, y: 0.824863, z: -0.234019} + - time: 2.333333 + value: {x: 1.409135, y: 0.834691, z: -0.236470} + - time: 2.366667 + value: {x: 1.404579, y: 0.844013, z: -0.239207} + - time: 2.400000 + value: {x: 1.400040, y: 0.852927, z: -0.241677} + - time: 2.433333 + value: {x: 1.395603, y: 0.861261, z: -0.244382} + - time: 2.466667 + value: {x: 1.391296, y: 0.869284, z: -0.246996} + - time: 2.533333 + value: {x: 1.383019, y: 0.884102, z: -0.251976} + - time: 2.600000 + value: {x: 1.375338, y: 0.897160, z: -0.257004} + - time: 2.633333 + value: {x: 1.371748, y: 0.903310, z: -0.259542} + - time: 2.700000 + value: {x: 1.365057, y: 0.914767, z: -0.264738} + - time: 2.733333 + value: {x: 1.361984, y: 0.920058, z: -0.267279} + - time: 2.800000 + value: {x: 1.356247, y: 0.930573, z: -0.272056} + - time: 2.833333 + value: {x: 1.353718, y: 0.935252, z: -0.274691} + - time: 2.866667 + value: {x: 1.351286, y: 0.940088, z: -0.277009} + - time: 2.900000 + value: {x: 1.349011, y: 0.944756, z: -0.279660} + - time: 3.000000 + value: {x: 1.343261, y: 0.958136, z: -0.286870} + - time: 3.033333 + value: {x: 1.341697, y: 0.962352, z: -0.289436} + - time: 3.133333 + value: {x: 1.337770, y: 0.975105, z: -0.296458} + - time: 3.233333 + value: {x: 1.335228, y: 0.987197, z: -0.303773} + - time: 3.266667 + value: {x: 1.334519, y: 0.991404, z: -0.305964} + - time: 3.300000 + value: {x: 1.333948, y: 0.995257, z: -0.308521} + - time: 3.466667 + value: {x: 1.331843, y: 1.015308, z: -0.320152} + - time: 3.566667 + value: {x: 1.331161, y: 1.027387, z: -0.327100} + - time: 3.700000 + value: {x: 1.330167, y: 1.043718, z: -0.335899} + - time: 3.733333 + value: {x: 1.330119, y: 1.047715, z: -0.338357} + - time: 3.766667 + value: {x: 1.330040, y: 1.051984, z: -0.340343} + - time: 3.800000 + value: {x: 1.329772, y: 1.055977, z: -0.342776} + - time: 3.833333 + value: {x: 1.329542, y: 1.060205, z: -0.344825} + - time: 3.933333 + value: {x: 1.329408, y: 1.072676, z: -0.351605} + - time: 3.966667 + value: {x: 1.329485, y: 1.077043, z: -0.353561} + - time: 4.000000 + value: {x: 1.329554, y: 1.081174, z: -0.355965} + - time: 4.033333 + value: {x: 1.329391, y: 1.085598, z: -0.357830} + - time: 4.066667 + value: {x: 1.329376, y: 1.089736, z: -0.360262} + - time: 4.100000 + value: {x: 1.329390, y: 1.094209, z: -0.362120} + - time: 4.133333 + value: {x: 1.329552, y: 1.098391, z: -0.364545} + - time: 4.166667 + value: {x: 1.329771, y: 1.102750, z: -0.366686} + - time: 4.200000 + value: {x: 1.330040, y: 1.107312, z: -0.368491} + - time: 4.266666 + value: {x: 1.330932, y: 1.116024, z: -0.372965} + - time: 4.300000 + value: {x: 1.331326, y: 1.120614, z: -0.374821} + - time: 4.333333 + value: {x: 1.331660, y: 1.124950, z: -0.377164} + - time: 4.400000 + value: {x: 1.332542, y: 1.134126, z: -0.381037} + - time: 4.433333 + value: {x: 1.333179, y: 1.138505, z: -0.383413} + - time: 4.500000 + value: {x: 1.334681, y: 1.147735, z: -0.387402} + - time: 4.533333 + value: {x: 1.335556, y: 1.152507, z: -0.389163} + - time: 4.566667 + value: {x: 1.336593, y: 1.156989, z: -0.391494} + - time: 4.600000 + value: {x: 1.337664, y: 1.161834, z: -0.393194} + - time: 4.666667 + value: {x: 1.340205, y: 1.171080, z: -0.397524} + - time: 4.700000 + value: {x: 1.341575, y: 1.176014, z: -0.399174} + - time: 4.733333 + value: {x: 1.343083, y: 1.180777, z: -0.401177} + - time: 4.766666 + value: {x: 1.344721, y: 1.185421, z: -0.403438} + - time: 4.866667 + value: {x: 1.350129, y: 1.200166, z: -0.408966} + - time: 4.900000 + value: {x: 1.352179, y: 1.204935, z: -0.411161} + - time: 4.966667 + value: {x: 1.356513, y: 1.214993, z: -0.414726} + - time: 5.333333 + value: {x: 1.382152, y: 1.268685, z: -0.435095} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.400714, y: 0.400714, z: 0.400714} + - time: 0.033333 + value: {x: 0.419434, y: 0.419434, z: 0.419434} + - time: 0.066667 + value: {x: 0.438520, y: 0.438520, z: 0.438520} + - time: 0.100000 + value: {x: 0.457968, y: 0.457968, z: 0.457968} + - time: 0.133333 + value: {x: 0.477777, y: 0.477777, z: 0.477777} + - time: 0.166667 + value: {x: 0.497945, y: 0.497945, z: 0.497945} + - time: 0.200000 + value: {x: 0.518469, y: 0.518469, z: 0.518469} + - time: 0.233333 + value: {x: 0.539347, y: 0.539347, z: 0.539347} + - time: 0.266667 + value: {x: 0.560577, y: 0.560577, z: 0.560577} + - time: 0.300000 + value: {x: 0.582158, y: 0.582158, z: 0.582158} + - time: 0.333333 + value: {x: 0.604087, y: 0.604087, z: 0.604087} + - time: 0.366667 + value: {x: 0.626363, y: 0.626363, z: 0.626363} + - time: 0.400000 + value: {x: 0.648983, y: 0.648983, z: 0.648983} + - time: 0.433333 + value: {x: 0.671946, y: 0.671946, z: 0.671946} + - time: 0.466667 + value: {x: 0.695251, y: 0.695251, z: 0.695251} + - time: 0.500000 + value: {x: 0.718896, y: 0.718896, z: 0.718896} + - time: 0.533333 + value: {x: 0.742878, y: 0.742878, z: 0.742878} + - time: 0.566667 + value: {x: 0.767198, y: 0.767198, z: 0.767198} + - time: 0.600000 + value: {x: 0.791851, y: 0.791851, z: 0.791851} + - time: 0.633333 + value: {x: 0.816839, y: 0.816839, z: 0.816839} + - time: 0.666667 + value: {x: 0.842159, y: 0.842159, z: 0.842159} + - time: 0.700000 + value: {x: 0.867808, y: 0.867808, z: 0.867808} + - time: 0.733333 + value: {x: 0.893788, y: 0.893788, z: 0.893788} + - time: 0.766667 + value: {x: 0.920095, y: 0.920095, z: 0.920095} + - time: 0.800000 + value: {x: 0.946728, y: 0.946728, z: 0.946728} + - time: 0.833333 + value: {x: 0.973686, y: 0.973686, z: 0.973686} + - time: 0.866667 + value: {x: 1.000968, y: 1.000968, z: 1.000968} + - time: 0.900000 + value: {x: 1.028572, y: 1.028572, z: 1.028572} + - time: 0.933333 + value: {x: 1.056498, y: 1.056498, z: 1.056498} + - time: 0.966667 + value: {x: 1.084744, y: 1.084744, z: 1.084744} + - time: 1.000000 + value: {x: 1.113308, y: 1.113308, z: 1.113308} + - time: 1.033333 + value: {x: 1.142190, y: 1.142190, z: 1.142190} + - time: 1.066667 + value: {x: 1.171389, y: 1.171389, z: 1.171389} + - time: 1.100000 + value: {x: 1.200902, y: 1.200902, z: 1.200902} + - time: 1.133333 + value: {x: 1.230731, y: 1.230731, z: 1.230731} + - time: 1.166667 + value: {x: 1.260872, y: 1.260872, z: 1.260872} + - time: 1.200000 + value: {x: 1.291324, y: 1.291324, z: 1.291324} + - time: 1.233333 + value: {x: 1.322089, y: 1.322089, z: 1.322089} + - time: 1.266667 + value: {x: 1.353163, y: 1.353163, z: 1.353163} + - time: 1.300000 + value: {x: 1.384545, y: 1.384545, z: 1.384545} + - time: 1.333333 + value: {x: 1.416236, y: 1.416236, z: 1.416236} + - time: 1.366667 + value: {x: 1.448234, y: 1.448234, z: 1.448234} + - time: 1.400000 + value: {x: 1.480537, y: 1.480537, z: 1.480537} + - time: 1.433333 + value: {x: 1.513146, y: 1.513146, z: 1.513146} + - time: 1.466667 + value: {x: 1.546058, y: 1.546058, z: 1.546058} + - time: 1.500000 + value: {x: 1.579273, y: 1.579273, z: 1.579273} + - time: 1.533333 + value: {x: 1.612791, y: 1.612791, z: 1.612791} + - time: 1.566667 + value: {x: 1.646609, y: 1.646609, z: 1.646609} + - time: 1.600000 + value: {x: 1.680728, y: 1.680728, z: 1.680728} + - time: 1.633333 + value: {x: 1.715147, y: 1.715147, z: 1.715147} + - time: 1.666667 + value: {x: 1.749864, y: 1.749864, z: 1.749864} + - time: 1.700000 + value: {x: 1.784878, y: 1.784878, z: 1.784878} + - time: 1.733333 + value: {x: 1.820190, y: 1.820190, z: 1.820190} + - time: 1.766667 + value: {x: 1.855798, y: 1.855798, z: 1.855798} + - time: 1.800000 + value: {x: 1.891701, y: 1.891701, z: 1.891701} + - time: 1.833333 + value: {x: 1.927899, y: 1.927899, z: 1.927899} + - time: 1.866667 + value: {x: 1.964390, y: 1.964390, z: 1.964390} + - time: 1.900000 + value: {x: 2.001174, y: 2.001174, z: 2.001174} + - time: 1.933333 + value: {x: 2.038250, y: 2.038250, z: 2.038250} + - time: 1.966667 + value: {x: 2.075617, y: 2.075617, z: 2.075617} + - time: 2.000000 + value: {x: 2.113275, y: 2.113275, z: 2.113275} + - time: 2.033333 + value: {x: 2.151223, y: 2.151223, z: 2.151223} + - time: 2.066667 + value: {x: 2.189460, y: 2.189460, z: 2.189460} + - time: 2.100000 + value: {x: 2.227985, y: 2.227985, z: 2.227985} + - time: 2.133333 + value: {x: 2.266797, y: 2.266797, z: 2.266797} + - time: 2.166667 + value: {x: 2.305897, y: 2.305897, z: 2.305897} + - time: 2.200000 + value: {x: 2.345283, y: 2.345283, z: 2.345283} + - time: 2.233333 + value: {x: 2.384955, y: 2.384955, z: 2.384955} + - time: 2.266667 + value: {x: 2.424911, y: 2.424911, z: 2.424911} + - time: 2.300000 + value: {x: 2.465151, y: 2.465151, z: 2.465151} + - time: 2.333333 + value: {x: 2.505676, y: 2.505676, z: 2.505676} + - time: 2.366667 + value: {x: 2.546482, y: 2.546482, z: 2.546482} + - time: 2.400000 + value: {x: 2.587570, y: 2.587570, z: 2.587570} + - time: 2.433333 + value: {x: 2.628942, y: 2.628942, z: 2.628942} + - time: 2.466667 + value: {x: 2.670593, y: 2.670593, z: 2.670593} + - time: 2.500000 + value: {x: 2.712525, y: 2.712525, z: 2.712525} + - time: 2.533333 + value: {x: 2.754737, y: 2.754737, z: 2.754737} + - time: 2.566667 + value: {x: 2.797227, y: 2.797227, z: 2.797227} + - time: 2.600000 + value: {x: 2.839996, y: 2.839996, z: 2.839996} + - time: 2.633333 + value: {x: 2.883043, y: 2.883043, z: 2.883043} + - time: 2.666667 + value: {x: 2.926366, y: 2.926366, z: 2.926366} + - time: 2.700000 + value: {x: 2.969967, y: 2.969967, z: 2.969967} + - time: 2.733333 + value: {x: 3.013844, y: 3.013844, z: 3.013844} + - time: 2.766667 + value: {x: 3.057996, y: 3.057996, z: 3.057996} + - time: 2.800000 + value: {x: 3.102423, y: 3.102423, z: 3.102423} + - time: 2.833333 + value: {x: 3.147125, y: 3.147125, z: 3.147125} + - time: 2.866667 + value: {x: 3.192100, y: 3.192100, z: 3.192100} + - time: 2.900000 + value: {x: 3.237348, y: 3.237348, z: 3.237348} + - time: 2.933333 + value: {x: 3.282870, y: 3.282870, z: 3.282870} + - time: 2.966667 + value: {x: 3.328663, y: 3.328663, z: 3.328663} + - time: 3.000000 + value: {x: 3.374727, y: 3.374727, z: 3.374727} + - time: 3.033333 + value: {x: 3.421064, y: 3.421064, z: 3.421064} + - time: 3.066667 + value: {x: 3.467670, y: 3.467670, z: 3.467670} + - time: 3.100000 + value: {x: 3.514546, y: 3.514546, z: 3.514546} + - time: 3.133333 + value: {x: 3.561692, y: 3.561692, z: 3.561692} + - time: 3.166667 + value: {x: 3.609108, y: 3.609108, z: 3.609108} + - time: 3.200000 + value: {x: 3.656791, y: 3.656791, z: 3.656791} + - time: 3.233333 + value: {x: 3.704742, y: 3.704742, z: 3.704742} + - time: 3.266667 + value: {x: 3.752961, y: 3.752961, z: 3.752961} + - time: 3.300000 + value: {x: 3.801447, y: 3.801447, z: 3.801447} + - time: 3.333333 + value: {x: 3.850199, y: 3.850199, z: 3.850199} + - time: 3.366667 + value: {x: 3.899218, y: 3.899218, z: 3.899218} + - time: 3.400000 + value: {x: 3.948502, y: 3.948502, z: 3.948502} + - time: 3.433333 + value: {x: 3.998051, y: 3.998051, z: 3.998051} + - time: 3.466667 + value: {x: 4.047864, y: 4.047864, z: 4.047864} + - time: 3.500000 + value: {x: 4.097942, y: 4.097942, z: 4.097942} + - time: 3.533333 + value: {x: 4.148283, y: 4.148283, z: 4.148283} + - time: 3.566667 + value: {x: 4.198888, y: 4.198888, z: 4.198888} + - time: 3.600000 + value: {x: 4.249756, y: 4.249756, z: 4.249756} + - time: 3.633333 + value: {x: 4.300885, y: 4.300885, z: 4.300885} + - time: 3.666667 + value: {x: 4.352276, y: 4.352276, z: 4.352276} + - time: 3.700000 + value: {x: 4.403930, y: 4.403930, z: 4.403930} + - time: 3.733333 + value: {x: 4.455843, y: 4.455843, z: 4.455843} + - time: 3.766667 + value: {x: 4.508018, y: 4.508018, z: 4.508018} + - time: 3.800000 + value: {x: 4.560452, y: 4.560452, z: 4.560452} + - time: 3.833333 + value: {x: 4.613145, y: 4.613145, z: 4.613145} + - time: 3.866667 + value: {x: 4.666099, y: 4.666099, z: 4.666099} + - time: 3.900000 + value: {x: 4.719311, y: 4.719311, z: 4.719311} + - time: 3.933333 + value: {x: 4.772781, y: 4.772781, z: 4.772781} + - time: 3.966667 + value: {x: 4.826510, y: 4.826510, z: 4.826510} + - time: 4.000000 + value: {x: 4.880496, y: 4.880496, z: 4.880496} + - time: 4.033333 + value: {x: 4.934739, y: 4.934739, z: 4.934739} + - time: 4.066667 + value: {x: 4.989239, y: 4.989239, z: 4.989239} + - time: 4.100000 + value: {x: 5.043995, y: 5.043995, z: 5.043995} + - time: 4.133333 + value: {x: 5.099007, y: 5.099007, z: 5.099007} + - time: 4.166667 + value: {x: 5.154274, y: 5.154274, z: 5.154274} + - time: 4.200000 + value: {x: 5.209797, y: 5.209797, z: 5.209797} + - time: 4.233333 + value: {x: 5.265574, y: 5.265574, z: 5.265574} + - time: 4.266666 + value: {x: 5.321607, y: 5.321607, z: 5.321607} + - time: 4.300000 + value: {x: 5.377894, y: 5.377894, z: 5.377894} + - time: 4.333333 + value: {x: 5.434433, y: 5.434433, z: 5.434433} + - time: 4.366667 + value: {x: 5.491226, y: 5.491226, z: 5.491226} + - time: 4.400000 + value: {x: 5.548272, y: 5.548272, z: 5.548272} + - time: 4.433333 + value: {x: 5.605569, y: 5.605569, z: 5.605569} + - time: 4.466667 + value: {x: 5.663120, y: 5.663120, z: 5.663120} + - time: 4.500000 + value: {x: 5.720922, y: 5.720922, z: 5.720922} + - time: 4.533333 + value: {x: 5.778975, y: 5.778975, z: 5.778975} + - time: 4.566667 + value: {x: 5.837280, y: 5.837280, z: 5.837280} + - time: 4.600000 + value: {x: 5.895835, y: 5.895835, z: 5.895835} + - time: 4.633333 + value: {x: 5.954640, y: 5.954640, z: 5.954640} + - time: 4.666667 + value: {x: 6.013695, y: 6.013695, z: 6.013695} + - time: 4.700000 + value: {x: 6.072999, y: 6.072999, z: 6.072999} + - time: 4.733333 + value: {x: 6.132553, y: 6.132553, z: 6.132553} + - time: 4.766666 + value: {x: 6.192357, y: 6.192357, z: 6.192357} + - time: 4.800000 + value: {x: 6.252409, y: 6.252409, z: 6.252409} + - time: 4.833333 + value: {x: 6.312710, y: 6.312710, z: 6.312710} + - time: 4.866667 + value: {x: 6.373257, y: 6.373257, z: 6.373257} + - time: 4.900000 + value: {x: 6.434052, y: 6.434052, z: 6.434052} + - time: 4.933333 + value: {x: 6.495093, y: 6.495093, z: 6.495093} + - time: 4.966667 + value: {x: 6.556385, y: 6.556385, z: 6.556385} + - time: 5.000000 + value: {x: 6.617919, y: 6.617919, z: 6.617919} + - time: 5.033333 + value: {x: 6.679702, y: 6.679702, z: 6.679702} + - time: 5.066667 + value: {x: 6.741729, y: 6.741729, z: 6.741729} + - time: 5.100000 + value: {x: 6.804002, y: 6.804002, z: 6.804002} + - time: 5.133333 + value: {x: 6.866521, y: 6.866521, z: 6.866521} + - time: 5.166667 + value: {x: 6.929286, y: 6.929286, z: 6.929286} + - time: 5.200000 + value: {x: 6.992294, y: 6.992294, z: 6.992294} + - time: 5.233333 + value: {x: 7.055546, y: 7.055546, z: 7.055546} + - time: 5.266666 + value: {x: 7.119041, y: 7.119041, z: 7.119041} + - time: 5.300000 + value: {x: 7.182782, y: 7.182782, z: 7.182782} + - time: 5.333333 + value: {x: 7.246766, y: 7.246766, z: 7.246766} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_20: + position: + - time: 0.000000 + value: {x: 0.037767, y: 0.463226, z: 0.023050} + - time: 0.033333 + value: {x: 0.037808, y: 0.463232, z: 0.023077} + - time: 0.066667 + value: {x: 0.058449, y: 0.291159, z: 0.036341} + - time: 0.100000 + value: {x: 0.075120, y: 0.172382, z: 0.049695} + - time: 0.133333 + value: {x: 0.089019, y: 0.098820, z: 0.062978} + - time: 0.166667 + value: {x: 0.100808, y: 0.059147, z: 0.076197} + - time: 0.200000 + value: {x: 0.110794, y: 0.040230, z: 0.089543} + - time: 0.233333 + value: {x: 0.118962, y: 0.031256, z: 0.103495} + - time: 0.266667 + value: {x: 0.124459, y: 0.027948, z: 0.119656} + - time: 0.300000 + value: {x: 0.126327, y: 0.027294, z: 0.139697} + - time: 0.333333 + value: {x: 0.123814, y: 0.027907, z: 0.164927} + - time: 0.366667 + value: {x: 0.116420, y: 0.029548, z: 0.196262} + - time: 0.400000 + value: {x: 0.104128, y: 0.032105, z: 0.233840} + - time: 0.433333 + value: {x: 0.090068, y: 0.035605, z: 0.273128} + - time: 0.466667 + value: {x: 0.077877, y: 0.040169, z: 0.308838} + - time: 0.500000 + value: {x: 0.069270, y: 0.046040, z: 0.338482} + - time: 0.533333 + value: {x: 0.063361, y: 0.053492, z: 0.363455} + - time: 0.566667 + value: {x: 0.059291, y: 0.062954, z: 0.385085} + - time: 0.600000 + value: {x: 0.056964, y: 0.074329, z: 0.403553} + - time: 0.633333 + value: {x: 0.057299, y: 0.087546, z: 0.417537} + - time: 0.666667 + value: {x: 0.060879, y: 0.102038, z: 0.426224} + - time: 0.700000 + value: {x: 0.067607, y: 0.115634, z: 0.429783} + - time: 0.733333 + value: {x: 0.076784, y: 0.125704, z: 0.429290} + - time: 0.766667 + value: {x: 0.087612, y: 0.129980, z: 0.425931} + - time: 0.800000 + value: {x: 0.098604, y: 0.128407, z: 0.421967} + - time: 0.833333 + value: {x: 0.107806, y: 0.121521, z: 0.420281} + - time: 0.866667 + value: {x: 0.114018, y: 0.109931, z: 0.422708} + - time: 0.900000 + value: {x: 0.116944, y: 0.095875, z: 0.429682} + - time: 0.933333 + value: {x: 0.116915, y: 0.081843, z: 0.440732} + - time: 0.966667 + value: {x: 0.113817, y: 0.069812, z: 0.456041} + - time: 1.000000 + value: {x: 0.105803, y: 0.060475, z: 0.478369} + - time: 1.033333 + value: {x: 0.090170, y: 0.053897, z: 0.511721} + - time: 1.066667 + value: {x: 0.064885, y: 0.050077, z: 0.559145} + - time: 1.100000 + value: {x: 0.030478, y: 0.048714, z: 0.619849} + - time: 1.133333 + value: {x: -0.009531, y: 0.049189, z: 0.688634} + - time: 1.166667 + value: {x: -0.051825, y: 0.050916, z: 0.760595} + - time: 1.200000 + value: {x: -0.093706, y: 0.053458, z: 0.831725} + - time: 1.233333 + value: {x: -0.133234, y: 0.056789, z: 0.899156} + - time: 1.266667 + value: {x: -0.168624, y: 0.061101, z: 0.960275} + - time: 1.300000 + value: {x: -0.198796, y: 0.066539, z: 1.013455} + - time: 1.333333 + value: {x: -0.223229, y: 0.073021, z: 1.057955} + - time: 1.366667 + value: {x: -0.241718, y: 0.080527, z: 1.093472} + - time: 1.400000 + value: {x: -0.255943, y: 0.088561, z: 1.122505} + - time: 1.433333 + value: {x: -0.266229, y: 0.097018, z: 1.145528} + - time: 1.466667 + value: {x: -0.273786, y: 0.105529, z: 1.164350} + - time: 1.500000 + value: {x: -0.279198, y: 0.113938, z: 1.179829} + - time: 1.533333 + value: {x: -0.282653, y: 0.122213, z: 1.192280} + - time: 1.566667 + value: {x: -0.284828, y: 0.130363, z: 1.202669} + - time: 1.600000 + value: {x: -0.285811, y: 0.138368, z: 1.211171} + - time: 1.633333 + value: {x: -0.285964, y: 0.146242, z: 1.218300} + - time: 1.666667 + value: {x: -0.285405, y: 0.153987, z: 1.224245} + - time: 1.700000 + value: {x: -0.284273, y: 0.161605, z: 1.229218} + - time: 1.733333 + value: {x: -0.282646, y: 0.169117, z: 1.233332} + - time: 1.766667 + value: {x: -0.280514, y: 0.176515, z: 1.236579} + - time: 1.800000 + value: {x: -0.277927, y: 0.183779, z: 1.239035} + - time: 1.833333 + value: {x: -0.274933, y: 0.190907, z: 1.240772} + - time: 1.866667 + value: {x: -0.271445, y: 0.197888, z: 1.241683} + - time: 1.900000 + value: {x: -0.267545, y: 0.204779, z: 1.241848} + - time: 1.933333 + value: {x: -0.263079, y: 0.211526, z: 1.241093} + - time: 1.966667 + value: {x: -0.258336, y: 0.218128, z: 1.239820} + - time: 2.000000 + value: {x: -0.253125, y: 0.224622, z: 1.237746} + - time: 2.033333 + value: {x: -0.247507, y: 0.230967, z: 1.234975} + - time: 2.066667 + value: {x: -0.241731, y: 0.237146, z: 1.231873} + - time: 2.100000 + value: {x: -0.235515, y: 0.243058, z: 1.228014} + - time: 2.133333 + value: {x: -0.229122, y: 0.248700, z: 1.223825} + - time: 2.166667 + value: {x: -0.222576, y: 0.254004, z: 1.219311} + - time: 2.200000 + value: {x: -0.216040, y: 0.258927, z: 1.214712} + - time: 2.233333 + value: {x: -0.209277, y: 0.263506, z: 1.209718} + - time: 2.266667 + value: {x: -0.202632, y: 0.267588, z: 1.204789} + - time: 2.300000 + value: {x: -0.195950, y: 0.271356, z: 1.199737} + - time: 2.333333 + value: {x: -0.189192, y: 0.274548, z: 1.194503} + - time: 2.366667 + value: {x: -0.182649, y: 0.277423, z: 1.189488} + - time: 2.400000 + value: {x: -0.176050, y: 0.279757, z: 1.184335} + - time: 2.433333 + value: {x: -0.169651, y: 0.281671, z: 1.179381} + - time: 2.466667 + value: {x: -0.163333, y: 0.283243, z: 1.174482} + - time: 2.533333 + value: {x: -0.150912, y: 0.285087, z: 1.164804} + - time: 2.600000 + value: {x: -0.139012, y: 0.285292, z: 1.155616} + - time: 2.633333 + value: {x: -0.133276, y: 0.285064, z: 1.151234} + - time: 2.700000 + value: {x: -0.122245, y: 0.283903, z: 1.142918} + - time: 2.800000 + value: {x: -0.106490, y: 0.280687, z: 1.131175} + - time: 2.866667 + value: {x: -0.096718, y: 0.277681, z: 1.124119} + - time: 2.900000 + value: {x: -0.092069, y: 0.276223, z: 1.120841} + - time: 3.000000 + value: {x: -0.078657, y: 0.270947, z: 1.111511} + - time: 3.100000 + value: {x: -0.066385, y: 0.265226, z: 1.103372} + - time: 3.166667 + value: {x: -0.058741, y: 0.261324, z: 1.098483} + - time: 3.266667 + value: {x: -0.048052, y: 0.255464, z: 1.091918} + - time: 3.433333 + value: {x: -0.031721, y: 0.245695, z: 1.082209} + - time: 3.533333 + value: {x: -0.022512, y: 0.240081, z: 1.076716} + - time: 3.666667 + value: {x: -0.010617, y: 0.233016, z: 1.069381} + - time: 3.733333 + value: {x: -0.005089, y: 0.229731, z: 1.066069} + - time: 3.866667 + value: {x: 0.006044, y: 0.223536, z: 1.058899} + - time: 4.000000 + value: {x: 0.016163, y: 0.218056, z: 1.052601} + - time: 4.033333 + value: {x: 0.018859, y: 0.216768, z: 1.050712} + - time: 4.100000 + value: {x: 0.023812, y: 0.214342, z: 1.047441} + - time: 4.200000 + value: {x: 0.030708, y: 0.211055, z: 1.043072} + - time: 4.266666 + value: {x: 0.034857, y: 0.209099, z: 1.040643} + - time: 4.400000 + value: {x: 0.043231, y: 0.205684, z: 1.035334} + - time: 4.533333 + value: {x: 0.050431, y: 0.202999, z: 1.031268} + - time: 4.600000 + value: {x: 0.053569, y: 0.201932, z: 1.029743} + - time: 4.700000 + value: {x: 0.057712, y: 0.200677, z: 1.028085} + - time: 4.733333 + value: {x: 0.058932, y: 0.200353, z: 1.027714} + - time: 4.866667 + value: {x: 0.063106, y: 0.199522, z: 1.027026} + - time: 4.966667 + value: {x: 0.065431, y: 0.199406, z: 1.027441} + - time: 5.333333 + value: {x: 0.071146, y: 0.200215, z: 1.030991} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.703652, y: 0.703652, z: 0.703652} + - time: 0.133333 + value: {x: 0.749703, y: 0.749703, z: 0.749703} + - time: 0.233333 + value: {x: 0.785059, y: 0.785059, z: 0.785059} + - time: 0.333333 + value: {x: 0.821112, y: 0.821112, z: 0.821112} + - time: 0.433333 + value: {x: 0.857855, y: 0.857855, z: 0.857855} + - time: 0.533333 + value: {x: 0.895287, y: 0.895287, z: 0.895287} + - time: 0.633333 + value: {x: 0.933401, y: 0.933401, z: 0.933401} + - time: 0.733333 + value: {x: 0.972193, y: 0.972193, z: 0.972193} + - time: 0.833333 + value: {x: 1.011662, y: 1.011662, z: 1.011662} + - time: 0.933333 + value: {x: 1.051801, y: 1.051801, z: 1.051801} + - time: 1.033333 + value: {x: 1.092608, y: 1.092608, z: 1.092608} + - time: 1.133333 + value: {x: 1.134078, y: 1.134078, z: 1.134078} + - time: 1.233333 + value: {x: 1.176209, y: 1.176209, z: 1.176209} + - time: 1.333333 + value: {x: 1.218997, y: 1.218997, z: 1.218997} + - time: 1.433333 + value: {x: 1.262439, y: 1.262439, z: 1.262439} + - time: 1.533333 + value: {x: 1.306530, y: 1.306530, z: 1.306530} + - time: 1.633333 + value: {x: 1.351269, y: 1.351269, z: 1.351269} + - time: 1.733333 + value: {x: 1.396652, y: 1.396652, z: 1.396652} + - time: 1.833333 + value: {x: 1.442676, y: 1.442676, z: 1.442676} + - time: 1.933333 + value: {x: 1.489338, y: 1.489338, z: 1.489338} + - time: 2.033333 + value: {x: 1.536635, y: 1.536635, z: 1.536635} + - time: 2.133333 + value: {x: 1.584564, y: 1.584564, z: 1.584564} + - time: 2.233333 + value: {x: 1.633123, y: 1.633123, z: 1.633123} + - time: 2.333333 + value: {x: 1.682309, y: 1.682309, z: 1.682309} + - time: 2.433333 + value: {x: 1.732118, y: 1.732118, z: 1.732118} + - time: 2.533333 + value: {x: 1.782550, y: 1.782550, z: 1.782550} + - time: 2.633333 + value: {x: 1.833600, y: 1.833600, z: 1.833600} + - time: 2.733333 + value: {x: 1.885267, y: 1.885267, z: 1.885267} + - time: 2.833333 + value: {x: 1.937548, y: 1.937548, z: 1.937548} + - time: 2.933333 + value: {x: 1.990441, y: 1.990441, z: 1.990441} + - time: 3.033333 + value: {x: 2.043942, y: 2.043942, z: 2.043942} + - time: 3.133333 + value: {x: 2.098052, y: 2.098052, z: 2.098052} + - time: 3.233333 + value: {x: 2.152765, y: 2.152765, z: 2.152765} + - time: 3.333333 + value: {x: 2.208082, y: 2.208082, z: 2.208082} + - time: 3.433333 + value: {x: 2.263999, y: 2.263999, z: 2.263999} + - time: 3.533333 + value: {x: 2.320514, y: 2.320514, z: 2.320514} + - time: 3.633333 + value: {x: 2.377625, y: 2.377625, z: 2.377625} + - time: 3.733333 + value: {x: 2.435330, y: 2.435330, z: 2.435330} + - time: 3.833333 + value: {x: 2.493627, y: 2.493627, z: 2.493627} + - time: 3.933333 + value: {x: 2.552515, y: 2.552515, z: 2.552515} + - time: 4.033333 + value: {x: 2.611990, y: 2.611990, z: 2.611990} + - time: 4.133333 + value: {x: 2.672051, y: 2.672051, z: 2.672051} + - time: 4.233333 + value: {x: 2.732697, y: 2.732697, z: 2.732697} + - time: 4.333333 + value: {x: 2.793925, y: 2.793925, z: 2.793925} + - time: 4.433333 + value: {x: 2.855734, y: 2.855734, z: 2.855734} + - time: 4.533333 + value: {x: 2.918122, y: 2.918122, z: 2.918122} + - time: 4.633333 + value: {x: 2.981086, y: 2.981086, z: 2.981086} + - time: 4.733333 + value: {x: 3.044625, y: 3.044625, z: 3.044625} + - time: 4.833333 + value: {x: 3.108738, y: 3.108738, z: 3.108738} + - time: 4.933333 + value: {x: 3.173423, y: 3.173423, z: 3.173423} + - time: 5.033333 + value: {x: 3.238677, y: 3.238677, z: 3.238677} + - time: 5.133333 + value: {x: 3.304500, y: 3.304500, z: 3.304500} + - time: 5.233333 + value: {x: 3.370890, y: 3.370890, z: 3.370890} + - time: 5.333333 + value: {x: 3.437845, y: 3.437845, z: 3.437845} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_21: + position: + - time: 0.000000 + value: {x: 0.018549, y: 0.495634, z: -0.014988} + - time: 0.033333 + value: {x: 0.018570, y: 0.495677, z: -0.015004} + - time: 0.066667 + value: {x: 0.028542, y: 0.341592, z: -0.022843} + - time: 0.100000 + value: {x: 0.035972, y: 0.238413, z: -0.027846} + - time: 0.133333 + value: {x: 0.041639, y: 0.178742, z: -0.030892} + - time: 0.166667 + value: {x: 0.045958, y: 0.151659, z: -0.032430} + - time: 0.200000 + value: {x: 0.049100, y: 0.144284, z: -0.032632} + - time: 0.233333 + value: {x: 0.050937, y: 0.145993, z: -0.031233} + - time: 0.266667 + value: {x: 0.050506, y: 0.152665, z: -0.026730} + - time: 0.300000 + value: {x: 0.046822, y: 0.161368, z: -0.017651} + - time: 0.333333 + value: {x: 0.039121, y: 0.170770, z: -0.002871} + - time: 0.366667 + value: {x: 0.026740, y: 0.180787, z: 0.018744} + - time: 0.400000 + value: {x: 0.009740, y: 0.191282, z: 0.047015} + - time: 0.433333 + value: {x: -0.008768, y: 0.202319, z: 0.077336} + - time: 0.466667 + value: {x: -0.025282, y: 0.214138, z: 0.104645} + - time: 0.500000 + value: {x: -0.037955, y: 0.226905, z: 0.126066} + - time: 0.533333 + value: {x: -0.047807, y: 0.241005, z: 0.143239} + - time: 0.566667 + value: {x: -0.055709, y: 0.256890, z: 0.157468} + - time: 0.600000 + value: {x: -0.061695, y: 0.274428, z: 0.168728} + - time: 0.633333 + value: {x: -0.064829, y: 0.293546, z: 0.175609} + - time: 0.666667 + value: {x: -0.064655, y: 0.313778, z: 0.177573} + - time: 0.700000 + value: {x: -0.061211, y: 0.332919, z: 0.174602} + - time: 0.733333 + value: {x: -0.055271, y: 0.348400, z: 0.167923} + - time: 0.766667 + value: {x: -0.047470, y: 0.357839, z: 0.158304} + - time: 0.800000 + value: {x: -0.039537, y: 0.361365, z: 0.148559} + - time: 0.833333 + value: {x: -0.033177, y: 0.359337, z: 0.140952} + - time: 0.866667 + value: {x: -0.029845, y: 0.352553, z: 0.137910} + - time: 0.900000 + value: {x: -0.029681, y: 0.343143, z: 0.139470} + - time: 0.933333 + value: {x: -0.032392, y: 0.333628, z: 0.145237} + - time: 0.966667 + value: {x: -0.038072, y: 0.325975, z: 0.155328} + - time: 1.000000 + value: {x: -0.048641, y: 0.320932, z: 0.172669} + - time: 1.033333 + value: {x: -0.066689, y: 0.318484, z: 0.200973} + - time: 1.066667 + value: {x: -0.094404, y: 0.318748, z: 0.243651} + - time: 1.100000 + value: {x: -0.131152, y: 0.321350, z: 0.299650} + - time: 1.133333 + value: {x: -0.173474, y: 0.325715, z: 0.363907} + - time: 1.166667 + value: {x: -0.218071, y: 0.331273, z: 0.431543} + - time: 1.200000 + value: {x: -0.262159, y: 0.337528, z: 0.498348} + - time: 1.233333 + value: {x: -0.303765, y: 0.344431, z: 0.561356} + - time: 1.266667 + value: {x: -0.341315, y: 0.352331, z: 0.618454} + - time: 1.300000 + value: {x: -0.373475, y: 0.361186, z: 0.667402} + - time: 1.333333 + value: {x: -0.399920, y: 0.371061, z: 0.707918} + - time: 1.366667 + value: {x: -0.420394, y: 0.381901, z: 0.739573} + - time: 1.400000 + value: {x: -0.436610, y: 0.393234, z: 0.764934} + - time: 1.433333 + value: {x: -0.448784, y: 0.404877, z: 0.784209} + - time: 1.466667 + value: {x: -0.458192, y: 0.416510, z: 0.799363} + - time: 1.500000 + value: {x: -0.465347, y: 0.427927, z: 0.811077} + - time: 1.533333 + value: {x: -0.470650, y: 0.439254, z: 0.820170} + - time: 1.566667 + value: {x: -0.474483, y: 0.450283, z: 0.826897} + - time: 1.600000 + value: {x: -0.477210, y: 0.461198, z: 0.832090} + - time: 1.633333 + value: {x: -0.479023, y: 0.471890, z: 0.835850} + - time: 1.666667 + value: {x: -0.480106, y: 0.482408, z: 0.838520} + - time: 1.700000 + value: {x: -0.480599, y: 0.492759, z: 0.840315} + - time: 1.733333 + value: {x: -0.480555, y: 0.502944, z: 0.841277} + - time: 1.766667 + value: {x: -0.479985, y: 0.512971, z: 0.841452} + - time: 1.800000 + value: {x: -0.478932, y: 0.522819, z: 0.840892} + - time: 1.833333 + value: {x: -0.477421, y: 0.532466, z: 0.839608} + - time: 1.866667 + value: {x: -0.475511, y: 0.542010, z: 0.837845} + - time: 1.900000 + value: {x: -0.472961, y: 0.551272, z: 0.834902} + - time: 1.933333 + value: {x: -0.469987, y: 0.560471, z: 0.831491} + - time: 1.966667 + value: {x: -0.466679, y: 0.569458, z: 0.827538} + - time: 2.000000 + value: {x: -0.462828, y: 0.578260, z: 0.822710} + - time: 2.033333 + value: {x: -0.458557, y: 0.586880, z: 0.817249} + - time: 2.066667 + value: {x: -0.454107, y: 0.595297, z: 0.811515} + - time: 2.133333 + value: {x: -0.444078, y: 0.611211, z: 0.798324} + - time: 2.166667 + value: {x: -0.438801, y: 0.618648, z: 0.791329} + - time: 2.233333 + value: {x: -0.427977, y: 0.632311, z: 0.776902} + - time: 2.266667 + value: {x: -0.422442, y: 0.638350, z: 0.769380} + - time: 2.300000 + value: {x: -0.416939, y: 0.644107, z: 0.761990} + - time: 2.333333 + value: {x: -0.411429, y: 0.649321, z: 0.754670} + - time: 2.366667 + value: {x: -0.405951, y: 0.654065, z: 0.747211} + - time: 2.400000 + value: {x: -0.400544, y: 0.658343, z: 0.739995} + - time: 2.433333 + value: {x: -0.395180, y: 0.662069, z: 0.732692} + - time: 2.466667 + value: {x: -0.389927, y: 0.665459, z: 0.725587} + - time: 2.500000 + value: {x: -0.384751, y: 0.668199, z: 0.718613} + - time: 2.533333 + value: {x: -0.379705, y: 0.670938, z: 0.711893} + - time: 2.600000 + value: {x: -0.369890, y: 0.674628, z: 0.698712} + - time: 2.633333 + value: {x: -0.365150, y: 0.676087, z: 0.692334} + - time: 2.666667 + value: {x: -0.360511, y: 0.677097, z: 0.686002} + - time: 2.700000 + value: {x: -0.355990, y: 0.678164, z: 0.679936} + - time: 2.766667 + value: {x: -0.347318, y: 0.679225, z: 0.668302} + - time: 2.800000 + value: {x: -0.343143, y: 0.679769, z: 0.662818} + - time: 2.833333 + value: {x: -0.339101, y: 0.679742, z: 0.657332} + - time: 2.900000 + value: {x: -0.331310, y: 0.679766, z: 0.646918} + - time: 2.933333 + value: {x: -0.327622, y: 0.679450, z: 0.641996} + - time: 3.000000 + value: {x: -0.320523, y: 0.678858, z: 0.632656} + - time: 3.033333 + value: {x: -0.317137, y: 0.678341, z: 0.628102} + - time: 3.066667 + value: {x: -0.313883, y: 0.677759, z: 0.623802} + - time: 3.133333 + value: {x: -0.307601, y: 0.676753, z: 0.615636} + - time: 3.233333 + value: {x: -0.298953, y: 0.674568, z: 0.604221} + - time: 3.266667 + value: {x: -0.296214, y: 0.673965, z: 0.600729} + - time: 3.333333 + value: {x: -0.290900, y: 0.672319, z: 0.593699} + - time: 3.466667 + value: {x: -0.280855, y: 0.669292, z: 0.580598} + - time: 3.633333 + value: {x: -0.269051, y: 0.665660, z: 0.565185} + - time: 3.733333 + value: {x: -0.262349, y: 0.663678, z: 0.556404} + - time: 3.766667 + value: {x: -0.260212, y: 0.663153, z: 0.553732} + - time: 3.800000 + value: {x: -0.257930, y: 0.662465, z: 0.550620} + - time: 3.900000 + value: {x: -0.251482, y: 0.660800, z: 0.542145} + - time: 3.966667 + value: {x: -0.247489, y: 0.659906, z: 0.536997} + - time: 4.066667 + value: {x: -0.241391, y: 0.658581, z: 0.528848} + - time: 4.133333 + value: {x: -0.237554, y: 0.657889, z: 0.523790} + - time: 4.233333 + value: {x: -0.232270, y: 0.657119, z: 0.516896} + - time: 4.300000 + value: {x: -0.228987, y: 0.656807, z: 0.512694} + - time: 4.333333 + value: {x: -0.227265, y: 0.656587, z: 0.510308} + - time: 4.433333 + value: {x: -0.222559, y: 0.656337, z: 0.504122} + - time: 4.566667 + value: {x: -0.217253, y: 0.656508, z: 0.497302} + - time: 4.666667 + value: {x: -0.213991, y: 0.656979, z: 0.493176} + - time: 4.766666 + value: {x: -0.211349, y: 0.657778, z: 0.489947} + - time: 4.800000 + value: {x: -0.210607, y: 0.658123, z: 0.489082} + - time: 4.900000 + value: {x: -0.208801, y: 0.659366, z: 0.487048} + - time: 4.966667 + value: {x: -0.207963, y: 0.660456, z: 0.486323} + - time: 5.333333 + value: {x: -0.205172, y: 0.666196, z: 0.484087} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.703652, y: 0.703652, z: 0.703652} + - time: 0.133333 + value: {x: 0.749703, y: 0.749703, z: 0.749703} + - time: 0.233333 + value: {x: 0.785059, y: 0.785059, z: 0.785059} + - time: 0.333333 + value: {x: 0.821112, y: 0.821112, z: 0.821112} + - time: 0.433333 + value: {x: 0.857855, y: 0.857855, z: 0.857855} + - time: 0.533333 + value: {x: 0.895287, y: 0.895287, z: 0.895287} + - time: 0.633333 + value: {x: 0.933401, y: 0.933401, z: 0.933401} + - time: 0.733333 + value: {x: 0.972193, y: 0.972193, z: 0.972193} + - time: 0.833333 + value: {x: 1.011662, y: 1.011662, z: 1.011662} + - time: 0.933333 + value: {x: 1.051801, y: 1.051801, z: 1.051801} + - time: 1.033333 + value: {x: 1.092608, y: 1.092608, z: 1.092608} + - time: 1.133333 + value: {x: 1.134078, y: 1.134078, z: 1.134078} + - time: 1.233333 + value: {x: 1.176209, y: 1.176209, z: 1.176209} + - time: 1.333333 + value: {x: 1.218997, y: 1.218997, z: 1.218997} + - time: 1.433333 + value: {x: 1.262439, y: 1.262439, z: 1.262439} + - time: 1.533333 + value: {x: 1.306530, y: 1.306530, z: 1.306530} + - time: 1.633333 + value: {x: 1.351269, y: 1.351269, z: 1.351269} + - time: 1.733333 + value: {x: 1.396652, y: 1.396652, z: 1.396652} + - time: 1.833333 + value: {x: 1.442676, y: 1.442676, z: 1.442676} + - time: 1.933333 + value: {x: 1.489338, y: 1.489338, z: 1.489338} + - time: 2.033333 + value: {x: 1.536635, y: 1.536635, z: 1.536635} + - time: 2.133333 + value: {x: 1.584564, y: 1.584564, z: 1.584564} + - time: 2.233333 + value: {x: 1.633123, y: 1.633123, z: 1.633123} + - time: 2.333333 + value: {x: 1.682309, y: 1.682309, z: 1.682309} + - time: 2.433333 + value: {x: 1.732118, y: 1.732118, z: 1.732118} + - time: 2.533333 + value: {x: 1.782550, y: 1.782550, z: 1.782550} + - time: 2.633333 + value: {x: 1.833600, y: 1.833600, z: 1.833600} + - time: 2.733333 + value: {x: 1.885267, y: 1.885267, z: 1.885267} + - time: 2.833333 + value: {x: 1.937548, y: 1.937548, z: 1.937548} + - time: 2.933333 + value: {x: 1.990441, y: 1.990441, z: 1.990441} + - time: 3.033333 + value: {x: 2.043942, y: 2.043942, z: 2.043942} + - time: 3.133333 + value: {x: 2.098052, y: 2.098052, z: 2.098052} + - time: 3.233333 + value: {x: 2.152765, y: 2.152765, z: 2.152765} + - time: 3.333333 + value: {x: 2.208082, y: 2.208082, z: 2.208082} + - time: 3.433333 + value: {x: 2.263999, y: 2.263999, z: 2.263999} + - time: 3.533333 + value: {x: 2.320514, y: 2.320514, z: 2.320514} + - time: 3.633333 + value: {x: 2.377625, y: 2.377625, z: 2.377625} + - time: 3.733333 + value: {x: 2.435330, y: 2.435330, z: 2.435330} + - time: 3.833333 + value: {x: 2.493627, y: 2.493627, z: 2.493627} + - time: 3.933333 + value: {x: 2.552515, y: 2.552515, z: 2.552515} + - time: 4.033333 + value: {x: 2.611990, y: 2.611990, z: 2.611990} + - time: 4.133333 + value: {x: 2.672051, y: 2.672051, z: 2.672051} + - time: 4.233333 + value: {x: 2.732697, y: 2.732697, z: 2.732697} + - time: 4.333333 + value: {x: 2.793925, y: 2.793925, z: 2.793925} + - time: 4.433333 + value: {x: 2.855734, y: 2.855734, z: 2.855734} + - time: 4.533333 + value: {x: 2.918122, y: 2.918122, z: 2.918122} + - time: 4.633333 + value: {x: 2.981086, y: 2.981086, z: 2.981086} + - time: 4.733333 + value: {x: 3.044625, y: 3.044625, z: 3.044625} + - time: 4.833333 + value: {x: 3.108738, y: 3.108738, z: 3.108738} + - time: 4.933333 + value: {x: 3.173423, y: 3.173423, z: 3.173423} + - time: 5.033333 + value: {x: 3.238677, y: 3.238677, z: 3.238677} + - time: 5.133333 + value: {x: 3.304500, y: 3.304500, z: 3.304500} + - time: 5.233333 + value: {x: 3.370890, y: 3.370890, z: 3.370890} + - time: 5.333333 + value: {x: 3.437845, y: 3.437845, z: 3.437845} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_22: + position: + - time: 0.000000 + value: {x: -0.029313, y: 0.457337, z: -0.005407} + - time: 0.033333 + value: {x: -0.029588, y: 0.457333, z: -0.005450} + - time: 0.066667 + value: {x: -0.046409, y: 0.281984, z: -0.007962} + - time: 0.100000 + value: {x: -0.061464, y: 0.160366, z: -0.007980} + - time: 0.133333 + value: {x: -0.075257, y: 0.084271, z: -0.006357} + - time: 0.166667 + value: {x: -0.088101, y: 0.042294, z: -0.003490} + - time: 0.200000 + value: {x: -0.100222, y: 0.021263, z: 0.000571} + - time: 0.233333 + value: {x: -0.111808, y: 0.010332, z: 0.006215} + - time: 0.266667 + value: {x: -0.123112, y: 0.005187, z: 0.015241} + - time: 0.300000 + value: {x: -0.134372, y: 0.002810, z: 0.029541} + - time: 0.333333 + value: {x: -0.145776, y: 0.001816, z: 0.050588} + - time: 0.366667 + value: {x: -0.157449, y: 0.001903, z: 0.079475} + - time: 0.400000 + value: {x: -0.169450, y: 0.002992, z: 0.116267} + - time: 0.433333 + value: {x: -0.181381, y: 0.005108, z: 0.155465} + - time: 0.466667 + value: {x: -0.192761, y: 0.008317, z: 0.190723} + - time: 0.500000 + value: {x: -0.203386, y: 0.012920, z: 0.218955} + - time: 0.533333 + value: {x: -0.213397, y: 0.019137, z: 0.241861} + - time: 0.566667 + value: {x: -0.222937, y: 0.027389, z: 0.261013} + - time: 0.600000 + value: {x: -0.232041, y: 0.037612, z: 0.276581} + - time: 0.633333 + value: {x: -0.240600, y: 0.049745, z: 0.286946} + - time: 0.666667 + value: {x: -0.248535, y: 0.063161, z: 0.291163} + - time: 0.700000 + value: {x: -0.255877, y: 0.075720, z: 0.289393} + - time: 0.733333 + value: {x: -0.262732, y: 0.084758, z: 0.282944} + - time: 0.766667 + value: {x: -0.269232, y: 0.088084, z: 0.273171} + - time: 0.800000 + value: {x: -0.275576, y: 0.085530, z: 0.262864} + - time: 0.833333 + value: {x: -0.282067, y: 0.077751, z: 0.255396} + - time: 0.866667 + value: {x: -0.288860, y: 0.065234, z: 0.253049} + - time: 0.900000 + value: {x: -0.296015, y: 0.050294, z: 0.256285} + - time: 0.933333 + value: {x: -0.303489, y: 0.035404, z: 0.264541} + - time: 0.966667 + value: {x: -0.311305, y: 0.022552, z: 0.278023} + - time: 1.000000 + value: {x: -0.319720, y: 0.012391, z: 0.300068} + - time: 1.033333 + value: {x: -0.329129, y: 0.005048, z: 0.335452} + - time: 1.066667 + value: {x: -0.339806, y: 0.000443, z: 0.387879} + - time: 1.100000 + value: {x: -0.351692, y: -0.001670, z: 0.456360} + - time: 1.133333 + value: {x: -0.364289, y: -0.001945, z: 0.534661} + - time: 1.166667 + value: {x: -0.377134, y: -0.000973, z: 0.616876} + - time: 1.200000 + value: {x: -0.389860, y: 0.000851, z: 0.698165} + - time: 1.233333 + value: {x: -0.402199, y: 0.003522, z: 0.775066} + - time: 1.266667 + value: {x: -0.413885, y: 0.007121, z: 0.844486} + - time: 1.300000 + value: {x: -0.424791, y: 0.011925, z: 0.904404} + - time: 1.333333 + value: {x: -0.434830, y: 0.017750, z: 0.953973} + - time: 1.366667 + value: {x: -0.443978, y: 0.024604, z: 0.992812} + - time: 1.400000 + value: {x: -0.452470, y: 0.031973, z: 1.023932} + - time: 1.433333 + value: {x: -0.460365, y: 0.039812, z: 1.047874} + - time: 1.466667 + value: {x: -0.467826, y: 0.047715, z: 1.066827} + - time: 1.500000 + value: {x: -0.474946, y: 0.055566, z: 1.081808} + - time: 1.533333 + value: {x: -0.481730, y: 0.063217, z: 1.093233} + - time: 1.566667 + value: {x: -0.488304, y: 0.070838, z: 1.102207} + - time: 1.600000 + value: {x: -0.494655, y: 0.078259, z: 1.108990} + - time: 1.633333 + value: {x: -0.500851, y: 0.085587, z: 1.114165} + - time: 1.666667 + value: {x: -0.506903, y: 0.092788, z: 1.117972} + - time: 1.700000 + value: {x: -0.512832, y: 0.099863, z: 1.120663} + - time: 1.733333 + value: {x: -0.518652, y: 0.106849, z: 1.122368} + - time: 1.766667 + value: {x: -0.524361, y: 0.113723, z: 1.123080} + - time: 1.800000 + value: {x: -0.529968, y: 0.120474, z: 1.122886} + - time: 1.833333 + value: {x: -0.535482, y: 0.127110, z: 1.121871} + - time: 1.866667 + value: {x: -0.540875, y: 0.133536, z: 1.119923} + - time: 1.900000 + value: {x: -0.546198, y: 0.139998, z: 1.117095} + - time: 1.933333 + value: {x: -0.551386, y: 0.146226, z: 1.113222} + - time: 1.966667 + value: {x: -0.556503, y: 0.152333, z: 1.108767} + - time: 2.000000 + value: {x: -0.561526, y: 0.158370, z: 1.103380} + - time: 2.033333 + value: {x: -0.566457, y: 0.164261, z: 1.097196} + - time: 2.066667 + value: {x: -0.571332, y: 0.169990, z: 1.090654} + - time: 2.100000 + value: {x: -0.576123, y: 0.175509, z: 1.083232} + - time: 2.133333 + value: {x: -0.580835, y: 0.180667, z: 1.075464} + - time: 2.166667 + value: {x: -0.585503, y: 0.185535, z: 1.067334} + - time: 2.200000 + value: {x: -0.590155, y: 0.190095, z: 1.059130} + - time: 2.233333 + value: {x: -0.594715, y: 0.194184, z: 1.050502} + - time: 2.266667 + value: {x: -0.599289, y: 0.197911, z: 1.041972} + - time: 2.300000 + value: {x: -0.603814, y: 0.201273, z: 1.033333} + - time: 2.333333 + value: {x: -0.608288, y: 0.204009, z: 1.024511} + - time: 2.366667 + value: {x: -0.612783, y: 0.206538, z: 1.015979} + - time: 2.400000 + value: {x: -0.617222, y: 0.208441, z: 1.007314} + - time: 2.433333 + value: {x: -0.621678, y: 0.210014, z: 0.998921} + - time: 2.466667 + value: {x: -0.626111, y: 0.211223, z: 0.990621} + - time: 2.533333 + value: {x: -0.634903, y: 0.212279, z: 0.974259} + - time: 2.600000 + value: {x: -0.643664, y: 0.211743, z: 0.958600} + - time: 2.633333 + value: {x: -0.648035, y: 0.211166, z: 0.951067} + - time: 2.700000 + value: {x: -0.656769, y: 0.209373, z: 0.936624} + - time: 2.800000 + value: {x: -0.669749, y: 0.205098, z: 0.916030} + - time: 2.866667 + value: {x: -0.678382, y: 0.201451, z: 0.903359} + - time: 2.900000 + value: {x: -0.682707, y: 0.199744, z: 0.897366} + - time: 3.000000 + value: {x: -0.695550, y: 0.193507, z: 0.880116} + - time: 3.066667 + value: {x: -0.704107, y: 0.189154, z: 0.869704} + - time: 3.133333 + value: {x: -0.712566, y: 0.184736, z: 0.859545} + - time: 3.166667 + value: {x: -0.716801, y: 0.182398, z: 0.854861} + - time: 3.266667 + value: {x: -0.729437, y: 0.175723, z: 0.841478} + - time: 3.333333 + value: {x: -0.737817, y: 0.171236, z: 0.833180} + - time: 3.466667 + value: {x: -0.754336, y: 0.162541, z: 0.817121} + - time: 3.600000 + value: {x: -0.770581, y: 0.154304, z: 0.801867} + - time: 3.700000 + value: {x: -0.782543, y: 0.148392, z: 0.790553} + - time: 3.733333 + value: {x: -0.786541, y: 0.146626, z: 0.787156} + - time: 3.866667 + value: {x: -0.802157, y: 0.139483, z: 0.772521} + - time: 3.966667 + value: {x: -0.813738, y: 0.134687, z: 0.762411} + - time: 4.000000 + value: {x: -0.817594, y: 0.133262, z: 0.759254} + - time: 4.033333 + value: {x: -0.821344, y: 0.131672, z: 0.755559} + - time: 4.066667 + value: {x: -0.825161, y: 0.130342, z: 0.752377} + - time: 4.100000 + value: {x: -0.828889, y: 0.128857, z: 0.748893} + - time: 4.200000 + value: {x: -0.840118, y: 0.125005, z: 0.739655} + - time: 4.300000 + value: {x: -0.851235, y: 0.121601, z: 0.731202} + - time: 4.400000 + value: {x: -0.862177, y: 0.118588, z: 0.722786} + - time: 4.533333 + value: {x: -0.876616, y: 0.115233, z: 0.713129} + - time: 4.566667 + value: {x: -0.880244, y: 0.114629, z: 0.711226} + - time: 4.600000 + value: {x: -0.883778, y: 0.113851, z: 0.708995} + - time: 4.700000 + value: {x: -0.894446, y: 0.112141, z: 0.703647} + - time: 4.733333 + value: {x: -0.897987, y: 0.111677, z: 0.702113} + - time: 4.833333 + value: {x: -0.908545, y: 0.110557, z: 0.698152} + - time: 4.866667 + value: {x: -0.912040, y: 0.110266, z: 0.697035} + - time: 4.966667 + value: {x: -0.922488, y: 0.109738, z: 0.694471} + - time: 5.333333 + value: {x: -0.959449, y: 0.109218, z: 0.688538} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.703652, y: 0.703652, z: 0.703652} + - time: 0.133333 + value: {x: 0.749703, y: 0.749703, z: 0.749703} + - time: 0.233333 + value: {x: 0.785059, y: 0.785059, z: 0.785059} + - time: 0.333333 + value: {x: 0.821112, y: 0.821112, z: 0.821112} + - time: 0.433333 + value: {x: 0.857855, y: 0.857855, z: 0.857855} + - time: 0.533333 + value: {x: 0.895287, y: 0.895287, z: 0.895287} + - time: 0.633333 + value: {x: 0.933401, y: 0.933401, z: 0.933401} + - time: 0.733333 + value: {x: 0.972193, y: 0.972193, z: 0.972193} + - time: 0.833333 + value: {x: 1.011662, y: 1.011662, z: 1.011662} + - time: 0.933333 + value: {x: 1.051801, y: 1.051801, z: 1.051801} + - time: 1.033333 + value: {x: 1.092608, y: 1.092608, z: 1.092608} + - time: 1.133333 + value: {x: 1.134078, y: 1.134078, z: 1.134078} + - time: 1.233333 + value: {x: 1.176209, y: 1.176209, z: 1.176209} + - time: 1.333333 + value: {x: 1.218997, y: 1.218997, z: 1.218997} + - time: 1.433333 + value: {x: 1.262439, y: 1.262439, z: 1.262439} + - time: 1.533333 + value: {x: 1.306530, y: 1.306530, z: 1.306530} + - time: 1.633333 + value: {x: 1.351269, y: 1.351269, z: 1.351269} + - time: 1.733333 + value: {x: 1.396652, y: 1.396652, z: 1.396652} + - time: 1.833333 + value: {x: 1.442676, y: 1.442676, z: 1.442676} + - time: 1.933333 + value: {x: 1.489338, y: 1.489338, z: 1.489338} + - time: 2.033333 + value: {x: 1.536635, y: 1.536635, z: 1.536635} + - time: 2.133333 + value: {x: 1.584564, y: 1.584564, z: 1.584564} + - time: 2.233333 + value: {x: 1.633123, y: 1.633123, z: 1.633123} + - time: 2.333333 + value: {x: 1.682309, y: 1.682309, z: 1.682309} + - time: 2.433333 + value: {x: 1.732118, y: 1.732118, z: 1.732118} + - time: 2.533333 + value: {x: 1.782550, y: 1.782550, z: 1.782550} + - time: 2.633333 + value: {x: 1.833600, y: 1.833600, z: 1.833600} + - time: 2.733333 + value: {x: 1.885267, y: 1.885267, z: 1.885267} + - time: 2.833333 + value: {x: 1.937548, y: 1.937548, z: 1.937548} + - time: 2.933333 + value: {x: 1.990441, y: 1.990441, z: 1.990441} + - time: 3.033333 + value: {x: 2.043942, y: 2.043942, z: 2.043942} + - time: 3.133333 + value: {x: 2.098052, y: 2.098052, z: 2.098052} + - time: 3.233333 + value: {x: 2.152765, y: 2.152765, z: 2.152765} + - time: 3.333333 + value: {x: 2.208082, y: 2.208082, z: 2.208082} + - time: 3.433333 + value: {x: 2.263999, y: 2.263999, z: 2.263999} + - time: 3.533333 + value: {x: 2.320514, y: 2.320514, z: 2.320514} + - time: 3.633333 + value: {x: 2.377625, y: 2.377625, z: 2.377625} + - time: 3.733333 + value: {x: 2.435330, y: 2.435330, z: 2.435330} + - time: 3.833333 + value: {x: 2.493627, y: 2.493627, z: 2.493627} + - time: 3.933333 + value: {x: 2.552515, y: 2.552515, z: 2.552515} + - time: 4.033333 + value: {x: 2.611990, y: 2.611990, z: 2.611990} + - time: 4.133333 + value: {x: 2.672051, y: 2.672051, z: 2.672051} + - time: 4.233333 + value: {x: 2.732697, y: 2.732697, z: 2.732697} + - time: 4.333333 + value: {x: 2.793925, y: 2.793925, z: 2.793925} + - time: 4.433333 + value: {x: 2.855734, y: 2.855734, z: 2.855734} + - time: 4.533333 + value: {x: 2.918122, y: 2.918122, z: 2.918122} + - time: 4.633333 + value: {x: 2.981086, y: 2.981086, z: 2.981086} + - time: 4.733333 + value: {x: 3.044625, y: 3.044625, z: 3.044625} + - time: 4.833333 + value: {x: 3.108738, y: 3.108738, z: 3.108738} + - time: 4.933333 + value: {x: 3.173423, y: 3.173423, z: 3.173423} + - time: 5.033333 + value: {x: 3.238677, y: 3.238677, z: 3.238677} + - time: 5.133333 + value: {x: 3.304500, y: 3.304500, z: 3.304500} + - time: 5.233333 + value: {x: 3.370890, y: 3.370890, z: 3.370890} + - time: 5.333333 + value: {x: 3.437845, y: 3.437845, z: 3.437845} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_23: + position: + - time: 0.000000 + value: {x: 0.025162, y: 0.461424, z: 0.015166} + - time: 0.033333 + value: {x: 0.025397, y: 0.461458, z: 0.015314} + - time: 0.066667 + value: {x: 0.039753, y: 0.288449, z: 0.024577} + - time: 0.100000 + value: {x: 0.052269, y: 0.168895, z: 0.034971} + - time: 0.133333 + value: {x: 0.063503, y: 0.094674, z: 0.046046} + - time: 0.166667 + value: {x: 0.073778, y: 0.054434, z: 0.057643} + - time: 0.200000 + value: {x: 0.083274, y: 0.035025, z: 0.069868} + - time: 0.233333 + value: {x: 0.092095, y: 0.025623, z: 0.083218} + - time: 0.266667 + value: {x: 0.100207, y: 0.021941, z: 0.099576} + - time: 0.300000 + value: {x: 0.107516, y: 0.020960, z: 0.120888} + - time: 0.333333 + value: {x: 0.113941, y: 0.021287, z: 0.148671} + - time: 0.366667 + value: {x: 0.119508, y: 0.022680, z: 0.184066} + - time: 0.400000 + value: {x: 0.124188, y: 0.025022, z: 0.227157} + - time: 0.433333 + value: {x: 0.128438, y: 0.028337, z: 0.272469} + - time: 0.466667 + value: {x: 0.132843, y: 0.032745, z: 0.313685} + - time: 0.500000 + value: {x: 0.137585, y: 0.038485, z: 0.347722} + - time: 0.533333 + value: {x: 0.142610, y: 0.045829, z: 0.376307} + - time: 0.566667 + value: {x: 0.147813, y: 0.055205, z: 0.401024} + - time: 0.600000 + value: {x: 0.153147, y: 0.066516, z: 0.422044} + - time: 0.633333 + value: {x: 0.158734, y: 0.079686, z: 0.437754} + - time: 0.666667 + value: {x: 0.164730, y: 0.094149, z: 0.447231} + - time: 0.700000 + value: {x: 0.171088, y: 0.107733, z: 0.450637} + - time: 0.733333 + value: {x: 0.177754, y: 0.117808, z: 0.449290} + - time: 0.766667 + value: {x: 0.184527, y: 0.122101, z: 0.444533} + - time: 0.800000 + value: {x: 0.191334, y: 0.120562, z: 0.439189} + - time: 0.833333 + value: {x: 0.197762, y: 0.113722, z: 0.436604} + - time: 0.866667 + value: {x: 0.203788, y: 0.102191, z: 0.439095} + - time: 0.900000 + value: {x: 0.209282, y: 0.088206, z: 0.447107} + - time: 0.933333 + value: {x: 0.214313, y: 0.074257, z: 0.460085} + - time: 0.966667 + value: {x: 0.218852, y: 0.062319, z: 0.478234} + - time: 1.000000 + value: {x: 0.222686, y: 0.053085, z: 0.504904} + - time: 1.033333 + value: {x: 0.225365, y: 0.046620, z: 0.544857} + - time: 1.066667 + value: {x: 0.226700, y: 0.042923, z: 0.601819} + - time: 1.100000 + value: {x: 0.226701, y: 0.041694, z: 0.674791} + - time: 1.133333 + value: {x: 0.225900, y: 0.042310, z: 0.757544} + - time: 1.166667 + value: {x: 0.224772, y: 0.044186, z: 0.844181} + - time: 1.200000 + value: {x: 0.223645, y: 0.046886, z: 0.929850} + - time: 1.233333 + value: {x: 0.222768, y: 0.050381, z: 1.011084} + - time: 1.266667 + value: {x: 0.222525, y: 0.054867, z: 1.084822} + - time: 1.300000 + value: {x: 0.222907, y: 0.060484, z: 1.149007} + - time: 1.333333 + value: {x: 0.224110, y: 0.067153, z: 1.202822} + - time: 1.366667 + value: {x: 0.226132, y: 0.074853, z: 1.245878} + - time: 1.400000 + value: {x: 0.228758, y: 0.083087, z: 1.281192} + - time: 1.433333 + value: {x: 0.231871, y: 0.091750, z: 1.309292} + - time: 1.466667 + value: {x: 0.235345, y: 0.100473, z: 1.332374} + - time: 1.500000 + value: {x: 0.239049, y: 0.109099, z: 1.351448} + - time: 1.533333 + value: {x: 0.243100, y: 0.117598, z: 1.366960} + - time: 1.566667 + value: {x: 0.247204, y: 0.125976, z: 1.379974} + - time: 1.600000 + value: {x: 0.251535, y: 0.134214, z: 1.390787} + - time: 1.633333 + value: {x: 0.255927, y: 0.142327, z: 1.399962} + - time: 1.666667 + value: {x: 0.260407, y: 0.150315, z: 1.407747} + - time: 1.700000 + value: {x: 0.264958, y: 0.158180, z: 1.414394} + - time: 1.733333 + value: {x: 0.269550, y: 0.165945, z: 1.420032} + - time: 1.766667 + value: {x: 0.274199, y: 0.173600, z: 1.424655} + - time: 1.800000 + value: {x: 0.278895, y: 0.181125, z: 1.428352} + - time: 1.833333 + value: {x: 0.283610, y: 0.188518, z: 1.431202} + - time: 1.866667 + value: {x: 0.288465, y: 0.195768, z: 1.433115} + - time: 1.900000 + value: {x: 0.293215, y: 0.202931, z: 1.434100} + - time: 1.933333 + value: {x: 0.298146, y: 0.209954, z: 1.434044} + - time: 1.966667 + value: {x: 0.303077, y: 0.216837, z: 1.433379} + - time: 2.000000 + value: {x: 0.308020, y: 0.223613, z: 1.431757} + - time: 2.033333 + value: {x: 0.313008, y: 0.230245, z: 1.429320} + - time: 2.066667 + value: {x: 0.318005, y: 0.236713, z: 1.426505} + - time: 2.100000 + value: {x: 0.322983, y: 0.242918, z: 1.422780} + - time: 2.133333 + value: {x: 0.328092, y: 0.248856, z: 1.418715} + - time: 2.166667 + value: {x: 0.333153, y: 0.254458, z: 1.414259} + - time: 2.200000 + value: {x: 0.338116, y: 0.259682, z: 1.409694} + - time: 2.233333 + value: {x: 0.343256, y: 0.264566, z: 1.404719} + - time: 2.266667 + value: {x: 0.348208, y: 0.268954, z: 1.399793} + - time: 2.300000 + value: {x: 0.353217, y: 0.273031, z: 1.394755} + - time: 2.333333 + value: {x: 0.358290, y: 0.276535, z: 1.389531} + - time: 2.366667 + value: {x: 0.363189, y: 0.279724, z: 1.384552} + - time: 2.400000 + value: {x: 0.368192, y: 0.282374, z: 1.379449} + - time: 2.433333 + value: {x: 0.373046, y: 0.284606, z: 1.374576} + - time: 2.466667 + value: {x: 0.377908, y: 0.286499, z: 1.369790} + - time: 2.533333 + value: {x: 0.387651, y: 0.288989, z: 1.360422} + - time: 2.600000 + value: {x: 0.397225, y: 0.289848, z: 1.351683} + - time: 2.633333 + value: {x: 0.401942, y: 0.289950, z: 1.347582} + - time: 2.700000 + value: {x: 0.411207, y: 0.289454, z: 1.339944} + - time: 2.800000 + value: {x: 0.425056, y: 0.287246, z: 1.329474} + - time: 2.866667 + value: {x: 0.434060, y: 0.284919, z: 1.323463} + - time: 2.900000 + value: {x: 0.438426, y: 0.283803, z: 1.320762} + - time: 3.000000 + value: {x: 0.451654, y: 0.279559, z: 1.313353} + - time: 3.133333 + value: {x: 0.468803, y: 0.273371, z: 1.305681} + - time: 3.166667 + value: {x: 0.473014, y: 0.271676, z: 1.304184} + - time: 3.266667 + value: {x: 0.485441, y: 0.266871, z: 1.300268} + - time: 3.433333 + value: {x: 0.505594, y: 0.258873, z: 1.295337} + - time: 3.533333 + value: {x: 0.517441, y: 0.254329, z: 1.292843} + - time: 3.700000 + value: {x: 0.536949, y: 0.247384, z: 1.288851} + - time: 3.733333 + value: {x: 0.540657, y: 0.246128, z: 1.288373} + - time: 3.866667 + value: {x: 0.555867, y: 0.241368, z: 1.285370} + - time: 4.000000 + value: {x: 0.570503, y: 0.237328, z: 1.283470} + - time: 4.033333 + value: {x: 0.574298, y: 0.236398, z: 1.282611} + - time: 4.066667 + value: {x: 0.577795, y: 0.235528, z: 1.282204} + - time: 4.100000 + value: {x: 0.581537, y: 0.234692, z: 1.281528} + - time: 4.200000 + value: {x: 0.592208, y: 0.232482, z: 1.280560} + - time: 4.266666 + value: {x: 0.599072, y: 0.231246, z: 1.280516} + - time: 4.400000 + value: {x: 0.612966, y: 0.229263, z: 1.279863} + - time: 4.433333 + value: {x: 0.616200, y: 0.228888, z: 1.280135} + - time: 4.533333 + value: {x: 0.626383, y: 0.228006, z: 1.280724} + - time: 4.566667 + value: {x: 0.629523, y: 0.227814, z: 1.281391} + - time: 4.600000 + value: {x: 0.632933, y: 0.227651, z: 1.281769} + - time: 4.700000 + value: {x: 0.642575, y: 0.227462, z: 1.284091} + - time: 4.733333 + value: {x: 0.645727, y: 0.227492, z: 1.285087} + - time: 4.866667 + value: {x: 0.658157, y: 0.228075, z: 1.290009} + - time: 4.966667 + value: {x: 0.667222, y: 0.229013, z: 1.294814} + - time: 5.333333 + value: {x: 0.698821, y: 0.233635, z: 1.314771} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.703652, y: 0.703652, z: 0.703652} + - time: 0.133333 + value: {x: 0.749703, y: 0.749703, z: 0.749703} + - time: 0.233333 + value: {x: 0.785059, y: 0.785059, z: 0.785059} + - time: 0.333333 + value: {x: 0.821112, y: 0.821112, z: 0.821112} + - time: 0.433333 + value: {x: 0.857855, y: 0.857855, z: 0.857855} + - time: 0.533333 + value: {x: 0.895287, y: 0.895287, z: 0.895287} + - time: 0.633333 + value: {x: 0.933401, y: 0.933401, z: 0.933401} + - time: 0.733333 + value: {x: 0.972193, y: 0.972193, z: 0.972193} + - time: 0.833333 + value: {x: 1.011662, y: 1.011662, z: 1.011662} + - time: 0.933333 + value: {x: 1.051801, y: 1.051801, z: 1.051801} + - time: 1.033333 + value: {x: 1.092608, y: 1.092608, z: 1.092608} + - time: 1.133333 + value: {x: 1.134078, y: 1.134078, z: 1.134078} + - time: 1.233333 + value: {x: 1.176209, y: 1.176209, z: 1.176209} + - time: 1.333333 + value: {x: 1.218997, y: 1.218997, z: 1.218997} + - time: 1.433333 + value: {x: 1.262439, y: 1.262439, z: 1.262439} + - time: 1.533333 + value: {x: 1.306530, y: 1.306530, z: 1.306530} + - time: 1.633333 + value: {x: 1.351269, y: 1.351269, z: 1.351269} + - time: 1.733333 + value: {x: 1.396652, y: 1.396652, z: 1.396652} + - time: 1.833333 + value: {x: 1.442676, y: 1.442676, z: 1.442676} + - time: 1.933333 + value: {x: 1.489338, y: 1.489338, z: 1.489338} + - time: 2.033333 + value: {x: 1.536635, y: 1.536635, z: 1.536635} + - time: 2.133333 + value: {x: 1.584564, y: 1.584564, z: 1.584564} + - time: 2.233333 + value: {x: 1.633123, y: 1.633123, z: 1.633123} + - time: 2.333333 + value: {x: 1.682309, y: 1.682309, z: 1.682309} + - time: 2.433333 + value: {x: 1.732118, y: 1.732118, z: 1.732118} + - time: 2.533333 + value: {x: 1.782550, y: 1.782550, z: 1.782550} + - time: 2.633333 + value: {x: 1.833600, y: 1.833600, z: 1.833600} + - time: 2.733333 + value: {x: 1.885267, y: 1.885267, z: 1.885267} + - time: 2.833333 + value: {x: 1.937548, y: 1.937548, z: 1.937548} + - time: 2.933333 + value: {x: 1.990441, y: 1.990441, z: 1.990441} + - time: 3.033333 + value: {x: 2.043942, y: 2.043942, z: 2.043942} + - time: 3.133333 + value: {x: 2.098052, y: 2.098052, z: 2.098052} + - time: 3.233333 + value: {x: 2.152765, y: 2.152765, z: 2.152765} + - time: 3.333333 + value: {x: 2.208082, y: 2.208082, z: 2.208082} + - time: 3.433333 + value: {x: 2.263999, y: 2.263999, z: 2.263999} + - time: 3.533333 + value: {x: 2.320514, y: 2.320514, z: 2.320514} + - time: 3.633333 + value: {x: 2.377625, y: 2.377625, z: 2.377625} + - time: 3.733333 + value: {x: 2.435330, y: 2.435330, z: 2.435330} + - time: 3.833333 + value: {x: 2.493627, y: 2.493627, z: 2.493627} + - time: 3.933333 + value: {x: 2.552515, y: 2.552515, z: 2.552515} + - time: 4.033333 + value: {x: 2.611990, y: 2.611990, z: 2.611990} + - time: 4.133333 + value: {x: 2.672051, y: 2.672051, z: 2.672051} + - time: 4.233333 + value: {x: 2.732697, y: 2.732697, z: 2.732697} + - time: 4.333333 + value: {x: 2.793925, y: 2.793925, z: 2.793925} + - time: 4.433333 + value: {x: 2.855734, y: 2.855734, z: 2.855734} + - time: 4.533333 + value: {x: 2.918122, y: 2.918122, z: 2.918122} + - time: 4.633333 + value: {x: 2.981086, y: 2.981086, z: 2.981086} + - time: 4.733333 + value: {x: 3.044625, y: 3.044625, z: 3.044625} + - time: 4.833333 + value: {x: 3.108738, y: 3.108738, z: 3.108738} + - time: 4.933333 + value: {x: 3.173423, y: 3.173423, z: 3.173423} + - time: 5.033333 + value: {x: 3.238677, y: 3.238677, z: 3.238677} + - time: 5.133333 + value: {x: 3.304500, y: 3.304500, z: 3.304500} + - time: 5.233333 + value: {x: 3.370890, y: 3.370890, z: 3.370890} + - time: 5.333333 + value: {x: 3.437845, y: 3.437845, z: 3.437845} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_24: + position: + - time: 0.000000 + value: {x: 0.012246, y: 0.483205, z: -0.010400} + - time: 0.033333 + value: {x: 0.012360, y: 0.483443, z: -0.010490} + - time: 0.066667 + value: {x: 0.019322, y: 0.322902, z: -0.015854} + - time: 0.100000 + value: {x: 0.025311, y: 0.214366, z: -0.018427} + - time: 0.133333 + value: {x: 0.030615, y: 0.150150, z: -0.019113} + - time: 0.166667 + value: {x: 0.035405, y: 0.119156, z: -0.018353} + - time: 0.200000 + value: {x: 0.039776, y: 0.108391, z: -0.016274} + - time: 0.233333 + value: {x: 0.043761, y: 0.107146, z: -0.012510} + - time: 0.266667 + value: {x: 0.047259, y: 0.111234, z: -0.005231} + - time: 0.300000 + value: {x: 0.050162, y: 0.117680, z: 0.007378} + - time: 0.333333 + value: {x: 0.052385, y: 0.125121, z: 0.026714} + - time: 0.366667 + value: {x: 0.053843, y: 0.133420, z: 0.054085} + - time: 0.400000 + value: {x: 0.054566, y: 0.142433, z: 0.089353} + - time: 0.433333 + value: {x: 0.055003, y: 0.152204, z: 0.126997} + - time: 0.466667 + value: {x: 0.055643, y: 0.162937, z: 0.160875} + - time: 0.500000 + value: {x: 0.056767, y: 0.174806, z: 0.187621} + - time: 0.533333 + value: {x: 0.058227, y: 0.188163, z: 0.209149} + - time: 0.566667 + value: {x: 0.059907, y: 0.203450, z: 0.227035} + - time: 0.600000 + value: {x: 0.061813, y: 0.220536, z: 0.241294} + - time: 0.633333 + value: {x: 0.064082, y: 0.239342, z: 0.250253} + - time: 0.666667 + value: {x: 0.066772, y: 0.259376, z: 0.253201} + - time: 0.700000 + value: {x: 0.069886, y: 0.278436, z: 0.250162} + - time: 0.733333 + value: {x: 0.073312, y: 0.293936, z: 0.242576} + - time: 0.766667 + value: {x: 0.076980, y: 0.303513, z: 0.231460} + - time: 0.800000 + value: {x: 0.080626, y: 0.307257, z: 0.220078} + - time: 0.833333 + value: {x: 0.084037, y: 0.305556, z: 0.211284} + - time: 0.866667 + value: {x: 0.086988, y: 0.299172, z: 0.207873} + - time: 0.900000 + value: {x: 0.089474, y: 0.290249, z: 0.209974} + - time: 0.933333 + value: {x: 0.091537, y: 0.281302, z: 0.217097} + - time: 0.966667 + value: {x: 0.093163, y: 0.274295, z: 0.229393} + - time: 1.000000 + value: {x: 0.094082, y: 0.269965, z: 0.250351} + - time: 1.033333 + value: {x: 0.093939, y: 0.268308, z: 0.284493} + - time: 1.066667 + value: {x: 0.092416, y: 0.269420, z: 0.335849} + - time: 1.100000 + value: {x: 0.089610, y: 0.272937, z: 0.403206} + - time: 1.133333 + value: {x: 0.086004, y: 0.278274, z: 0.480449} + - time: 1.166667 + value: {x: 0.082059, y: 0.284858, z: 0.561708} + - time: 1.200000 + value: {x: 0.078175, y: 0.292199, z: 0.641957} + - time: 1.233333 + value: {x: 0.074633, y: 0.300248, z: 0.717647} + - time: 1.266667 + value: {x: 0.071633, y: 0.309334, z: 0.786149} + - time: 1.300000 + value: {x: 0.069390, y: 0.319436, z: 0.844878} + - time: 1.333333 + value: {x: 0.067928, y: 0.330599, z: 0.893414} + - time: 1.366667 + value: {x: 0.067291, y: 0.342771, z: 0.931265} + - time: 1.400000 + value: {x: 0.067233, y: 0.355478, z: 0.961508} + - time: 1.433333 + value: {x: 0.067738, y: 0.368541, z: 0.984435} + - time: 1.466667 + value: {x: 0.068620, y: 0.381636, z: 1.002383} + - time: 1.500000 + value: {x: 0.069814, y: 0.394558, z: 1.016202} + - time: 1.533333 + value: {x: 0.071243, y: 0.407420, z: 1.026797} + - time: 1.566667 + value: {x: 0.072883, y: 0.420029, z: 1.034584} + - time: 1.600000 + value: {x: 0.074657, y: 0.432552, z: 1.040465} + - time: 1.633333 + value: {x: 0.076553, y: 0.444890, z: 1.044624} + - time: 1.666667 + value: {x: 0.078541, y: 0.457087, z: 1.047449} + - time: 1.700000 + value: {x: 0.080601, y: 0.469146, z: 1.049201} + - time: 1.733333 + value: {x: 0.082727, y: 0.481072, z: 1.049938} + - time: 1.766667 + value: {x: 0.084918, y: 0.492870, z: 1.049712} + - time: 1.800000 + value: {x: 0.087167, y: 0.504517, z: 1.048586} + - time: 1.833333 + value: {x: 0.089473, y: 0.515991, z: 1.046582} + - time: 1.866667 + value: {x: 0.091814, y: 0.527386, z: 1.043951} + - time: 1.900000 + value: {x: 0.094258, y: 0.538530, z: 1.039948} + - time: 1.933333 + value: {x: 0.096733, y: 0.549632, z: 1.035319} + - time: 1.966667 + value: {x: 0.099252, y: 0.560549, z: 1.030036} + - time: 2.000000 + value: {x: 0.101843, y: 0.571304, z: 1.023701} + - time: 2.033333 + value: {x: 0.104484, y: 0.581899, z: 1.016593} + - time: 2.066667 + value: {x: 0.107141, y: 0.592314, z: 1.009141} + - time: 2.133333 + value: {x: 0.112591, y: 0.612286, z: 0.992135} + - time: 2.166667 + value: {x: 0.115340, y: 0.621781, z: 0.983132} + - time: 2.233333 + value: {x: 0.120851, y: 0.639619, z: 0.964569} + - time: 2.266667 + value: {x: 0.123623, y: 0.647772, z: 0.954925} + - time: 2.300000 + value: {x: 0.126372, y: 0.655660, z: 0.945408} + - time: 2.333333 + value: {x: 0.129104, y: 0.663024, z: 0.935948} + - time: 2.366667 + value: {x: 0.131845, y: 0.669931, z: 0.926347} + - time: 2.400000 + value: {x: 0.134548, y: 0.676391, z: 0.916999} + - time: 2.433333 + value: {x: 0.137257, y: 0.682310, z: 0.907566} + - time: 2.466667 + value: {x: 0.139935, y: 0.687908, z: 0.898352} + - time: 2.500000 + value: {x: 0.142592, y: 0.692872, z: 0.889284} + - time: 2.533333 + value: {x: 0.145214, y: 0.697850, z: 0.880500} + - time: 2.600000 + value: {x: 0.150413, y: 0.706055, z: 0.863245} + - time: 2.633333 + value: {x: 0.152981, y: 0.709788, z: 0.854866} + - time: 2.666667 + value: {x: 0.155538, y: 0.713079, z: 0.846548} + - time: 2.700000 + value: {x: 0.158058, y: 0.716444, z: 0.838529} + - time: 2.766667 + value: {x: 0.163027, y: 0.722131, z: 0.823072} + - time: 2.800000 + value: {x: 0.165465, y: 0.725009, z: 0.815721} + - time: 2.833333 + value: {x: 0.167901, y: 0.727315, z: 0.808387} + - time: 2.900000 + value: {x: 0.172688, y: 0.732039, z: 0.794351} + - time: 2.933333 + value: {x: 0.175043, y: 0.734087, z: 0.787668} + - time: 3.000000 + value: {x: 0.179678, y: 0.738252, z: 0.774884} + - time: 3.033333 + value: {x: 0.181977, y: 0.740116, z: 0.768634} + - time: 3.066667 + value: {x: 0.184240, y: 0.741928, z: 0.762679} + - time: 3.133333 + value: {x: 0.188699, y: 0.745740, z: 0.751268} + - time: 3.233333 + value: {x: 0.195257, y: 0.750803, z: 0.735142} + - time: 3.266667 + value: {x: 0.197392, y: 0.752639, z: 0.730129} + - time: 3.300000 + value: {x: 0.199540, y: 0.754187, z: 0.724965} + - time: 3.333333 + value: {x: 0.201655, y: 0.755856, z: 0.720048} + - time: 3.466667 + value: {x: 0.209988, y: 0.762625, z: 0.700996} + - time: 3.633333 + value: {x: 0.220137, y: 0.771310, z: 0.678273} + - time: 3.733333 + value: {x: 0.226088, y: 0.776744, z: 0.665172} + - time: 3.766667 + value: {x: 0.228027, y: 0.778711, z: 0.661110} + - time: 3.800000 + value: {x: 0.230010, y: 0.780485, z: 0.656513} + - time: 3.933333 + value: {x: 0.237725, y: 0.788231, z: 0.639660} + - time: 3.966667 + value: {x: 0.239597, y: 0.790337, z: 0.635844} + - time: 4.033333 + value: {x: 0.243371, y: 0.794454, z: 0.627704} + - time: 4.066667 + value: {x: 0.245265, y: 0.796434, z: 0.623447} + - time: 4.100000 + value: {x: 0.247102, y: 0.798660, z: 0.619686} + - time: 4.133333 + value: {x: 0.248966, y: 0.800700, z: 0.615631} + - time: 4.166667 + value: {x: 0.250793, y: 0.802877, z: 0.611870} + - time: 4.266666 + value: {x: 0.256176, y: 0.809628, z: 0.601268} + - time: 4.300000 + value: {x: 0.257934, y: 0.812019, z: 0.597950} + - time: 4.333333 + value: {x: 0.259728, y: 0.814248, z: 0.594195} + - time: 4.366667 + value: {x: 0.261484, y: 0.816622, z: 0.590766} + - time: 4.400000 + value: {x: 0.263209, y: 0.819096, z: 0.587578} + - time: 4.433333 + value: {x: 0.264956, y: 0.821398, z: 0.584134} + - time: 4.500000 + value: {x: 0.268351, y: 0.826370, z: 0.578101} + - time: 4.533333 + value: {x: 0.270007, y: 0.828985, z: 0.575410} + - time: 4.566667 + value: {x: 0.271690, y: 0.831416, z: 0.572439} + - time: 4.666667 + value: {x: 0.276569, y: 0.839242, z: 0.564852} + - time: 4.766666 + value: {x: 0.281300, y: 0.847372, z: 0.558347} + - time: 4.800000 + value: {x: 0.282843, y: 0.850158, z: 0.556434} + - time: 4.900000 + value: {x: 0.287375, y: 0.858697, z: 0.551371} + - time: 4.966667 + value: {x: 0.290295, y: 0.864658, z: 0.548779} + - time: 5.333333 + value: {x: 0.305638, y: 0.896695, z: 0.536562} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.296531, y: 0.296531, z: 0.296531} + - time: 0.366667 + value: {x: 0.325713, y: 0.325713, z: 0.325713} + - time: 0.666667 + value: {x: 0.350457, y: 0.350457, z: 0.350457} + - time: 1.000000 + value: {x: 0.378856, y: 0.378856, z: 0.378856} + - time: 1.333333 + value: {x: 0.408198, y: 0.408198, z: 0.408198} + - time: 1.666667 + value: {x: 0.438474, y: 0.438474, z: 0.438474} + - time: 2.000000 + value: {x: 0.469673, y: 0.469673, z: 0.469673} + - time: 2.333333 + value: {x: 0.501786, y: 0.501786, z: 0.501786} + - time: 2.666667 + value: {x: 0.534805, y: 0.534805, z: 0.534805} + - time: 3.000000 + value: {x: 0.568722, y: 0.568722, z: 0.568722} + - time: 3.333333 + value: {x: 0.603529, y: 0.603529, z: 0.603529} + - time: 3.666667 + value: {x: 0.639219, y: 0.639219, z: 0.639219} + - time: 4.000000 + value: {x: 0.675783, y: 0.675783, z: 0.675783} + - time: 4.333333 + value: {x: 0.713215, y: 0.713215, z: 0.713215} + - time: 4.666667 + value: {x: 0.751509, y: 0.751509, z: 0.751509} + - time: 5.000000 + value: {x: 0.790659, y: 0.790659, z: 0.790659} + - time: 5.333333 + value: {x: 0.830657, y: 0.830657, z: 0.830657} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_25: + position: + - time: 0.000000 + value: {x: 0.000058, y: 0.457730, z: -0.000740} + - time: 0.033333 + value: {x: 0.000058, y: 0.457730, z: -0.000740} + - time: 0.066667 + value: {x: 0.000046, y: 0.282607, z: -0.000578} + - time: 0.100000 + value: {x: -0.000138, y: 0.161182, z: 0.001752} + - time: 0.133333 + value: {x: -0.000434, y: 0.085264, z: 0.005513} + - time: 0.166667 + value: {x: -0.000816, y: 0.043457, z: 0.010366} + - time: 0.200000 + value: {x: -0.001281, y: 0.022582, z: 0.016279} + - time: 0.233333 + value: {x: -0.001863, y: 0.011796, z: 0.023666} + - time: 0.266667 + value: {x: -0.002705, y: 0.006799, z: 0.034371} + - time: 0.300000 + value: {x: -0.003956, y: 0.004559, z: 0.050267} + - time: 0.333333 + value: {x: -0.005730, y: 0.003674, z: 0.072805} + - time: 0.366667 + value: {x: -0.008122, y: 0.003901, z: 0.103199} + - time: 0.400000 + value: {x: -0.011130, y: 0.005112, z: 0.141423} + - time: 0.433333 + value: {x: -0.014322, y: 0.007328, z: 0.181973} + - time: 0.466667 + value: {x: -0.017205, y: 0.010668, z: 0.218615} + - time: 0.500000 + value: {x: -0.019528, y: 0.015363, z: 0.248127} + - time: 0.533333 + value: {x: -0.021432, y: 0.021688, z: 0.272321} + - time: 0.566667 + value: {x: -0.023042, y: 0.030067, z: 0.292777} + - time: 0.600000 + value: {x: -0.024365, y: 0.040399, z: 0.309589} + - time: 0.633333 + value: {x: -0.025272, y: 0.052606, z: 0.321113} + - time: 0.666667 + value: {x: -0.025698, y: 0.066125, z: 0.326527} + - time: 0.700000 + value: {x: -0.025651, y: 0.078779, z: 0.325925} + - time: 0.733333 + value: {x: -0.025238, y: 0.087941, z: 0.320683} + - time: 0.766667 + value: {x: -0.024554, y: 0.091330, z: 0.311986} + - time: 0.800000 + value: {x: -0.023836, y: 0.088904, z: 0.302869} + - time: 0.833333 + value: {x: -0.023330, y: 0.081183, z: 0.296440} + - time: 0.866667 + value: {x: -0.023236, y: 0.068786, z: 0.295244} + - time: 0.900000 + value: {x: -0.023577, y: 0.053944, z: 0.299575} + - time: 0.933333 + value: {x: -0.024312, y: 0.039148, z: 0.308908} + - time: 0.966667 + value: {x: -0.025454, y: 0.026371, z: 0.323424} + - time: 1.000000 + value: {x: -0.027273, y: 0.016308, z: 0.346535} + - time: 1.033333 + value: {x: -0.030134, y: 0.009019, z: 0.382890} + - time: 1.066667 + value: {x: -0.034342, y: 0.004508, z: 0.436361} + - time: 1.100000 + value: {x: -0.039811, y: 0.002471, z: 0.505844} + - time: 1.133333 + value: {x: -0.046054, y: 0.002288, z: 0.585166} + - time: 1.166667 + value: {x: -0.052607, y: 0.003374, z: 0.668441} + - time: 1.200000 + value: {x: -0.059084, y: 0.005288, z: 0.750735} + - time: 1.233333 + value: {x: -0.065208, y: 0.008001, z: 0.828542} + - time: 1.266667 + value: {x: -0.070753, y: 0.011716, z: 0.899005} + - time: 1.300000 + value: {x: -0.075539, y: 0.016562, z: 0.959815} + - time: 1.333333 + value: {x: -0.079516, y: 0.022468, z: 1.010346} + - time: 1.366667 + value: {x: -0.082649, y: 0.029412, z: 1.050159} + - time: 1.400000 + value: {x: -0.085179, y: 0.036897, z: 1.082299} + - time: 1.433333 + value: {x: -0.087137, y: 0.044814, z: 1.107182} + - time: 1.466667 + value: {x: -0.088702, y: 0.052795, z: 1.127071} + - time: 1.500000 + value: {x: -0.089948, y: 0.060681, z: 1.142898} + - time: 1.533333 + value: {x: -0.090926, y: 0.068451, z: 1.155329} + - time: 1.566667 + value: {x: -0.091697, y: 0.076098, z: 1.165119} + - time: 1.600000 + value: {x: -0.092306, y: 0.083615, z: 1.172853} + - time: 1.633333 + value: {x: -0.092782, y: 0.091008, z: 1.178913} + - time: 1.666667 + value: {x: -0.093153, y: 0.098281, z: 1.183615} + - time: 1.700000 + value: {x: -0.093436, y: 0.105437, z: 1.187213} + - time: 1.733333 + value: {x: -0.093640, y: 0.112495, z: 1.189804} + - time: 1.766667 + value: {x: -0.093766, y: 0.119447, z: 1.191409} + - time: 1.800000 + value: {x: -0.093821, y: 0.126275, z: 1.192103} + - time: 1.833333 + value: {x: -0.093808, y: 0.132973, z: 1.191940} + - time: 1.866667 + value: {x: -0.093733, y: 0.139537, z: 1.190992} + - time: 1.900000 + value: {x: -0.093569, y: 0.146008, z: 1.188908} + - time: 1.933333 + value: {x: -0.093339, y: 0.152352, z: 1.185984} + - time: 1.966667 + value: {x: -0.093059, y: 0.158555, z: 1.182433} + - time: 2.000000 + value: {x: -0.092701, y: 0.164655, z: 1.177884} + - time: 2.033333 + value: {x: -0.092281, y: 0.170614, z: 1.172542} + - time: 2.066667 + value: {x: -0.091833, y: 0.176413, z: 1.166844} + - time: 2.100000 + value: {x: -0.091306, y: 0.181947, z: 1.160151} + - time: 2.133333 + value: {x: -0.090768, y: 0.187226, z: 1.153322} + - time: 2.166667 + value: {x: -0.090195, y: 0.192169, z: 1.146035} + - time: 2.200000 + value: {x: -0.089604, y: 0.196733, z: 1.138530} + - time: 2.233333 + value: {x: -0.089002, y: 0.200968, z: 1.130876} + - time: 2.266667 + value: {x: -0.088386, y: 0.204703, z: 1.123047} + - time: 2.300000 + value: {x: -0.087770, y: 0.208133, z: 1.115223} + - time: 2.333333 + value: {x: -0.087149, y: 0.210998, z: 1.107332} + - time: 2.366667 + value: {x: -0.086533, y: 0.213542, z: 1.099505} + - time: 2.400000 + value: {x: -0.085922, y: 0.215559, z: 1.091737} + - time: 2.433333 + value: {x: -0.085317, y: 0.217153, z: 1.084051} + - time: 2.466667 + value: {x: -0.084724, y: 0.218414, z: 1.076519} + - time: 2.533333 + value: {x: -0.083569, y: 0.219655, z: 1.061845} + - time: 2.600000 + value: {x: -0.082463, y: 0.219273, z: 1.047796} + - time: 2.633333 + value: {x: -0.081931, y: 0.218758, z: 1.041035} + - time: 2.700000 + value: {x: -0.080907, y: 0.217034, z: 1.028018} + - time: 2.733333 + value: {x: -0.080418, y: 0.215744, z: 1.021801} + - time: 2.800000 + value: {x: -0.079476, y: 0.213014, z: 1.009839} + - time: 2.833333 + value: {x: -0.079031, y: 0.211248, z: 1.004186} + - time: 2.900000 + value: {x: -0.078174, y: 0.207777, z: 0.993291} + - time: 2.966667 + value: {x: -0.077380, y: 0.203742, z: 0.983210} + - time: 3.033333 + value: {x: -0.076634, y: 0.199670, z: 0.973732} + - time: 3.133333 + value: {x: -0.075613, y: 0.193269, z: 0.960754} + - time: 3.233333 + value: {x: -0.074705, y: 0.186618, z: 0.949217} + - time: 3.333333 + value: {x: -0.073865, y: 0.180061, z: 0.938538} + - time: 3.466667 + value: {x: -0.072820, y: 0.171600, z: 0.925265} + - time: 3.633333 + value: {x: -0.071588, y: 0.161650, z: 0.909613} + - time: 3.733333 + value: {x: -0.070886, y: 0.156127, z: 0.900695} + - time: 3.866667 + value: {x: -0.069955, y: 0.149288, z: 0.888858} + - time: 3.966667 + value: {x: -0.069311, y: 0.144654, z: 0.880687} + - time: 4.033333 + value: {x: -0.068876, y: 0.141769, z: 0.875154} + - time: 4.133333 + value: {x: -0.068250, y: 0.137780, z: 0.867204} + - time: 4.233333 + value: {x: -0.067694, y: 0.134232, z: 0.860132} + - time: 4.366667 + value: {x: -0.066995, y: 0.130147, z: 0.851249} + - time: 4.466667 + value: {x: -0.066528, y: 0.127574, z: 0.845315} + - time: 4.566667 + value: {x: -0.066139, y: 0.125431, z: 0.840373} + - time: 4.666667 + value: {x: -0.065828, y: 0.123720, z: 0.836427} + - time: 4.766666 + value: {x: -0.065597, y: 0.122444, z: 0.833484} + - time: 4.866667 + value: {x: -0.065445, y: 0.121608, z: 0.831556} + - time: 4.966667 + value: {x: -0.065375, y: 0.121224, z: 0.830669} + - time: 5.333333 + value: {x: -0.065370, y: 0.121198, z: 0.830609} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.296531, y: 0.296531, z: 0.296531} + - time: 0.366667 + value: {x: 0.325713, y: 0.325713, z: 0.325713} + - time: 0.666667 + value: {x: 0.350457, y: 0.350457, z: 0.350457} + - time: 1.000000 + value: {x: 0.378856, y: 0.378856, z: 0.378856} + - time: 1.333333 + value: {x: 0.408198, y: 0.408198, z: 0.408198} + - time: 1.666667 + value: {x: 0.438474, y: 0.438474, z: 0.438474} + - time: 2.000000 + value: {x: 0.469673, y: 0.469673, z: 0.469673} + - time: 2.333333 + value: {x: 0.501786, y: 0.501786, z: 0.501786} + - time: 2.666667 + value: {x: 0.534805, y: 0.534805, z: 0.534805} + - time: 3.000000 + value: {x: 0.568722, y: 0.568722, z: 0.568722} + - time: 3.333333 + value: {x: 0.603529, y: 0.603529, z: 0.603529} + - time: 3.666667 + value: {x: 0.639219, y: 0.639219, z: 0.639219} + - time: 4.000000 + value: {x: 0.675783, y: 0.675783, z: 0.675783} + - time: 4.333333 + value: {x: 0.713215, y: 0.713215, z: 0.713215} + - time: 4.666667 + value: {x: 0.751509, y: 0.751509, z: 0.751509} + - time: 5.000000 + value: {x: 0.790659, y: 0.790659, z: 0.790659} + - time: 5.333333 + value: {x: 0.830657, y: 0.830657, z: 0.830657} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_26: + position: + - time: 0.000000 + value: {x: 0.026685, y: 0.461702, z: 0.016434} + - time: 0.033333 + value: {x: 0.026852, y: 0.461727, z: 0.016539} + - time: 0.066667 + value: {x: 0.042192, y: 0.288851, z: 0.026358} + - time: 0.100000 + value: {x: 0.056581, y: 0.169399, z: 0.036986} + - time: 0.133333 + value: {x: 0.070254, y: 0.095259, z: 0.048068} + - time: 0.166667 + value: {x: 0.083396, y: 0.055082, z: 0.059494} + - time: 0.200000 + value: {x: 0.096190, y: 0.035721, z: 0.071388} + - time: 0.233333 + value: {x: 0.108963, y: 0.026355, z: 0.084219} + - time: 0.266667 + value: {x: 0.122621, y: 0.022697, z: 0.099707} + - time: 0.300000 + value: {x: 0.138019, y: 0.021731, z: 0.119637} + - time: 0.333333 + value: {x: 0.155810, y: 0.022063, z: 0.145398} + - time: 0.366667 + value: {x: 0.176641, y: 0.023455, z: 0.178021} + - time: 0.400000 + value: {x: 0.200472, y: 0.025787, z: 0.217598} + - time: 0.433333 + value: {x: 0.224996, y: 0.029087, z: 0.259158} + - time: 0.466667 + value: {x: 0.247673, y: 0.033473, z: 0.296950} + - time: 0.500000 + value: {x: 0.267061, y: 0.039186, z: 0.328189} + - time: 0.533333 + value: {x: 0.284028, y: 0.046498, z: 0.354435} + - time: 0.566667 + value: {x: 0.299260, y: 0.055837, z: 0.377131} + - time: 0.600000 + value: {x: 0.312761, y: 0.067105, z: 0.396444} + - time: 0.633333 + value: {x: 0.323828, y: 0.080229, z: 0.410910} + - time: 0.666667 + value: {x: 0.332206, y: 0.094642, z: 0.419680} + - time: 0.700000 + value: {x: 0.337897, y: 0.108173, z: 0.422909} + - time: 0.733333 + value: {x: 0.341540, y: 0.118190, z: 0.421792} + - time: 0.766667 + value: {x: 0.343529, y: 0.122423, z: 0.417565} + - time: 0.800000 + value: {x: 0.345321, y: 0.120821, z: 0.412775} + - time: 0.833333 + value: {x: 0.348063, y: 0.113914, z: 0.410487} + - time: 0.866667 + value: {x: 0.353015, y: 0.102313, z: 0.412786} + - time: 0.900000 + value: {x: 0.360193, y: 0.088255, z: 0.420091} + - time: 0.933333 + value: {x: 0.369404, y: 0.074231, z: 0.431898} + - time: 0.966667 + value: {x: 0.380712, y: 0.062216, z: 0.448394} + - time: 1.000000 + value: {x: 0.395619, y: 0.052902, z: 0.472619} + - time: 1.033333 + value: {x: 0.416012, y: 0.046355, z: 0.508913} + - time: 1.066667 + value: {x: 0.443648, y: 0.042574, z: 0.560650} + - time: 1.100000 + value: {x: 0.477985, y: 0.041257, z: 0.626934} + - time: 1.133333 + value: {x: 0.516451, y: 0.041784, z: 0.702097} + - time: 1.166667 + value: {x: 0.556564, y: 0.043570, z: 0.780775} + - time: 1.200000 + value: {x: 0.596172, y: 0.046178, z: 0.858567} + - time: 1.233333 + value: {x: 0.633764, y: 0.049579, z: 0.932323} + - time: 1.266667 + value: {x: 0.668284, y: 0.053969, z: 0.999244} + - time: 1.300000 + value: {x: 0.698569, y: 0.059489, z: 1.057480} + - time: 1.333333 + value: {x: 0.724497, y: 0.066058, z: 1.106275} + - time: 1.366667 + value: {x: 0.745846, y: 0.073657, z: 1.145280} + - time: 1.400000 + value: {x: 0.763931, y: 0.081789, z: 1.177235} + - time: 1.433333 + value: {x: 0.778847, y: 0.090349, z: 1.202627} + - time: 1.466667 + value: {x: 0.791604, y: 0.098967, z: 1.223450} + - time: 1.500000 + value: {x: 0.802544, y: 0.107486, z: 1.240626} + - time: 1.533333 + value: {x: 0.812111, y: 0.115878, z: 1.254547} + - time: 1.566667 + value: {x: 0.820400, y: 0.124147, z: 1.266200} + - time: 1.600000 + value: {x: 0.827871, y: 0.132276, z: 1.275838} + - time: 1.633333 + value: {x: 0.834555, y: 0.140277, z: 1.283984} + - time: 1.666667 + value: {x: 0.840637, y: 0.148153, z: 1.290859} + - time: 1.700000 + value: {x: 0.846228, y: 0.155906, z: 1.296692} + - time: 1.733333 + value: {x: 0.851347, y: 0.163557, z: 1.301602} + - time: 1.766667 + value: {x: 0.856021, y: 0.171096, z: 1.305585} + - time: 1.800000 + value: {x: 0.860277, y: 0.178505, z: 1.308719} + - time: 1.833333 + value: {x: 0.864117, y: 0.185781, z: 1.311079} + - time: 1.866667 + value: {x: 0.867691, y: 0.192914, z: 1.312577} + - time: 1.900000 + value: {x: 0.870591, y: 0.199958, z: 1.313235} + - time: 1.933333 + value: {x: 0.873239, y: 0.206862, z: 1.312934} + - time: 1.966667 + value: {x: 0.875567, y: 0.213624, z: 1.312077} + - time: 2.000000 + value: {x: 0.877402, y: 0.220280, z: 1.310348} + - time: 2.033333 + value: {x: 0.878879, y: 0.226790, z: 1.307872} + - time: 2.066667 + value: {x: 0.880180, y: 0.233136, z: 1.305048} + - time: 2.100000 + value: {x: 0.880965, y: 0.239218, z: 1.301396} + - time: 2.133333 + value: {x: 0.881797, y: 0.245032, z: 1.297425} + - time: 2.166667 + value: {x: 0.882351, y: 0.250511, z: 1.293097} + - time: 2.200000 + value: {x: 0.882700, y: 0.255610, z: 1.288670} + - time: 2.233333 + value: {x: 0.883135, y: 0.260368, z: 1.283860} + - time: 2.266667 + value: {x: 0.883302, y: 0.264630, z: 1.279097} + - time: 2.300000 + value: {x: 0.883519, y: 0.268581, z: 1.274225} + - time: 2.333333 + value: {x: 0.883758, y: 0.271958, z: 1.269179} + - time: 2.366667 + value: {x: 0.883864, y: 0.275020, z: 1.264358} + - time: 2.400000 + value: {x: 0.884089, y: 0.277542, z: 1.259416} + - time: 2.433333 + value: {x: 0.884214, y: 0.279646, z: 1.254684} + - time: 2.466667 + value: {x: 0.884418, y: 0.281410, z: 1.250026} + - time: 2.533333 + value: {x: 0.885025, y: 0.283643, z: 1.240887} + - time: 2.600000 + value: {x: 0.885771, y: 0.284242, z: 1.232309} + - time: 2.633333 + value: {x: 0.886205, y: 0.284214, z: 1.228262} + - time: 2.700000 + value: {x: 0.887156, y: 0.283456, z: 1.220672} + - time: 2.800000 + value: {x: 0.889183, y: 0.280854, z: 1.210166} + - time: 2.866667 + value: {x: 0.890782, y: 0.278263, z: 1.204034} + - time: 2.900000 + value: {x: 0.891552, y: 0.277014, z: 1.201241} + - time: 3.000000 + value: {x: 0.894566, y: 0.272373, z: 1.193484} + - time: 3.033333 + value: {x: 0.895602, y: 0.270726, z: 1.191299} + - time: 3.133333 + value: {x: 0.899249, y: 0.265653, z: 1.185125} + - time: 3.166667 + value: {x: 0.900572, y: 0.263825, z: 1.183415} + - time: 3.266667 + value: {x: 0.904625, y: 0.258620, z: 1.178797} + - time: 3.433333 + value: {x: 0.911701, y: 0.249955, z: 1.172528} + - time: 3.533333 + value: {x: 0.916013, y: 0.245010, z: 1.169176} + - time: 3.700000 + value: {x: 0.923255, y: 0.237399, z: 1.163729} + - time: 3.733333 + value: {x: 0.924619, y: 0.236010, z: 1.162925} + - time: 3.766667 + value: {x: 0.926177, y: 0.234650, z: 1.161877} + - time: 3.866667 + value: {x: 0.930259, y: 0.230720, z: 1.158729} + - time: 4.000000 + value: {x: 0.935858, y: 0.226151, z: 1.155520} + - time: 4.033333 + value: {x: 0.937310, y: 0.225089, z: 1.154374} + - time: 4.066667 + value: {x: 0.938546, y: 0.224087, z: 1.153629} + - time: 4.100000 + value: {x: 0.940047, y: 0.223119, z: 1.152649} + - time: 4.133333 + value: {x: 0.941330, y: 0.222212, z: 1.152069} + - time: 4.200000 + value: {x: 0.944344, y: 0.220517, z: 1.150657} + - time: 4.300000 + value: {x: 0.948796, y: 0.218325, z: 1.149262} + - time: 4.333333 + value: {x: 0.950104, y: 0.217682, z: 1.148825} + - time: 4.400000 + value: {x: 0.953142, y: 0.216516, z: 1.147794} + - time: 4.433333 + value: {x: 0.954522, y: 0.216010, z: 1.147662} + - time: 4.533333 + value: {x: 0.959403, y: 0.214743, z: 1.147092} + - time: 4.566667 + value: {x: 0.960917, y: 0.214421, z: 1.147320} + - time: 4.600000 + value: {x: 0.962719, y: 0.214131, z: 1.147300} + - time: 4.633333 + value: {x: 0.964328, y: 0.213900, z: 1.147671} + - time: 4.700000 + value: {x: 0.967940, y: 0.213559, z: 1.148300} + - time: 4.733333 + value: {x: 0.969736, y: 0.213461, z: 1.148834} + - time: 4.800000 + value: {x: 0.973346, y: 0.213411, z: 1.150291} + - time: 4.866667 + value: {x: 0.977318, y: 0.213538, z: 1.151831} + - time: 4.900000 + value: {x: 0.979193, y: 0.213681, z: 1.152964} + - time: 4.966667 + value: {x: 0.983374, y: 0.214099, z: 1.155094} + - time: 5.333333 + value: {x: 1.005739, y: 0.217366, z: 1.169226} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.296531, y: 0.296531, z: 0.296531} + - time: 0.366667 + value: {x: 0.325713, y: 0.325713, z: 0.325713} + - time: 0.666667 + value: {x: 0.350457, y: 0.350457, z: 0.350457} + - time: 1.000000 + value: {x: 0.378856, y: 0.378856, z: 0.378856} + - time: 1.333333 + value: {x: 0.408198, y: 0.408198, z: 0.408198} + - time: 1.666667 + value: {x: 0.438474, y: 0.438474, z: 0.438474} + - time: 2.000000 + value: {x: 0.469673, y: 0.469673, z: 0.469673} + - time: 2.333333 + value: {x: 0.501786, y: 0.501786, z: 0.501786} + - time: 2.666667 + value: {x: 0.534805, y: 0.534805, z: 0.534805} + - time: 3.000000 + value: {x: 0.568722, y: 0.568722, z: 0.568722} + - time: 3.333333 + value: {x: 0.603529, y: 0.603529, z: 0.603529} + - time: 3.666667 + value: {x: 0.639219, y: 0.639219, z: 0.639219} + - time: 4.000000 + value: {x: 0.675783, y: 0.675783, z: 0.675783} + - time: 4.333333 + value: {x: 0.713215, y: 0.713215, z: 0.713215} + - time: 4.666667 + value: {x: 0.751509, y: 0.751509, z: 0.751509} + - time: 5.000000 + value: {x: 0.790659, y: 0.790659, z: 0.790659} + - time: 5.333333 + value: {x: 0.830657, y: 0.830657, z: 0.830657} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_27: + position: + - time: 0.000000 + value: {x: 0.012794, y: 0.485129, z: -0.011062} + - time: 0.033333 + value: {x: 0.012875, y: 0.485297, z: -0.011126} + - time: 0.066667 + value: {x: 0.020357, y: 0.325672, z: -0.016852} + - time: 0.100000 + value: {x: 0.027857, y: 0.217848, z: -0.019908} + - time: 0.133333 + value: {x: 0.035319, y: 0.154189, z: -0.021147} + - time: 0.166667 + value: {x: 0.042755, y: 0.123628, z: -0.020992} + - time: 0.200000 + value: {x: 0.050257, y: 0.113194, z: -0.019576} + - time: 0.233333 + value: {x: 0.058071, y: 0.112193, z: -0.016575} + - time: 0.266667 + value: {x: 0.067029, y: 0.116448, z: -0.010332} + - time: 0.300000 + value: {x: 0.077970, y: 0.122995, z: 0.000794} + - time: 0.333333 + value: {x: 0.091540, y: 0.130475, z: 0.018065} + - time: 0.366667 + value: {x: 0.108269, y: 0.138761, z: 0.042680} + - time: 0.400000 + value: {x: 0.128174, y: 0.147711, z: 0.074498} + - time: 0.433333 + value: {x: 0.148941, y: 0.157373, z: 0.108496} + - time: 0.466667 + value: {x: 0.167927, y: 0.167958, z: 0.139102} + - time: 0.500000 + value: {x: 0.183795, y: 0.179638, z: 0.163235} + - time: 0.533333 + value: {x: 0.197309, y: 0.192772, z: 0.182649} + - time: 0.566667 + value: {x: 0.209147, y: 0.207803, z: 0.198773} + - time: 0.600000 + value: {x: 0.219366, y: 0.224602, z: 0.211614} + - time: 0.633333 + value: {x: 0.227276, y: 0.243090, z: 0.219645} + - time: 0.666667 + value: {x: 0.232522, y: 0.262781, z: 0.222232} + - time: 0.700000 + value: {x: 0.235157, y: 0.281471, z: 0.219387} + - time: 0.733333 + value: {x: 0.235760, y: 0.296577, z: 0.212429} + - time: 0.766667 + value: {x: 0.234856, y: 0.305735, z: 0.202260} + - time: 0.800000 + value: {x: 0.233709, y: 0.309040, z: 0.191874} + - time: 0.833333 + value: {x: 0.233668, y: 0.306878, z: 0.183839} + - time: 0.866667 + value: {x: 0.235788, y: 0.300013, z: 0.180720} + - time: 0.900000 + value: {x: 0.240212, y: 0.290590, z: 0.182617} + - time: 0.933333 + value: {x: 0.246718, y: 0.281125, z: 0.189087} + - time: 0.966667 + value: {x: 0.255384, y: 0.273583, z: 0.200267} + - time: 1.000000 + value: {x: 0.267655, y: 0.268702, z: 0.219333} + - time: 1.033333 + value: {x: 0.285514, y: 0.266478, z: 0.250386} + - time: 1.066667 + value: {x: 0.310588, y: 0.267007, z: 0.297104} + - time: 1.100000 + value: {x: 0.342420, y: 0.269926, z: 0.358372} + - time: 1.133333 + value: {x: 0.378391, y: 0.274652, z: 0.428637} + - time: 1.166667 + value: {x: 0.416004, y: 0.280611, z: 0.502564} + - time: 1.200000 + value: {x: 0.453178, y: 0.287315, z: 0.575574} + - time: 1.233333 + value: {x: 0.488433, y: 0.294716, z: 0.644441} + - time: 1.266667 + value: {x: 0.520533, y: 0.303139, z: 0.706788} + - time: 1.300000 + value: {x: 0.548533, y: 0.312569, z: 0.760246} + - time: 1.333333 + value: {x: 0.572143, y: 0.323048, z: 0.804450} + - time: 1.366667 + value: {x: 0.591184, y: 0.334527, z: 0.838944} + - time: 1.400000 + value: {x: 0.606944, y: 0.346528, z: 0.866531} + - time: 1.433333 + value: {x: 0.619614, y: 0.358877, z: 0.887468} + - time: 1.466667 + value: {x: 0.630146, y: 0.371249, z: 0.903883} + - time: 1.500000 + value: {x: 0.638945, y: 0.383440, z: 0.916543} + - time: 1.533333 + value: {x: 0.646267, y: 0.395559, z: 0.926288} + - time: 1.566667 + value: {x: 0.652469, y: 0.407420, z: 0.933472} + - time: 1.600000 + value: {x: 0.657768, y: 0.419185, z: 0.938936} + - time: 1.633333 + value: {x: 0.662344, y: 0.430758, z: 0.942835} + - time: 1.666667 + value: {x: 0.666325, y: 0.442182, z: 0.945527} + - time: 1.700000 + value: {x: 0.669821, y: 0.453462, z: 0.947247} + - time: 1.733333 + value: {x: 0.672873, y: 0.464601, z: 0.948048} + - time: 1.766667 + value: {x: 0.675491, y: 0.475605, z: 0.947976} + - time: 1.800000 + value: {x: 0.677706, y: 0.486452, z: 0.947090} + - time: 1.833333 + value: {x: 0.679545, y: 0.497121, z: 0.945408} + - time: 1.866667 + value: {x: 0.681021, y: 0.507701, z: 0.943166} + - time: 1.900000 + value: {x: 0.682025, y: 0.518030, z: 0.939669} + - time: 1.933333 + value: {x: 0.682637, y: 0.528306, z: 0.935613} + - time: 1.966667 + value: {x: 0.682975, y: 0.538393, z: 0.930964} + - time: 2.000000 + value: {x: 0.682881, y: 0.548315, z: 0.925360} + - time: 2.033333 + value: {x: 0.682436, y: 0.558072, z: 0.919056} + - time: 2.066667 + value: {x: 0.681825, y: 0.567643, z: 0.912442} + - time: 2.133333 + value: {x: 0.679665, y: 0.585915, z: 0.897310} + - time: 2.166667 + value: {x: 0.678342, y: 0.594554, z: 0.889293} + - time: 2.233333 + value: {x: 0.675408, y: 0.610667, z: 0.872761} + - time: 2.266667 + value: {x: 0.673829, y: 0.617956, z: 0.864165} + - time: 2.300000 + value: {x: 0.672229, y: 0.624973, z: 0.855690} + - time: 2.333333 + value: {x: 0.670578, y: 0.631459, z: 0.847271} + - time: 2.366667 + value: {x: 0.668963, y: 0.637491, z: 0.838721} + - time: 2.400000 + value: {x: 0.667341, y: 0.643067, z: 0.830407} + - time: 2.433333 + value: {x: 0.665763, y: 0.648105, z: 0.822014} + - time: 2.466667 + value: {x: 0.664231, y: 0.652818, z: 0.813824} + - time: 2.500000 + value: {x: 0.662729, y: 0.656893, z: 0.805768} + - time: 2.533333 + value: {x: 0.661283, y: 0.660975, z: 0.797974} + - time: 2.600000 + value: {x: 0.658565, y: 0.667387, z: 0.782671} + - time: 2.633333 + value: {x: 0.657304, y: 0.670222, z: 0.775248} + - time: 2.666667 + value: {x: 0.656118, y: 0.672618, z: 0.767881} + - time: 2.700000 + value: {x: 0.654974, y: 0.675080, z: 0.760787} + - time: 2.766667 + value: {x: 0.652911, y: 0.678956, z: 0.747134} + - time: 2.800000 + value: {x: 0.651945, y: 0.680920, z: 0.740653} + - time: 2.833333 + value: {x: 0.651103, y: 0.682323, z: 0.734187} + - time: 2.900000 + value: {x: 0.649543, y: 0.685226, z: 0.721835} + - time: 2.933333 + value: {x: 0.648892, y: 0.686362, z: 0.715966} + - time: 3.000000 + value: {x: 0.647715, y: 0.688693, z: 0.704758} + - time: 3.033333 + value: {x: 0.647250, y: 0.689646, z: 0.699285} + - time: 3.066667 + value: {x: 0.646848, y: 0.690541, z: 0.694081} + - time: 3.133333 + value: {x: 0.646133, y: 0.692509, z: 0.684129} + - time: 3.233333 + value: {x: 0.645572, y: 0.694821, z: 0.670109} + - time: 3.266667 + value: {x: 0.645428, y: 0.695731, z: 0.665766} + - time: 3.333333 + value: {x: 0.645282, y: 0.697114, z: 0.657035} + - time: 3.466667 + value: {x: 0.645181, y: 0.700202, z: 0.640586} + - time: 3.633333 + value: {x: 0.645264, y: 0.704290, z: 0.621029} + - time: 3.733333 + value: {x: 0.645415, y: 0.706972, z: 0.609786} + - time: 3.766667 + value: {x: 0.645481, y: 0.708012, z: 0.606313} + - time: 3.800000 + value: {x: 0.645474, y: 0.708880, z: 0.602360} + - time: 3.933333 + value: {x: 0.645695, y: 0.712973, z: 0.587934} + - time: 3.966667 + value: {x: 0.645808, y: 0.714158, z: 0.584686} + - time: 4.066667 + value: {x: 0.646007, y: 0.717538, z: 0.574094} + - time: 4.100000 + value: {x: 0.646081, y: 0.718844, z: 0.570894} + - time: 4.133333 + value: {x: 0.646226, y: 0.719992, z: 0.567439} + - time: 4.233333 + value: {x: 0.646804, y: 0.723946, z: 0.558209} + - time: 4.300000 + value: {x: 0.647287, y: 0.726791, z: 0.552487} + - time: 4.333333 + value: {x: 0.647488, y: 0.728135, z: 0.549306} + - time: 4.433333 + value: {x: 0.648282, y: 0.732604, z: 0.540837} + - time: 4.500000 + value: {x: 0.649003, y: 0.735791, z: 0.535802} + - time: 4.533333 + value: {x: 0.649409, y: 0.737506, z: 0.533574} + - time: 4.566667 + value: {x: 0.649892, y: 0.739066, z: 0.531107} + - time: 4.666667 + value: {x: 0.651521, y: 0.744244, z: 0.524886} + - time: 4.766666 + value: {x: 0.653512, y: 0.749741, z: 0.519647} + - time: 4.800000 + value: {x: 0.654257, y: 0.751651, z: 0.518131} + - time: 4.900000 + value: {x: 0.656744, y: 0.757578, z: 0.514200} + - time: 4.966667 + value: {x: 0.658600, y: 0.761795, z: 0.512283} + - time: 5.333333 + value: {x: 0.669445, y: 0.784490, z: 0.503613} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.296531, y: 0.296531, z: 0.296531} + - time: 0.366667 + value: {x: 0.325713, y: 0.325713, z: 0.325713} + - time: 0.666667 + value: {x: 0.350457, y: 0.350457, z: 0.350457} + - time: 1.000000 + value: {x: 0.378856, y: 0.378856, z: 0.378856} + - time: 1.333333 + value: {x: 0.408198, y: 0.408198, z: 0.408198} + - time: 1.666667 + value: {x: 0.438474, y: 0.438474, z: 0.438474} + - time: 2.000000 + value: {x: 0.469673, y: 0.469673, z: 0.469673} + - time: 2.333333 + value: {x: 0.501786, y: 0.501786, z: 0.501786} + - time: 2.666667 + value: {x: 0.534805, y: 0.534805, z: 0.534805} + - time: 3.000000 + value: {x: 0.568722, y: 0.568722, z: 0.568722} + - time: 3.333333 + value: {x: 0.603529, y: 0.603529, z: 0.603529} + - time: 3.666667 + value: {x: 0.639219, y: 0.639219, z: 0.639219} + - time: 4.000000 + value: {x: 0.675783, y: 0.675783, z: 0.675783} + - time: 4.333333 + value: {x: 0.713215, y: 0.713215, z: 0.713215} + - time: 4.666667 + value: {x: 0.751509, y: 0.751509, z: 0.751509} + - time: 5.000000 + value: {x: 0.790659, y: 0.790659, z: 0.790659} + - time: 5.333333 + value: {x: 0.830657, y: 0.830657, z: 0.830657} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_28: + position: + - time: 0.000000 + value: {x: -0.048565, y: 0.457088, z: -0.008051} + - time: 0.033333 + value: {x: -0.048792, y: 0.457085, z: -0.008087} + - time: 0.066667 + value: {x: -0.075640, y: 0.281598, z: -0.012284} + - time: 0.100000 + value: {x: -0.097357, y: 0.159868, z: -0.014657} + - time: 0.133333 + value: {x: -0.115498, y: 0.083672, z: -0.015826} + - time: 0.166667 + value: {x: -0.130914, y: 0.041600, z: -0.016087} + - time: 0.200000 + value: {x: -0.144021, y: 0.020485, z: -0.015492} + - time: 0.233333 + value: {x: -0.154746, y: 0.009479, z: -0.013845} + - time: 0.266667 + value: {x: -0.161773, y: 0.004257, z: -0.010141} + - time: 0.300000 + value: {x: -0.163727, y: 0.001813, z: -0.003264} + - time: 0.333333 + value: {x: -0.159550, y: 0.000768, z: 0.007666} + - time: 0.366667 + value: {x: -0.148306, y: 0.000788, z: 0.023162} + - time: 0.400000 + value: {x: -0.130122, y: 0.001822, z: 0.043352} + - time: 0.433333 + value: {x: -0.109555, y: 0.003898, z: 0.065036} + - time: 0.466667 + value: {x: -0.091714, y: 0.007050, z: 0.084406} + - time: 0.500000 + value: {x: -0.079316, y: 0.011618, z: 0.099799} + - time: 0.533333 + value: {x: -0.070884, y: 0.017791, z: 0.112092} + - time: 0.566667 + value: {x: -0.065160, y: 0.025990, z: 0.122196} + - time: 0.600000 + value: {x: -0.062115, y: 0.036173, z: 0.130280} + - time: 0.633333 + value: {x: -0.063124, y: 0.048283, z: 0.135422} + - time: 0.666667 + value: {x: -0.068844, y: 0.061662, z: 0.136958} + - time: 0.700000 + value: {x: -0.079237, y: 0.074189, z: 0.135044} + - time: 0.733333 + value: {x: -0.093175, y: 0.083183, z: 0.130377} + - time: 0.766667 + value: {x: -0.109755, y: 0.086493, z: 0.123902} + - time: 0.800000 + value: {x: -0.126444, y: 0.083894, z: 0.117023} + - time: 0.833333 + value: {x: -0.140788, y: 0.076104, z: 0.111941} + - time: 0.866667 + value: {x: -0.150647, y: 0.063547, z: 0.109749} + - time: 0.900000 + value: {x: -0.155837, y: 0.048579, z: 0.110866} + - time: 0.933333 + value: {x: -0.156787, y: 0.033663, z: 0.114932} + - time: 0.966667 + value: {x: -0.153364, y: 0.020793, z: 0.122086} + - time: 1.000000 + value: {x: -0.142766, y: 0.010606, z: 0.134207} + - time: 1.033333 + value: {x: -0.121241, y: 0.003256, z: 0.154188} + - time: 1.066667 + value: {x: -0.085587, y: -0.001373, z: 0.184038} + - time: 1.100000 + value: {x: -0.036742, y: -0.003502, z: 0.223283} + - time: 1.133333 + value: {x: 0.020265, y: -0.003799, z: 0.268235} + - time: 1.166667 + value: {x: 0.080626, y: -0.002858, z: 0.315441} + - time: 1.200000 + value: {x: 0.140281, y: -0.001054, z: 0.362161} + - time: 1.233333 + value: {x: 0.196351, y: 0.001617, z: 0.406414} + - time: 1.266667 + value: {x: 0.246565, y: 0.005187, z: 0.446197} + - time: 1.300000 + value: {x: 0.288954, y: 0.009991, z: 0.480577} + - time: 1.333333 + value: {x: 0.323063, y: 0.015801, z: 0.508875} + - time: 1.366667 + value: {x: 0.348514, y: 0.022638, z: 0.530919} + - time: 1.400000 + value: {x: 0.367801, y: 0.029979, z: 0.548432} + - time: 1.433333 + value: {x: 0.381225, y: 0.037806, z: 0.561835} + - time: 1.466667 + value: {x: 0.390653, y: 0.045697, z: 0.572338} + - time: 1.500000 + value: {x: 0.396821, y: 0.053553, z: 0.580607} + - time: 1.533333 + value: {x: 0.400337, y: 0.061176, z: 0.586676} + - time: 1.566667 + value: {x: 0.401721, y: 0.068808, z: 0.591476} + - time: 1.600000 + value: {x: 0.401536, y: 0.076210, z: 0.594894} + - time: 1.633333 + value: {x: 0.400039, y: 0.083533, z: 0.597432} + - time: 1.666667 + value: {x: 0.397505, y: 0.090726, z: 0.599168} + - time: 1.700000 + value: {x: 0.394141, y: 0.097790, z: 0.600249} + - time: 1.733333 + value: {x: 0.390015, y: 0.104768, z: 0.600774} + - time: 1.766667 + value: {x: 0.385149, y: 0.111634, z: 0.600720} + - time: 1.800000 + value: {x: 0.379603, y: 0.118376, z: 0.600145} + - time: 1.833333 + value: {x: 0.373408, y: 0.125010, z: 0.599121} + - time: 1.866667 + value: {x: 0.366671, y: 0.131405, z: 0.597444} + - time: 1.900000 + value: {x: 0.358998, y: 0.137883, z: 0.595455} + - time: 1.933333 + value: {x: 0.350750, y: 0.144090, z: 0.592700} + - time: 1.966667 + value: {x: 0.342036, y: 0.150183, z: 0.589645} + - time: 2.000000 + value: {x: 0.332543, y: 0.156218, z: 0.586101} + - time: 2.033333 + value: {x: 0.322459, y: 0.162105, z: 0.582091} + - time: 2.066667 + value: {x: 0.312137, y: 0.167830, z: 0.577874} + - time: 2.100000 + value: {x: 0.301026, y: 0.173363, z: 0.573232} + - time: 2.133333 + value: {x: 0.289908, y: 0.178500, z: 0.568234} + - time: 2.166667 + value: {x: 0.278441, y: 0.183363, z: 0.563100} + - time: 2.200000 + value: {x: 0.266809, y: 0.187941, z: 0.558032} + - time: 2.233333 + value: {x: 0.255174, y: 0.192003, z: 0.552513} + - time: 2.266667 + value: {x: 0.243373, y: 0.195746, z: 0.547257} + - time: 2.300000 + value: {x: 0.231652, y: 0.199106, z: 0.541855} + - time: 2.333333 + value: {x: 0.219952, y: 0.201821, z: 0.536264} + - time: 2.366667 + value: {x: 0.208293, y: 0.204363, z: 0.531008} + - time: 2.400000 + value: {x: 0.196774, y: 0.206251, z: 0.525537} + - time: 2.433333 + value: {x: 0.185319, y: 0.207837, z: 0.520364} + - time: 2.466667 + value: {x: 0.174047, y: 0.209049, z: 0.515202} + - time: 2.533333 + value: {x: 0.151988, y: 0.210087, z: 0.504913} + - time: 2.600000 + value: {x: 0.130586, y: 0.209545, z: 0.495097} + - time: 2.633333 + value: {x: 0.120153, y: 0.208968, z: 0.490387} + - time: 2.700000 + value: {x: 0.099787, y: 0.207193, z: 0.481419} + - time: 2.733333 + value: {x: 0.089908, y: 0.205856, z: 0.477071} + - time: 2.800000 + value: {x: 0.070696, y: 0.202903, z: 0.468405} + - time: 2.866667 + value: {x: 0.052243, y: 0.199259, z: 0.460425} + - time: 2.900000 + value: {x: 0.043201, y: 0.197573, z: 0.456735} + - time: 2.933333 + value: {x: 0.034443, y: 0.195512, z: 0.453062} + - time: 3.000000 + value: {x: 0.017397, y: 0.191330, z: 0.445760} + - time: 3.066667 + value: {x: 0.001061, y: 0.186995, z: 0.439211} + - time: 3.133333 + value: {x: -0.014663, y: 0.182562, z: 0.432642} + - time: 3.166667 + value: {x: -0.022219, y: 0.180224, z: 0.429631} + - time: 3.233333 + value: {x: -0.037042, y: 0.175818, z: 0.424025} + - time: 3.266667 + value: {x: -0.044245, y: 0.173561, z: 0.421061} + - time: 3.333333 + value: {x: -0.058404, y: 0.169097, z: 0.415809} + - time: 3.466667 + value: {x: -0.085664, y: 0.160418, z: 0.405472} + - time: 3.600000 + value: {x: -0.111818, y: 0.152197, z: 0.395643} + - time: 3.700000 + value: {x: -0.130931, y: 0.146284, z: 0.388298} + - time: 3.733333 + value: {x: -0.137153, y: 0.144541, z: 0.386200} + - time: 3.766667 + value: {x: -0.143246, y: 0.142635, z: 0.383716} + - time: 3.800000 + value: {x: -0.149571, y: 0.140929, z: 0.381506} + - time: 3.866667 + value: {x: -0.161812, y: 0.137401, z: 0.376718} + - time: 3.900000 + value: {x: -0.167829, y: 0.135838, z: 0.374656} + - time: 3.966667 + value: {x: -0.179472, y: 0.132622, z: 0.370216} + - time: 4.000000 + value: {x: -0.185312, y: 0.131220, z: 0.368283} + - time: 4.033333 + value: {x: -0.191172, y: 0.129614, z: 0.365803} + - time: 4.066667 + value: {x: -0.197019, y: 0.128311, z: 0.363878} + - time: 4.100000 + value: {x: -0.202667, y: 0.126811, z: 0.361531} + - time: 4.133333 + value: {x: -0.208303, y: 0.125611, z: 0.359739} + - time: 4.200000 + value: {x: -0.219117, y: 0.122978, z: 0.355585} + - time: 4.266666 + value: {x: -0.229609, y: 0.120783, z: 0.352153} + - time: 4.300000 + value: {x: -0.234752, y: 0.119595, z: 0.350133} + - time: 4.333333 + value: {x: -0.240037, y: 0.118661, z: 0.348477} + - time: 4.400000 + value: {x: -0.250132, y: 0.116603, z: 0.344706} + - time: 4.433333 + value: {x: -0.255082, y: 0.115839, z: 0.343304} + - time: 4.533333 + value: {x: -0.269034, y: 0.113273, z: 0.338395} + - time: 4.566667 + value: {x: -0.273527, y: 0.112696, z: 0.337255} + - time: 4.600000 + value: {x: -0.277807, y: 0.111905, z: 0.335665} + - time: 4.666667 + value: {x: -0.286180, y: 0.110872, z: 0.333483} + - time: 4.700000 + value: {x: -0.290117, y: 0.110217, z: 0.332079} + - time: 4.733333 + value: {x: -0.293997, y: 0.109762, z: 0.331044} + - time: 4.766666 + value: {x: -0.297806, y: 0.109468, z: 0.330296} + - time: 4.833333 + value: {x: -0.304944, y: 0.108666, z: 0.328293} + - time: 4.866667 + value: {x: -0.308357, y: 0.108380, z: 0.327480} + - time: 4.900000 + value: {x: -0.311702, y: 0.108271, z: 0.326985} + - time: 4.933333 + value: {x: -0.314858, y: 0.108020, z: 0.326180} + - time: 5.000000 + value: {x: -0.320870, y: 0.107810, z: 0.325058} + - time: 5.333333 + value: {x: -0.348489, y: 0.107440, z: 0.320669} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.661496, y: 0.661496, z: 0.661496} + - time: 0.466667 + value: {x: 0.694332, y: 0.694332, z: 0.694332} + - time: 1.000000 + value: {x: 0.732691, y: 0.732691, z: 0.732691} + - time: 1.533333 + value: {x: 0.771931, y: 0.771931, z: 0.771931} + - time: 2.066667 + value: {x: 0.812045, y: 0.812045, z: 0.812045} + - time: 2.600000 + value: {x: 0.853027, y: 0.853027, z: 0.853027} + - time: 3.133333 + value: {x: 0.894870, y: 0.894870, z: 0.894870} + - time: 3.666667 + value: {x: 0.937569, y: 0.937569, z: 0.937569} + - time: 4.200000 + value: {x: 0.981118, y: 0.981118, z: 0.981118} + - time: 4.766666 + value: {x: 1.028315, y: 1.028315, z: 1.028315} + - time: 5.333333 + value: {x: 1.076459, y: 1.076459, z: 1.076459} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_29: + position: + - time: 0.000000 + value: {x: 0.040389, y: 0.463761, z: 0.025541} + - time: 0.033333 + value: {x: 0.040582, y: 0.463790, z: 0.025664} + - time: 0.066667 + value: {x: 0.063778, y: 0.292060, z: 0.040366} + - time: 0.100000 + value: {x: 0.085852, y: 0.173606, z: 0.054531} + - time: 0.133333 + value: {x: 0.107043, y: 0.100355, z: 0.068217} + - time: 0.166667 + value: {x: 0.127578, y: 0.060985, z: 0.081532} + - time: 0.200000 + value: {x: 0.147736, y: 0.042366, z: 0.094689} + - time: 0.233333 + value: {x: 0.168086, y: 0.033687, z: 0.108072} + - time: 0.266667 + value: {x: 0.190326, y: 0.030673, z: 0.122828} + - time: 0.300000 + value: {x: 0.216081, y: 0.030312, z: 0.140168} + - time: 0.333333 + value: {x: 0.246597, y: 0.031217, z: 0.161048} + - time: 0.366667 + value: {x: 0.283065, y: 0.033150, z: 0.186067} + - time: 0.400000 + value: {x: 0.325421, y: 0.036000, z: 0.215385} + - time: 0.433333 + value: {x: 0.369213, y: 0.039794, z: 0.245843} + - time: 0.466667 + value: {x: 0.409507, y: 0.044653, z: 0.273689} + - time: 0.500000 + value: {x: 0.443560, y: 0.050820, z: 0.297263} + - time: 0.533333 + value: {x: 0.472999, y: 0.058569, z: 0.317489} + - time: 0.566667 + value: {x: 0.499142, y: 0.068329, z: 0.335300} + - time: 0.600000 + value: {x: 0.522013, y: 0.080004, z: 0.350871} + - time: 0.633333 + value: {x: 0.540262, y: 0.093523, z: 0.363290} + - time: 0.666667 + value: {x: 0.553356, y: 0.108317, z: 0.371930} + - time: 0.700000 + value: {x: 0.561318, y: 0.122217, z: 0.376949} + - time: 0.733333 + value: {x: 0.565356, y: 0.132592, z: 0.379066} + - time: 0.766667 + value: {x: 0.566277, y: 0.137174, z: 0.379207} + - time: 0.800000 + value: {x: 0.566811, y: 0.135910, z: 0.378826} + - time: 0.833333 + value: {x: 0.569247, y: 0.129333, z: 0.380087} + - time: 0.866667 + value: {x: 0.575931, y: 0.118052, z: 0.384137} + - time: 0.900000 + value: {x: 0.586943, y: 0.104308, z: 0.391371} + - time: 0.933333 + value: {x: 0.601898, y: 0.090589, z: 0.401442} + - time: 0.966667 + value: {x: 0.620925, y: 0.078872, z: 0.414493} + - time: 1.000000 + value: {x: 0.646894, y: 0.069850, z: 0.432417} + - time: 1.033333 + value: {x: 0.683479, y: 0.063589, z: 0.458091} + - time: 1.066667 + value: {x: 0.734012, y: 0.060086, z: 0.493557} + - time: 1.100000 + value: {x: 0.797483, y: 0.059042, z: 0.538328} + - time: 1.133333 + value: {x: 0.868916, y: 0.059836, z: 0.588727} + - time: 1.166667 + value: {x: 0.943525, y: 0.061882, z: 0.641308} + - time: 1.200000 + value: {x: 1.017194, y: 0.064746, z: 0.693320} + - time: 1.233333 + value: {x: 1.087023, y: 0.068399, z: 0.742775} + - time: 1.266667 + value: {x: 1.150907, y: 0.073034, z: 0.787717} + - time: 1.300000 + value: {x: 1.206691, y: 0.078796, z: 0.827161} + - time: 1.333333 + value: {x: 1.254072, y: 0.085603, z: 0.860471} + - time: 1.366667 + value: {x: 1.292641, y: 0.093434, z: 0.887467} + - time: 1.400000 + value: {x: 1.324919, y: 0.101793, z: 0.909880} + - time: 1.433333 + value: {x: 1.351129, y: 0.110577, z: 0.928112} + - time: 1.466667 + value: {x: 1.373194, y: 0.119415, z: 0.943388} + - time: 1.500000 + value: {x: 1.391795, y: 0.128153, z: 0.956358} + - time: 1.533333 + value: {x: 1.407713, y: 0.136756, z: 0.967105} + - time: 1.566667 + value: {x: 1.421238, y: 0.145235, z: 0.976499} + - time: 1.600000 + value: {x: 1.433155, y: 0.153569, z: 0.984482} + - time: 1.633333 + value: {x: 1.443588, y: 0.161773, z: 0.991528} + - time: 1.666667 + value: {x: 1.452866, y: 0.169848, z: 0.997727} + - time: 1.700000 + value: {x: 1.461205, y: 0.177797, z: 1.003224} + - time: 1.733333 + value: {x: 1.468648, y: 0.185640, z: 1.008120} + - time: 1.766667 + value: {x: 1.475243, y: 0.193369, z: 1.012393} + - time: 1.800000 + value: {x: 1.481043, y: 0.200965, z: 1.016102} + - time: 1.833333 + value: {x: 1.486062, y: 0.208425, z: 1.019316} + - time: 1.866667 + value: {x: 1.490529, y: 0.215737, z: 1.021858} + - time: 1.900000 + value: {x: 1.493789, y: 0.222961, z: 1.024009} + - time: 1.933333 + value: {x: 1.496505, y: 0.230040, z: 1.025390} + - time: 1.966667 + value: {x: 1.498628, y: 0.236975, z: 1.026421} + - time: 2.000000 + value: {x: 1.499832, y: 0.243802, z: 1.026918} + - time: 2.033333 + value: {x: 1.500352, y: 0.250480, z: 1.026913} + - time: 2.066667 + value: {x: 1.500541, y: 0.256991, z: 1.026666} + - time: 2.100000 + value: {x: 1.499778, y: 0.263237, z: 1.025941} + - time: 2.133333 + value: {x: 1.499049, y: 0.269212, z: 1.024858} + - time: 2.166667 + value: {x: 1.497822, y: 0.274849, z: 1.023592} + - time: 2.200000 + value: {x: 1.496254, y: 0.280106, z: 1.022334} + - time: 2.233333 + value: {x: 1.494771, y: 0.285017, z: 1.020637} + - time: 2.266667 + value: {x: 1.492868, y: 0.289433, z: 1.019128} + - time: 2.300000 + value: {x: 1.491033, y: 0.293534, z: 1.017459} + - time: 2.333333 + value: {x: 1.489210, y: 0.297058, z: 1.015589} + - time: 2.366667 + value: {x: 1.487208, y: 0.300267, z: 1.013987} + - time: 2.400000 + value: {x: 1.485386, y: 0.302932, z: 1.012173} + - time: 2.433333 + value: {x: 1.483436, y: 0.305179, z: 1.010594} + - time: 2.466667 + value: {x: 1.481628, y: 0.307084, z: 1.009011} + - time: 2.533333 + value: {x: 1.478369, y: 0.309590, z: 1.005815} + - time: 2.600000 + value: {x: 1.475429, y: 0.310457, z: 1.002965} + - time: 2.633333 + value: {x: 1.474099, y: 0.310561, z: 1.001694} + - time: 2.700000 + value: {x: 1.471660, y: 0.310062, z: 0.999505} + - time: 2.733333 + value: {x: 1.470659, y: 0.309376, z: 0.998512} + - time: 2.800000 + value: {x: 1.469120, y: 0.307832, z: 0.996508} + - time: 2.833333 + value: {x: 1.468409, y: 0.306661, z: 0.995882} + - time: 2.866667 + value: {x: 1.467975, y: 0.305484, z: 0.995065} + - time: 2.900000 + value: {x: 1.467404, y: 0.304355, z: 0.994585} + - time: 2.933333 + value: {x: 1.467120, y: 0.302915, z: 0.994116} + - time: 3.000000 + value: {x: 1.466930, y: 0.300058, z: 0.993171} + - time: 3.033333 + value: {x: 1.466890, y: 0.298526, z: 0.993014} + - time: 3.100000 + value: {x: 1.467412, y: 0.295314, z: 0.992560} + - time: 3.166667 + value: {x: 1.468222, y: 0.292059, z: 0.992484} + - time: 3.233333 + value: {x: 1.469237, y: 0.288762, z: 0.992869} + - time: 3.266667 + value: {x: 1.469981, y: 0.287168, z: 0.992898} + - time: 3.333333 + value: {x: 1.471311, y: 0.283794, z: 0.993504} + - time: 3.533333 + value: {x: 1.476190, y: 0.274341, z: 0.995377} + - time: 3.700000 + value: {x: 1.480488, y: 0.267178, z: 0.996841} + - time: 3.733333 + value: {x: 1.481272, y: 0.265877, z: 0.997400} + - time: 3.766667 + value: {x: 1.482328, y: 0.264601, z: 0.997602} + - time: 3.800000 + value: {x: 1.482909, y: 0.263332, z: 0.998011} + - time: 3.833333 + value: {x: 1.483760, y: 0.262100, z: 0.998169} + - time: 3.900000 + value: {x: 1.485333, y: 0.259797, z: 0.998970} + - time: 3.966667 + value: {x: 1.487298, y: 0.257668, z: 0.999662} + - time: 4.000000 + value: {x: 1.488054, y: 0.256673, z: 1.000231} + - time: 4.033333 + value: {x: 1.488959, y: 0.255687, z: 1.000289} + - time: 4.066667 + value: {x: 1.489593, y: 0.254763, z: 1.000828} + - time: 4.100000 + value: {x: 1.490610, y: 0.253870, z: 1.000981} + - time: 4.166667 + value: {x: 1.492313, y: 0.252245, z: 1.002082} + - time: 4.200000 + value: {x: 1.493517, y: 0.251488, z: 1.002346} + - time: 4.266666 + value: {x: 1.495588, y: 0.250134, z: 1.003672} + - time: 4.300000 + value: {x: 1.496804, y: 0.249510, z: 1.004042} + - time: 4.333333 + value: {x: 1.497635, y: 0.248937, z: 1.004710} + - time: 4.400000 + value: {x: 1.499950, y: 0.247905, z: 1.005613} + - time: 4.433333 + value: {x: 1.500958, y: 0.247468, z: 1.006478} + - time: 4.533333 + value: {x: 1.505145, y: 0.246393, z: 1.008399} + - time: 4.566667 + value: {x: 1.506439, y: 0.246137, z: 1.009462} + - time: 4.600000 + value: {x: 1.508152, y: 0.245907, z: 1.010117} + - time: 4.666667 + value: {x: 1.511256, y: 0.245612, z: 1.012290} + - time: 4.700000 + value: {x: 1.513195, y: 0.245517, z: 1.013086} + - time: 4.733333 + value: {x: 1.515005, y: 0.245480, z: 1.014202} + - time: 4.766666 + value: {x: 1.516741, y: 0.245495, z: 1.015564} + - time: 4.866667 + value: {x: 1.523056, y: 0.245786, z: 1.019100} + - time: 4.900000 + value: {x: 1.525111, y: 0.245988, z: 1.020657} + - time: 4.933333 + value: {x: 1.527494, y: 0.246224, z: 1.021937} + - time: 5.333333 + value: {x: 1.555927, y: 0.250324, z: 1.039858} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.661496, y: 0.661496, z: 0.661496} + - time: 0.466667 + value: {x: 0.694332, y: 0.694332, z: 0.694332} + - time: 1.000000 + value: {x: 0.732691, y: 0.732691, z: 0.732691} + - time: 1.533333 + value: {x: 0.771931, y: 0.771931, z: 0.771931} + - time: 2.066667 + value: {x: 0.812045, y: 0.812045, z: 0.812045} + - time: 2.600000 + value: {x: 0.853027, y: 0.853027, z: 0.853027} + - time: 3.133333 + value: {x: 0.894870, y: 0.894870, z: 0.894870} + - time: 3.666667 + value: {x: 0.937569, y: 0.937569, z: 0.937569} + - time: 4.200000 + value: {x: 0.981118, y: 0.981118, z: 0.981118} + - time: 4.766666 + value: {x: 1.028315, y: 1.028315, z: 1.028315} + - time: 5.333333 + value: {x: 1.076459, y: 1.076459, z: 1.076459} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_3: + position: + - time: 0.000000 + value: {x: -0.000742, y: 0.457730, z: 0.000000} + - time: 0.033333 + value: {x: -0.000742, y: 0.457730, z: 0.000000} + - time: 0.066667 + value: {x: -0.000580, y: 0.282607, z: 0.000000} + - time: 0.100000 + value: {x: 0.001758, y: 0.161182, z: 0.000000} + - time: 0.133333 + value: {x: 0.005530, y: 0.085264, z: 0.000000} + - time: 0.166667 + value: {x: 0.010398, y: 0.043457, z: 0.000000} + - time: 0.200000 + value: {x: 0.016329, y: 0.022582, z: 0.000000} + - time: 0.233333 + value: {x: 0.023739, y: 0.011796, z: 0.000000} + - time: 0.266667 + value: {x: 0.034477, y: 0.006799, z: 0.000000} + - time: 0.300000 + value: {x: 0.050422, y: 0.004559, z: 0.000000} + - time: 0.333333 + value: {x: 0.073030, y: 0.003674, z: 0.000000} + - time: 0.366667 + value: {x: 0.103518, y: 0.003901, z: 0.000000} + - time: 0.400000 + value: {x: 0.141860, y: 0.005112, z: 0.000000} + - time: 0.433333 + value: {x: 0.182536, y: 0.007328, z: 0.000000} + - time: 0.466667 + value: {x: 0.219291, y: 0.010668, z: 0.000000} + - time: 0.500000 + value: {x: 0.248894, y: 0.015363, z: 0.000000} + - time: 0.533333 + value: {x: 0.273163, y: 0.021688, z: 0.000000} + - time: 0.566667 + value: {x: 0.293682, y: 0.030067, z: 0.000000} + - time: 0.600000 + value: {x: 0.310546, y: 0.040399, z: 0.000000} + - time: 0.633333 + value: {x: 0.322106, y: 0.052606, z: 0.000000} + - time: 0.666667 + value: {x: 0.327537, y: 0.066125, z: 0.000000} + - time: 0.700000 + value: {x: 0.326933, y: 0.078779, z: 0.000000} + - time: 0.733333 + value: {x: 0.321675, y: 0.087941, z: 0.000000} + - time: 0.766667 + value: {x: 0.312951, y: 0.091330, z: 0.000000} + - time: 0.800000 + value: {x: 0.303805, y: 0.088904, z: 0.000000} + - time: 0.833333 + value: {x: 0.297356, y: 0.081183, z: 0.000000} + - time: 0.866667 + value: {x: 0.296157, y: 0.068786, z: 0.000000} + - time: 0.900000 + value: {x: 0.300501, y: 0.053944, z: 0.000000} + - time: 0.933333 + value: {x: 0.309864, y: 0.039148, z: 0.000000} + - time: 0.966667 + value: {x: 0.324424, y: 0.026371, z: 0.000000} + - time: 1.000000 + value: {x: 0.347606, y: 0.016308, z: 0.000000} + - time: 1.033333 + value: {x: 0.384074, y: 0.009019, z: 0.000000} + - time: 1.066667 + value: {x: 0.437710, y: 0.004508, z: 0.000000} + - time: 1.100000 + value: {x: 0.507408, y: 0.002471, z: 0.000000} + - time: 1.133333 + value: {x: 0.586975, y: 0.002288, z: 0.000000} + - time: 1.166667 + value: {x: 0.670508, y: 0.003374, z: 0.000000} + - time: 1.200000 + value: {x: 0.753056, y: 0.005288, z: 0.000000} + - time: 1.233333 + value: {x: 0.831104, y: 0.008001, z: 0.000000} + - time: 1.266667 + value: {x: 0.901784, y: 0.011716, z: 0.000000} + - time: 1.300000 + value: {x: 0.962783, y: 0.016562, z: 0.000000} + - time: 1.333333 + value: {x: 1.013471, y: 0.022468, z: 0.000000} + - time: 1.366667 + value: {x: 1.053407, y: 0.029412, z: 0.000000} + - time: 1.400000 + value: {x: 1.085646, y: 0.036897, z: 0.000000} + - time: 1.433333 + value: {x: 1.110605, y: 0.044814, z: 0.000000} + - time: 1.466667 + value: {x: 1.130556, y: 0.052795, z: 0.000000} + - time: 1.500000 + value: {x: 1.146432, y: 0.060681, z: 0.000000} + - time: 1.533333 + value: {x: 1.158901, y: 0.068451, z: 0.000000} + - time: 1.566667 + value: {x: 1.168721, y: 0.076098, z: 0.000000} + - time: 1.600000 + value: {x: 1.176480, y: 0.083615, z: 0.000000} + - time: 1.633333 + value: {x: 1.182559, y: 0.091008, z: 0.000000} + - time: 1.666667 + value: {x: 1.187275, y: 0.098281, z: 0.000000} + - time: 1.700000 + value: {x: 1.190885, y: 0.105437, z: 0.000000} + - time: 1.733333 + value: {x: 1.193483, y: 0.112495, z: 0.000000} + - time: 1.766667 + value: {x: 1.195093, y: 0.119447, z: 0.000000} + - time: 1.800000 + value: {x: 1.195790, y: 0.126275, z: 0.000000} + - time: 1.833333 + value: {x: 1.195626, y: 0.132973, z: 0.000000} + - time: 1.866667 + value: {x: 1.194675, y: 0.139537, z: 0.000000} + - time: 1.900000 + value: {x: 1.192584, y: 0.146008, z: 0.000000} + - time: 1.933333 + value: {x: 1.189651, y: 0.152352, z: 0.000000} + - time: 1.966667 + value: {x: 1.186089, y: 0.158555, z: 0.000000} + - time: 2.000000 + value: {x: 1.181526, y: 0.164655, z: 0.000000} + - time: 2.033333 + value: {x: 1.176168, y: 0.170614, z: 0.000000} + - time: 2.066667 + value: {x: 1.170452, y: 0.176413, z: 0.000000} + - time: 2.100000 + value: {x: 1.163739, y: 0.181947, z: 0.000000} + - time: 2.133333 + value: {x: 1.156888, y: 0.187226, z: 0.000000} + - time: 2.166667 + value: {x: 1.149579, y: 0.192169, z: 0.000000} + - time: 2.200000 + value: {x: 1.142051, y: 0.196733, z: 0.000000} + - time: 2.233333 + value: {x: 1.134373, y: 0.200968, z: 0.000000} + - time: 2.266667 + value: {x: 1.126520, y: 0.204703, z: 0.000000} + - time: 2.300000 + value: {x: 1.118671, y: 0.208133, z: 0.000000} + - time: 2.333333 + value: {x: 1.110756, y: 0.210998, z: 0.000000} + - time: 2.366667 + value: {x: 1.102905, y: 0.213542, z: 0.000000} + - time: 2.400000 + value: {x: 1.095113, y: 0.215559, z: 0.000000} + - time: 2.433333 + value: {x: 1.087404, y: 0.217153, z: 0.000000} + - time: 2.466667 + value: {x: 1.079848, y: 0.218413, z: 0.000000} + - time: 2.533333 + value: {x: 1.065128, y: 0.219655, z: 0.000000} + - time: 2.600000 + value: {x: 1.051036, y: 0.219273, z: 0.000000} + - time: 2.633333 + value: {x: 1.044254, y: 0.218758, z: 0.000000} + - time: 2.700000 + value: {x: 1.031197, y: 0.217034, z: 0.000000} + - time: 2.733333 + value: {x: 1.024961, y: 0.215744, z: 0.000000} + - time: 2.800000 + value: {x: 1.012962, y: 0.213014, z: 0.000000} + - time: 2.833333 + value: {x: 1.007291, y: 0.211248, z: 0.000000} + - time: 2.900000 + value: {x: 0.996363, y: 0.207777, z: 0.000000} + - time: 2.966667 + value: {x: 0.986250, y: 0.203742, z: 0.000000} + - time: 3.033333 + value: {x: 0.976743, y: 0.199670, z: 0.000000} + - time: 3.133333 + value: {x: 0.963725, y: 0.193269, z: 0.000000} + - time: 3.233333 + value: {x: 0.952152, y: 0.186618, z: 0.000000} + - time: 3.333333 + value: {x: 0.941440, y: 0.180061, z: 0.000000} + - time: 3.466667 + value: {x: 0.928127, y: 0.171600, z: 0.000000} + - time: 3.633333 + value: {x: 0.912426, y: 0.161650, z: 0.000000} + - time: 3.733333 + value: {x: 0.903481, y: 0.156127, z: 0.000000} + - time: 3.866667 + value: {x: 0.891607, y: 0.149288, z: 0.000000} + - time: 3.966667 + value: {x: 0.883410, y: 0.144654, z: 0.000000} + - time: 4.033333 + value: {x: 0.877860, y: 0.141769, z: 0.000000} + - time: 4.133333 + value: {x: 0.869886, y: 0.137780, z: 0.000000} + - time: 4.233333 + value: {x: 0.862792, y: 0.134232, z: 0.000000} + - time: 4.366667 + value: {x: 0.853881, y: 0.130147, z: 0.000000} + - time: 4.466667 + value: {x: 0.847928, y: 0.127574, z: 0.000000} + - time: 4.566667 + value: {x: 0.842972, y: 0.125431, z: 0.000000} + - time: 4.666667 + value: {x: 0.839014, y: 0.123720, z: 0.000000} + - time: 4.766666 + value: {x: 0.836061, y: 0.122444, z: 0.000000} + - time: 4.866667 + value: {x: 0.834127, y: 0.121608, z: 0.000000} + - time: 4.966667 + value: {x: 0.833237, y: 0.121223, z: 0.000000} + - time: 5.333333 + value: {x: 0.833178, y: 0.121198, z: 0.000000} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.400714, y: 0.400714, z: 0.400714} + - time: 0.033333 + value: {x: 0.419434, y: 0.419434, z: 0.419434} + - time: 0.066667 + value: {x: 0.438520, y: 0.438520, z: 0.438520} + - time: 0.100000 + value: {x: 0.457968, y: 0.457968, z: 0.457968} + - time: 0.133333 + value: {x: 0.477777, y: 0.477777, z: 0.477777} + - time: 0.166667 + value: {x: 0.497945, y: 0.497945, z: 0.497945} + - time: 0.200000 + value: {x: 0.518469, y: 0.518469, z: 0.518469} + - time: 0.233333 + value: {x: 0.539347, y: 0.539347, z: 0.539347} + - time: 0.266667 + value: {x: 0.560577, y: 0.560577, z: 0.560577} + - time: 0.300000 + value: {x: 0.582158, y: 0.582158, z: 0.582158} + - time: 0.333333 + value: {x: 0.604087, y: 0.604087, z: 0.604087} + - time: 0.366667 + value: {x: 0.626363, y: 0.626363, z: 0.626363} + - time: 0.400000 + value: {x: 0.648983, y: 0.648983, z: 0.648983} + - time: 0.433333 + value: {x: 0.671946, y: 0.671946, z: 0.671946} + - time: 0.466667 + value: {x: 0.695251, y: 0.695251, z: 0.695251} + - time: 0.500000 + value: {x: 0.718896, y: 0.718896, z: 0.718896} + - time: 0.533333 + value: {x: 0.742878, y: 0.742878, z: 0.742878} + - time: 0.566667 + value: {x: 0.767198, y: 0.767198, z: 0.767198} + - time: 0.600000 + value: {x: 0.791851, y: 0.791851, z: 0.791851} + - time: 0.633333 + value: {x: 0.816839, y: 0.816839, z: 0.816839} + - time: 0.666667 + value: {x: 0.842159, y: 0.842159, z: 0.842159} + - time: 0.700000 + value: {x: 0.867808, y: 0.867808, z: 0.867808} + - time: 0.733333 + value: {x: 0.893788, y: 0.893788, z: 0.893788} + - time: 0.766667 + value: {x: 0.920095, y: 0.920095, z: 0.920095} + - time: 0.800000 + value: {x: 0.946728, y: 0.946728, z: 0.946728} + - time: 0.833333 + value: {x: 0.973686, y: 0.973686, z: 0.973686} + - time: 0.866667 + value: {x: 1.000968, y: 1.000968, z: 1.000968} + - time: 0.900000 + value: {x: 1.028572, y: 1.028572, z: 1.028572} + - time: 0.933333 + value: {x: 1.056498, y: 1.056498, z: 1.056498} + - time: 0.966667 + value: {x: 1.084744, y: 1.084744, z: 1.084744} + - time: 1.000000 + value: {x: 1.113308, y: 1.113308, z: 1.113308} + - time: 1.033333 + value: {x: 1.142190, y: 1.142190, z: 1.142190} + - time: 1.066667 + value: {x: 1.171389, y: 1.171389, z: 1.171389} + - time: 1.100000 + value: {x: 1.200902, y: 1.200902, z: 1.200902} + - time: 1.133333 + value: {x: 1.230731, y: 1.230731, z: 1.230731} + - time: 1.166667 + value: {x: 1.260872, y: 1.260872, z: 1.260872} + - time: 1.200000 + value: {x: 1.291324, y: 1.291324, z: 1.291324} + - time: 1.233333 + value: {x: 1.322089, y: 1.322089, z: 1.322089} + - time: 1.266667 + value: {x: 1.353163, y: 1.353163, z: 1.353163} + - time: 1.300000 + value: {x: 1.384545, y: 1.384545, z: 1.384545} + - time: 1.333333 + value: {x: 1.416236, y: 1.416236, z: 1.416236} + - time: 1.366667 + value: {x: 1.448234, y: 1.448234, z: 1.448234} + - time: 1.400000 + value: {x: 1.480537, y: 1.480537, z: 1.480537} + - time: 1.433333 + value: {x: 1.513146, y: 1.513146, z: 1.513146} + - time: 1.466667 + value: {x: 1.546058, y: 1.546058, z: 1.546058} + - time: 1.500000 + value: {x: 1.579273, y: 1.579273, z: 1.579273} + - time: 1.533333 + value: {x: 1.612791, y: 1.612791, z: 1.612791} + - time: 1.566667 + value: {x: 1.646609, y: 1.646609, z: 1.646609} + - time: 1.600000 + value: {x: 1.680728, y: 1.680728, z: 1.680728} + - time: 1.633333 + value: {x: 1.715147, y: 1.715147, z: 1.715147} + - time: 1.666667 + value: {x: 1.749864, y: 1.749864, z: 1.749864} + - time: 1.700000 + value: {x: 1.784878, y: 1.784878, z: 1.784878} + - time: 1.733333 + value: {x: 1.820190, y: 1.820190, z: 1.820190} + - time: 1.766667 + value: {x: 1.855798, y: 1.855798, z: 1.855798} + - time: 1.800000 + value: {x: 1.891701, y: 1.891701, z: 1.891701} + - time: 1.833333 + value: {x: 1.927899, y: 1.927899, z: 1.927899} + - time: 1.866667 + value: {x: 1.964390, y: 1.964390, z: 1.964390} + - time: 1.900000 + value: {x: 2.001174, y: 2.001174, z: 2.001174} + - time: 1.933333 + value: {x: 2.038250, y: 2.038250, z: 2.038250} + - time: 1.966667 + value: {x: 2.075617, y: 2.075617, z: 2.075617} + - time: 2.000000 + value: {x: 2.113275, y: 2.113275, z: 2.113275} + - time: 2.033333 + value: {x: 2.151223, y: 2.151223, z: 2.151223} + - time: 2.066667 + value: {x: 2.189460, y: 2.189460, z: 2.189460} + - time: 2.100000 + value: {x: 2.227985, y: 2.227985, z: 2.227985} + - time: 2.133333 + value: {x: 2.266797, y: 2.266797, z: 2.266797} + - time: 2.166667 + value: {x: 2.305897, y: 2.305897, z: 2.305897} + - time: 2.200000 + value: {x: 2.345283, y: 2.345283, z: 2.345283} + - time: 2.233333 + value: {x: 2.384955, y: 2.384955, z: 2.384955} + - time: 2.266667 + value: {x: 2.424911, y: 2.424911, z: 2.424911} + - time: 2.300000 + value: {x: 2.465151, y: 2.465151, z: 2.465151} + - time: 2.333333 + value: {x: 2.505676, y: 2.505676, z: 2.505676} + - time: 2.366667 + value: {x: 2.546482, y: 2.546482, z: 2.546482} + - time: 2.400000 + value: {x: 2.587570, y: 2.587570, z: 2.587570} + - time: 2.433333 + value: {x: 2.628942, y: 2.628942, z: 2.628942} + - time: 2.466667 + value: {x: 2.670593, y: 2.670593, z: 2.670593} + - time: 2.500000 + value: {x: 2.712525, y: 2.712525, z: 2.712525} + - time: 2.533333 + value: {x: 2.754737, y: 2.754737, z: 2.754737} + - time: 2.566667 + value: {x: 2.797227, y: 2.797227, z: 2.797227} + - time: 2.600000 + value: {x: 2.839996, y: 2.839996, z: 2.839996} + - time: 2.633333 + value: {x: 2.883043, y: 2.883043, z: 2.883043} + - time: 2.666667 + value: {x: 2.926366, y: 2.926366, z: 2.926366} + - time: 2.700000 + value: {x: 2.969967, y: 2.969967, z: 2.969967} + - time: 2.733333 + value: {x: 3.013844, y: 3.013844, z: 3.013844} + - time: 2.766667 + value: {x: 3.057996, y: 3.057996, z: 3.057996} + - time: 2.800000 + value: {x: 3.102423, y: 3.102423, z: 3.102423} + - time: 2.833333 + value: {x: 3.147125, y: 3.147125, z: 3.147125} + - time: 2.866667 + value: {x: 3.192100, y: 3.192100, z: 3.192100} + - time: 2.900000 + value: {x: 3.237348, y: 3.237348, z: 3.237348} + - time: 2.933333 + value: {x: 3.282870, y: 3.282870, z: 3.282870} + - time: 2.966667 + value: {x: 3.328663, y: 3.328663, z: 3.328663} + - time: 3.000000 + value: {x: 3.374727, y: 3.374727, z: 3.374727} + - time: 3.033333 + value: {x: 3.421064, y: 3.421064, z: 3.421064} + - time: 3.066667 + value: {x: 3.467670, y: 3.467670, z: 3.467670} + - time: 3.100000 + value: {x: 3.514546, y: 3.514546, z: 3.514546} + - time: 3.133333 + value: {x: 3.561692, y: 3.561692, z: 3.561692} + - time: 3.166667 + value: {x: 3.609108, y: 3.609108, z: 3.609108} + - time: 3.200000 + value: {x: 3.656791, y: 3.656791, z: 3.656791} + - time: 3.233333 + value: {x: 3.704742, y: 3.704742, z: 3.704742} + - time: 3.266667 + value: {x: 3.752961, y: 3.752961, z: 3.752961} + - time: 3.300000 + value: {x: 3.801447, y: 3.801447, z: 3.801447} + - time: 3.333333 + value: {x: 3.850199, y: 3.850199, z: 3.850199} + - time: 3.366667 + value: {x: 3.899218, y: 3.899218, z: 3.899218} + - time: 3.400000 + value: {x: 3.948502, y: 3.948502, z: 3.948502} + - time: 3.433333 + value: {x: 3.998051, y: 3.998051, z: 3.998051} + - time: 3.466667 + value: {x: 4.047864, y: 4.047864, z: 4.047864} + - time: 3.500000 + value: {x: 4.097942, y: 4.097942, z: 4.097942} + - time: 3.533333 + value: {x: 4.148283, y: 4.148283, z: 4.148283} + - time: 3.566667 + value: {x: 4.198888, y: 4.198888, z: 4.198888} + - time: 3.600000 + value: {x: 4.249756, y: 4.249756, z: 4.249756} + - time: 3.633333 + value: {x: 4.300885, y: 4.300885, z: 4.300885} + - time: 3.666667 + value: {x: 4.352276, y: 4.352276, z: 4.352276} + - time: 3.700000 + value: {x: 4.403930, y: 4.403930, z: 4.403930} + - time: 3.733333 + value: {x: 4.455843, y: 4.455843, z: 4.455843} + - time: 3.766667 + value: {x: 4.508018, y: 4.508018, z: 4.508018} + - time: 3.800000 + value: {x: 4.560452, y: 4.560452, z: 4.560452} + - time: 3.833333 + value: {x: 4.613145, y: 4.613145, z: 4.613145} + - time: 3.866667 + value: {x: 4.666099, y: 4.666099, z: 4.666099} + - time: 3.900000 + value: {x: 4.719311, y: 4.719311, z: 4.719311} + - time: 3.933333 + value: {x: 4.772781, y: 4.772781, z: 4.772781} + - time: 3.966667 + value: {x: 4.826510, y: 4.826510, z: 4.826510} + - time: 4.000000 + value: {x: 4.880496, y: 4.880496, z: 4.880496} + - time: 4.033333 + value: {x: 4.934739, y: 4.934739, z: 4.934739} + - time: 4.066667 + value: {x: 4.989239, y: 4.989239, z: 4.989239} + - time: 4.100000 + value: {x: 5.043995, y: 5.043995, z: 5.043995} + - time: 4.133333 + value: {x: 5.099007, y: 5.099007, z: 5.099007} + - time: 4.166667 + value: {x: 5.154274, y: 5.154274, z: 5.154274} + - time: 4.200000 + value: {x: 5.209797, y: 5.209797, z: 5.209797} + - time: 4.233333 + value: {x: 5.265574, y: 5.265574, z: 5.265574} + - time: 4.266666 + value: {x: 5.321607, y: 5.321607, z: 5.321607} + - time: 4.300000 + value: {x: 5.377894, y: 5.377894, z: 5.377894} + - time: 4.333333 + value: {x: 5.434433, y: 5.434433, z: 5.434433} + - time: 4.366667 + value: {x: 5.491226, y: 5.491226, z: 5.491226} + - time: 4.400000 + value: {x: 5.548272, y: 5.548272, z: 5.548272} + - time: 4.433333 + value: {x: 5.605569, y: 5.605569, z: 5.605569} + - time: 4.466667 + value: {x: 5.663120, y: 5.663120, z: 5.663120} + - time: 4.500000 + value: {x: 5.720922, y: 5.720922, z: 5.720922} + - time: 4.533333 + value: {x: 5.778975, y: 5.778975, z: 5.778975} + - time: 4.566667 + value: {x: 5.837280, y: 5.837280, z: 5.837280} + - time: 4.600000 + value: {x: 5.895835, y: 5.895835, z: 5.895835} + - time: 4.633333 + value: {x: 5.954640, y: 5.954640, z: 5.954640} + - time: 4.666667 + value: {x: 6.013695, y: 6.013695, z: 6.013695} + - time: 4.700000 + value: {x: 6.072999, y: 6.072999, z: 6.072999} + - time: 4.733333 + value: {x: 6.132553, y: 6.132553, z: 6.132553} + - time: 4.766666 + value: {x: 6.192357, y: 6.192357, z: 6.192357} + - time: 4.800000 + value: {x: 6.252409, y: 6.252409, z: 6.252409} + - time: 4.833333 + value: {x: 6.312710, y: 6.312710, z: 6.312710} + - time: 4.866667 + value: {x: 6.373257, y: 6.373257, z: 6.373257} + - time: 4.900000 + value: {x: 6.434052, y: 6.434052, z: 6.434052} + - time: 4.933333 + value: {x: 6.495093, y: 6.495093, z: 6.495093} + - time: 4.966667 + value: {x: 6.556385, y: 6.556385, z: 6.556385} + - time: 5.000000 + value: {x: 6.617919, y: 6.617919, z: 6.617919} + - time: 5.033333 + value: {x: 6.679702, y: 6.679702, z: 6.679702} + - time: 5.066667 + value: {x: 6.741729, y: 6.741729, z: 6.741729} + - time: 5.100000 + value: {x: 6.804002, y: 6.804002, z: 6.804002} + - time: 5.133333 + value: {x: 6.866521, y: 6.866521, z: 6.866521} + - time: 5.166667 + value: {x: 6.929286, y: 6.929286, z: 6.929286} + - time: 5.200000 + value: {x: 6.992294, y: 6.992294, z: 6.992294} + - time: 5.233333 + value: {x: 7.055546, y: 7.055546, z: 7.055546} + - time: 5.266666 + value: {x: 7.119041, y: 7.119041, z: 7.119041} + - time: 5.300000 + value: {x: 7.182782, y: 7.182782, z: 7.182782} + - time: 5.333333 + value: {x: 7.246766, y: 7.246766, z: 7.246766} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_30: + position: + - time: 0.000000 + value: {x: 0.019298, y: 0.499329, z: -0.016205} + - time: 0.033333 + value: {x: 0.019392, y: 0.499526, z: -0.016280} + - time: 0.066667 + value: {x: 0.030720, y: 0.347807, z: -0.025055} + - time: 0.100000 + value: {x: 0.042425, y: 0.246855, z: -0.031486} + - time: 0.133333 + value: {x: 0.054298, y: 0.189327, z: -0.036282} + - time: 0.166667 + value: {x: 0.066303, y: 0.164335, z: -0.039821} + - time: 0.200000 + value: {x: 0.078574, y: 0.159016, z: -0.042276} + - time: 0.233333 + value: {x: 0.091561, y: 0.162761, z: -0.043490} + - time: 0.266667 + value: {x: 0.106845, y: 0.171458, z: -0.042418} + - time: 0.300000 + value: {x: 0.126024, y: 0.182180, z: -0.038063} + - time: 0.333333 + value: {x: 0.150335, y: 0.193594, z: -0.029669} + - time: 0.366667 + value: {x: 0.180789, y: 0.205632, z: -0.016385} + - time: 0.400000 + value: {x: 0.217411, y: 0.218148, z: 0.001599} + - time: 0.433333 + value: {x: 0.255734, y: 0.231208, z: 0.021043} + - time: 0.466667 + value: {x: 0.290669, y: 0.245065, z: 0.038461} + - time: 0.500000 + value: {x: 0.319627, y: 0.259868, z: 0.051748} + - time: 0.533333 + value: {x: 0.344085, y: 0.276017, z: 0.062117} + - time: 0.566667 + value: {x: 0.365344, y: 0.293966, z: 0.070479} + - time: 0.600000 + value: {x: 0.383507, y: 0.313572, z: 0.076768} + - time: 0.633333 + value: {x: 0.397244, y: 0.334760, z: 0.079980} + - time: 0.666667 + value: {x: 0.405873, y: 0.357079, z: 0.079804} + - time: 0.700000 + value: {x: 0.409490, y: 0.378314, z: 0.076188} + - time: 0.733333 + value: {x: 0.409215, y: 0.395906, z: 0.070027} + - time: 0.766667 + value: {x: 0.406049, y: 0.407451, z: 0.061759} + - time: 0.800000 + value: {x: 0.402436, y: 0.413109, z: 0.053495} + - time: 0.833333 + value: {x: 0.400962, y: 0.413203, z: 0.046665} + - time: 0.866667 + value: {x: 0.403669, y: 0.408568, z: 0.043121} + - time: 0.900000 + value: {x: 0.410827, y: 0.401308, z: 0.042790} + - time: 0.933333 + value: {x: 0.422006, y: 0.393952, z: 0.045416} + - time: 0.966667 + value: {x: 0.437358, y: 0.388461, z: 0.051063} + - time: 1.000000 + value: {x: 0.459665, y: 0.385594, z: 0.061827} + - time: 1.033333 + value: {x: 0.492745, y: 0.385318, z: 0.080231} + - time: 1.066667 + value: {x: 0.539735, y: 0.387772, z: 0.108764} + - time: 1.100000 + value: {x: 0.599754, y: 0.392568, z: 0.146617} + - time: 1.133333 + value: {x: 0.667756, y: 0.399136, z: 0.190282} + - time: 1.166667 + value: {x: 0.738930, y: 0.406912, z: 0.236352} + - time: 1.200000 + value: {x: 0.809267, y: 0.415384, z: 0.281820} + - time: 1.233333 + value: {x: 0.875908, y: 0.424497, z: 0.324583} + - time: 1.266667 + value: {x: 0.936489, y: 0.434633, z: 0.363301} + - time: 1.300000 + value: {x: 0.989169, y: 0.445710, z: 0.396234} + - time: 1.333333 + value: {x: 1.033405, y: 0.457822, z: 0.423313} + - time: 1.366667 + value: {x: 1.068847, y: 0.470908, z: 0.444204} + - time: 1.400000 + value: {x: 1.097979, y: 0.484499, z: 0.460727} + - time: 1.433333 + value: {x: 1.121160, y: 0.498394, z: 0.472949} + - time: 1.466667 + value: {x: 1.140229, y: 0.512284, z: 0.482292} + - time: 1.500000 + value: {x: 1.155961, y: 0.525949, z: 0.489182} + - time: 1.533333 + value: {x: 1.168864, y: 0.539553, z: 0.494343} + - time: 1.566667 + value: {x: 1.179605, y: 0.552834, z: 0.497741} + - time: 1.600000 + value: {x: 1.188618, y: 0.566026, z: 0.500157} + - time: 1.633333 + value: {x: 1.196242, y: 0.578989, z: 0.501539} + - time: 1.666667 + value: {x: 1.202727, y: 0.591784, z: 0.502171} + - time: 1.700000 + value: {x: 1.208281, y: 0.604416, z: 0.502208} + - time: 1.733333 + value: {x: 1.212987, y: 0.616883, z: 0.501657} + - time: 1.766667 + value: {x: 1.216861, y: 0.629196, z: 0.500567} + - time: 1.800000 + value: {x: 1.219964, y: 0.641332, z: 0.498969} + - time: 1.833333 + value: {x: 1.222346, y: 0.653264, z: 0.496849} + - time: 1.866667 + value: {x: 1.224043, y: 0.665120, z: 0.494493} + - time: 1.900000 + value: {x: 1.224822, y: 0.676653, z: 0.491161} + - time: 1.933333 + value: {x: 1.224862, y: 0.688160, z: 0.487634} + - time: 1.966667 + value: {x: 1.224375, y: 0.699450, z: 0.483711} + - time: 2.000000 + value: {x: 1.223058, y: 0.710545, z: 0.479140} + - time: 2.033333 + value: {x: 1.221070, y: 0.721460, z: 0.474137} + - time: 2.066667 + value: {x: 1.218768, y: 0.732173, z: 0.468950} + - time: 2.133333 + value: {x: 1.212369, y: 0.752681, z: 0.457382} + - time: 2.166667 + value: {x: 1.208707, y: 0.762416, z: 0.451334} + - time: 2.200000 + value: {x: 1.204865, y: 0.771634, z: 0.444997} + - time: 2.233333 + value: {x: 1.200846, y: 0.780677, z: 0.438947} + - time: 2.266667 + value: {x: 1.196700, y: 0.788992, z: 0.432465} + - time: 2.300000 + value: {x: 1.192523, y: 0.797045, z: 0.426152} + - time: 2.333333 + value: {x: 1.188256, y: 0.804575, z: 0.419967} + - time: 2.366667 + value: {x: 1.184054, y: 0.811595, z: 0.413554} + - time: 2.400000 + value: {x: 1.179853, y: 0.818183, z: 0.407433} + - time: 2.433333 + value: {x: 1.175731, y: 0.824184, z: 0.401144} + - time: 2.466667 + value: {x: 1.171704, y: 0.829859, z: 0.395036} + - time: 2.500000 + value: {x: 1.167741, y: 0.834889, z: 0.389046} + - time: 2.533333 + value: {x: 1.163897, y: 0.839934, z: 0.383297} + - time: 2.600000 + value: {x: 1.156545, y: 0.848202, z: 0.371897} + - time: 2.633333 + value: {x: 1.153063, y: 0.851942, z: 0.366336} + - time: 2.666667 + value: {x: 1.149723, y: 0.855207, z: 0.360735} + - time: 2.700000 + value: {x: 1.146476, y: 0.858553, z: 0.355410} + - time: 2.766667 + value: {x: 1.140423, y: 0.864159, z: 0.345102} + - time: 2.800000 + value: {x: 1.137538, y: 0.866999, z: 0.340277} + - time: 2.833333 + value: {x: 1.134881, y: 0.869217, z: 0.335300} + - time: 2.900000 + value: {x: 1.129831, y: 0.873760, z: 0.325872} + - time: 2.933333 + value: {x: 1.127559, y: 0.875698, z: 0.321357} + - time: 3.000000 + value: {x: 1.123278, y: 0.879634, z: 0.312796} + - time: 3.033333 + value: {x: 1.121372, y: 0.881344, z: 0.308504} + - time: 3.066667 + value: {x: 1.119598, y: 0.883005, z: 0.304453} + - time: 3.133333 + value: {x: 1.116241, y: 0.886508, z: 0.296775} + - time: 3.233333 + value: {x: 1.112201, y: 0.890986, z: 0.285651} + - time: 3.266667 + value: {x: 1.110956, y: 0.892630, z: 0.282275} + - time: 3.300000 + value: {x: 1.109823, y: 0.893941, z: 0.278643} + - time: 3.466667 + value: {x: 1.104701, y: 0.901164, z: 0.262127} + - time: 3.633333 + value: {x: 1.100159, y: 0.908432, z: 0.246476} + - time: 3.733333 + value: {x: 1.097677, y: 0.912926, z: 0.237450} + - time: 3.766667 + value: {x: 1.096897, y: 0.914587, z: 0.234742} + - time: 3.800000 + value: {x: 1.095963, y: 0.916011, z: 0.231527} + - time: 3.933333 + value: {x: 1.092777, y: 0.922361, z: 0.219971} + - time: 3.966667 + value: {x: 1.092112, y: 0.924121, z: 0.217425} + - time: 4.000000 + value: {x: 1.091439, y: 0.925687, z: 0.214478} + - time: 4.033333 + value: {x: 1.090575, y: 0.927498, z: 0.211886} + - time: 4.066667 + value: {x: 1.089830, y: 0.929076, z: 0.208881} + - time: 4.100000 + value: {x: 1.089107, y: 0.930938, z: 0.206412} + - time: 4.133333 + value: {x: 1.088503, y: 0.932565, z: 0.203530} + - time: 4.166667 + value: {x: 1.087944, y: 0.934344, z: 0.200942} + - time: 4.200000 + value: {x: 1.087425, y: 0.936296, z: 0.198689} + - time: 4.233333 + value: {x: 1.087023, y: 0.938031, z: 0.196053} + - time: 4.300000 + value: {x: 1.086248, y: 0.941872, z: 0.191433} + - time: 4.333333 + value: {x: 1.085777, y: 0.943661, z: 0.188768} + - time: 4.400000 + value: {x: 1.085005, y: 0.947673, z: 0.184298} + - time: 4.433333 + value: {x: 1.084778, y: 0.949518, z: 0.181803} + - time: 4.500000 + value: {x: 1.084505, y: 0.953617, z: 0.177629} + - time: 4.533333 + value: {x: 1.084470, y: 0.955805, z: 0.175828} + - time: 4.566667 + value: {x: 1.084565, y: 0.957765, z: 0.173631} + - time: 4.600000 + value: {x: 1.084687, y: 0.960027, z: 0.172008} + - time: 4.666667 + value: {x: 1.085256, y: 0.964217, z: 0.168208} + - time: 4.700000 + value: {x: 1.085620, y: 0.966574, z: 0.166820} + - time: 4.766666 + value: {x: 1.086679, y: 0.970944, z: 0.163467} + - time: 4.800000 + value: {x: 1.087317, y: 0.973258, z: 0.162053} + - time: 4.900000 + value: {x: 1.089741, y: 0.980355, z: 0.158201} + - time: 4.966667 + value: {x: 1.091766, y: 0.985357, z: 0.156208} + - time: 5.333333 + value: {x: 1.104382, y: 1.011806, z: 0.146135} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.661496, y: 0.661496, z: 0.661496} + - time: 0.466667 + value: {x: 0.694332, y: 0.694332, z: 0.694332} + - time: 1.000000 + value: {x: 0.732691, y: 0.732691, z: 0.732691} + - time: 1.533333 + value: {x: 0.771931, y: 0.771931, z: 0.771931} + - time: 2.066667 + value: {x: 0.812045, y: 0.812045, z: 0.812045} + - time: 2.600000 + value: {x: 0.853027, y: 0.853027, z: 0.853027} + - time: 3.133333 + value: {x: 0.894870, y: 0.894870, z: 0.894870} + - time: 3.666667 + value: {x: 0.937569, y: 0.937569, z: 0.937569} + - time: 4.200000 + value: {x: 0.981118, y: 0.981118, z: 0.981118} + - time: 4.766666 + value: {x: 1.028315, y: 1.028315, z: 1.028315} + - time: 5.333333 + value: {x: 1.076459, y: 1.076459, z: 1.076459} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_31: + position: + - time: 0.000000 + value: {x: -0.000604, y: 0.457730, z: -0.000431} + - time: 0.033333 + value: {x: -0.000604, y: 0.457730, z: -0.000431} + - time: 0.066667 + value: {x: -0.000472, y: 0.282607, z: -0.000337} + - time: 0.100000 + value: {x: 0.001431, y: 0.161182, z: 0.001021} + - time: 0.133333 + value: {x: 0.004502, y: 0.085264, z: 0.003211} + - time: 0.166667 + value: {x: 0.008465, y: 0.043457, z: 0.006038} + - time: 0.200000 + value: {x: 0.013294, y: 0.022582, z: 0.009482} + - time: 0.233333 + value: {x: 0.019326, y: 0.011796, z: 0.013785} + - time: 0.266667 + value: {x: 0.028068, y: 0.006799, z: 0.020021} + - time: 0.300000 + value: {x: 0.041050, y: 0.004559, z: 0.029280} + - time: 0.333333 + value: {x: 0.059455, y: 0.003674, z: 0.042409} + - time: 0.366667 + value: {x: 0.084276, y: 0.003901, z: 0.060113} + - time: 0.400000 + value: {x: 0.115491, y: 0.005112, z: 0.082379} + - time: 0.433333 + value: {x: 0.148605, y: 0.007328, z: 0.105999} + - time: 0.466667 + value: {x: 0.178529, y: 0.010668, z: 0.127343} + - time: 0.500000 + value: {x: 0.202628, y: 0.015363, z: 0.144533} + - time: 0.533333 + value: {x: 0.222386, y: 0.021688, z: 0.158627} + - time: 0.566667 + value: {x: 0.239091, y: 0.030067, z: 0.170542} + - time: 0.600000 + value: {x: 0.252820, y: 0.040399, z: 0.180335} + - time: 0.633333 + value: {x: 0.262232, y: 0.052606, z: 0.187048} + - time: 0.666667 + value: {x: 0.266653, y: 0.066125, z: 0.190202} + - time: 0.700000 + value: {x: 0.266161, y: 0.078779, z: 0.189851} + - time: 0.733333 + value: {x: 0.261880, y: 0.087941, z: 0.186797} + - time: 0.766667 + value: {x: 0.254778, y: 0.091330, z: 0.181732} + - time: 0.800000 + value: {x: 0.247332, y: 0.088904, z: 0.176421} + - time: 0.833333 + value: {x: 0.242082, y: 0.081183, z: 0.172676} + - time: 0.866667 + value: {x: 0.241106, y: 0.068786, z: 0.171979} + - time: 0.900000 + value: {x: 0.244643, y: 0.053944, z: 0.174502} + - time: 0.933333 + value: {x: 0.252265, y: 0.039148, z: 0.179939} + - time: 0.966667 + value: {x: 0.264119, y: 0.026371, z: 0.188394} + - time: 1.000000 + value: {x: 0.282992, y: 0.016308, z: 0.201856} + - time: 1.033333 + value: {x: 0.312681, y: 0.009019, z: 0.223033} + - time: 1.066667 + value: {x: 0.356347, y: 0.004508, z: 0.254180} + - time: 1.100000 + value: {x: 0.413089, y: 0.002471, z: 0.294653} + - time: 1.133333 + value: {x: 0.477866, y: 0.002288, z: 0.340858} + - time: 1.166667 + value: {x: 0.545871, y: 0.003374, z: 0.389366} + - time: 1.200000 + value: {x: 0.613075, y: 0.005288, z: 0.437302} + - time: 1.233333 + value: {x: 0.676614, y: 0.008001, z: 0.482624} + - time: 1.266667 + value: {x: 0.734157, y: 0.011716, z: 0.523669} + - time: 1.300000 + value: {x: 0.783817, y: 0.016562, z: 0.559091} + - time: 1.333333 + value: {x: 0.825082, y: 0.022468, z: 0.588525} + - time: 1.366667 + value: {x: 0.857595, y: 0.029412, z: 0.611716} + - time: 1.400000 + value: {x: 0.883841, y: 0.036897, z: 0.630438} + - time: 1.433333 + value: {x: 0.904161, y: 0.044814, z: 0.644932} + - time: 1.466667 + value: {x: 0.920403, y: 0.052795, z: 0.656517} + - time: 1.500000 + value: {x: 0.933328, y: 0.060681, z: 0.665736} + - time: 1.533333 + value: {x: 0.943480, y: 0.068451, z: 0.672978} + - time: 1.566667 + value: {x: 0.951474, y: 0.076098, z: 0.678680} + - time: 1.600000 + value: {x: 0.957790, y: 0.083615, z: 0.683185} + - time: 1.633333 + value: {x: 0.962739, y: 0.091008, z: 0.686715} + - time: 1.666667 + value: {x: 0.966579, y: 0.098281, z: 0.689454} + - time: 1.700000 + value: {x: 0.969517, y: 0.105437, z: 0.691550} + - time: 1.733333 + value: {x: 0.971633, y: 0.112495, z: 0.693059} + - time: 1.766667 + value: {x: 0.972944, y: 0.119447, z: 0.693994} + - time: 1.800000 + value: {x: 0.973511, y: 0.126275, z: 0.694399} + - time: 1.833333 + value: {x: 0.973378, y: 0.132972, z: 0.694304} + - time: 1.866667 + value: {x: 0.972604, y: 0.139537, z: 0.693752} + - time: 1.900000 + value: {x: 0.970901, y: 0.146008, z: 0.692537} + - time: 1.933333 + value: {x: 0.968513, y: 0.152352, z: 0.690834} + - time: 1.966667 + value: {x: 0.965614, y: 0.158555, z: 0.688766} + - time: 2.000000 + value: {x: 0.961899, y: 0.164655, z: 0.686116} + - time: 2.033333 + value: {x: 0.957537, y: 0.170614, z: 0.683004} + - time: 2.066667 + value: {x: 0.952883, y: 0.176413, z: 0.679685} + - time: 2.100000 + value: {x: 0.947418, y: 0.181947, z: 0.675787} + - time: 2.133333 + value: {x: 0.941841, y: 0.187226, z: 0.671808} + - time: 2.166667 + value: {x: 0.935890, y: 0.192169, z: 0.667564} + - time: 2.200000 + value: {x: 0.929761, y: 0.196733, z: 0.663192} + - time: 2.233333 + value: {x: 0.923511, y: 0.200968, z: 0.658734} + - time: 2.266667 + value: {x: 0.917117, y: 0.204703, z: 0.654173} + - time: 2.300000 + value: {x: 0.910728, y: 0.208133, z: 0.649616} + - time: 2.333333 + value: {x: 0.904284, y: 0.210998, z: 0.645019} + - time: 2.366667 + value: {x: 0.897892, y: 0.213542, z: 0.640460} + - time: 2.400000 + value: {x: 0.891548, y: 0.215559, z: 0.635935} + - time: 2.433333 + value: {x: 0.885272, y: 0.217153, z: 0.631459} + - time: 2.466667 + value: {x: 0.879121, y: 0.218414, z: 0.627071} + - time: 2.533333 + value: {x: 0.867137, y: 0.219655, z: 0.618523} + - time: 2.600000 + value: {x: 0.855665, y: 0.219273, z: 0.610340} + - time: 2.633333 + value: {x: 0.850144, y: 0.218758, z: 0.606402} + - time: 2.700000 + value: {x: 0.839513, y: 0.217034, z: 0.598819} + - time: 2.733333 + value: {x: 0.834437, y: 0.215744, z: 0.595198} + - time: 2.800000 + value: {x: 0.824668, y: 0.213014, z: 0.588230} + - time: 2.900000 + value: {x: 0.811154, y: 0.207777, z: 0.578591} + - time: 2.966667 + value: {x: 0.802922, y: 0.203742, z: 0.572719} + - time: 3.033333 + value: {x: 0.795182, y: 0.199670, z: 0.567198} + - time: 3.133333 + value: {x: 0.784584, y: 0.193269, z: 0.559638} + - time: 3.233333 + value: {x: 0.775162, y: 0.186618, z: 0.552917} + - time: 3.333333 + value: {x: 0.766441, y: 0.180061, z: 0.546697} + - time: 3.500000 + value: {x: 0.752993, y: 0.169539, z: 0.537105} + - time: 3.666667 + value: {x: 0.740324, y: 0.159757, z: 0.528068} + - time: 3.800000 + value: {x: 0.730685, y: 0.152631, z: 0.521192} + - time: 3.900000 + value: {x: 0.723574, y: 0.147693, z: 0.516120} + - time: 4.033333 + value: {x: 0.714680, y: 0.141769, z: 0.509776} + - time: 4.133333 + value: {x: 0.708188, y: 0.137780, z: 0.505145} + - time: 4.233333 + value: {x: 0.702412, y: 0.134232, z: 0.501026} + - time: 4.366667 + value: {x: 0.695158, y: 0.130147, z: 0.495851} + - time: 4.466667 + value: {x: 0.690312, y: 0.127574, z: 0.492394} + - time: 4.566667 + value: {x: 0.686276, y: 0.125431, z: 0.489516} + - time: 4.666667 + value: {x: 0.683054, y: 0.123720, z: 0.487218} + - time: 4.766666 + value: {x: 0.680650, y: 0.122444, z: 0.485503} + - time: 4.866667 + value: {x: 0.679076, y: 0.121608, z: 0.484380} + - time: 4.966667 + value: {x: 0.678351, y: 0.121224, z: 0.483863} + - time: 5.333333 + value: {x: 0.678303, y: 0.121198, z: 0.483829} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.661496, y: 0.661496, z: 0.661496} + - time: 0.466667 + value: {x: 0.694332, y: 0.694332, z: 0.694332} + - time: 1.000000 + value: {x: 0.732691, y: 0.732691, z: 0.732691} + - time: 1.533333 + value: {x: 0.771931, y: 0.771931, z: 0.771931} + - time: 2.066667 + value: {x: 0.812045, y: 0.812045, z: 0.812045} + - time: 2.600000 + value: {x: 0.853027, y: 0.853027, z: 0.853027} + - time: 3.133333 + value: {x: 0.894870, y: 0.894870, z: 0.894870} + - time: 3.666667 + value: {x: 0.937569, y: 0.937569, z: 0.937569} + - time: 4.200000 + value: {x: 0.981118, y: 0.981118, z: 0.981118} + - time: 4.766666 + value: {x: 1.028315, y: 1.028315, z: 1.028315} + - time: 5.333333 + value: {x: 1.076459, y: 1.076459, z: 1.076459} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_4: + position: + - time: 0.000000 + value: {x: 0.015597, y: 0.491681, z: -0.012509} + - time: 0.033333 + value: {x: 0.015660, y: 0.491814, z: -0.012559} + - time: 0.066667 + value: {x: 0.024911, y: 0.335734, z: -0.019856} + - time: 0.100000 + value: {x: 0.034906, y: 0.230935, z: -0.027332} + - time: 0.133333 + value: {x: 0.045323, y: 0.169922, z: -0.034852} + - time: 0.166667 + value: {x: 0.056066, y: 0.141717, z: -0.042398} + - time: 0.200000 + value: {x: 0.067237, y: 0.133402, z: -0.050082} + - time: 0.233333 + value: {x: 0.079289, y: 0.134323, z: -0.058176} + - time: 0.266667 + value: {x: 0.093896, y: 0.140338, z: -0.067616} + - time: 0.300000 + value: {x: 0.112748, y: 0.148501, z: -0.079404} + - time: 0.333333 + value: {x: 0.137155, y: 0.157466, z: -0.094328} + - time: 0.366667 + value: {x: 0.168193, y: 0.167136, z: -0.112875} + - time: 0.400000 + value: {x: 0.205878, y: 0.177366, z: -0.135171} + - time: 0.433333 + value: {x: 0.245428, y: 0.188217, z: -0.158527} + - time: 0.466667 + value: {x: 0.281402, y: 0.199916, z: -0.179747} + - time: 0.500000 + value: {x: 0.311020, y: 0.212629, z: -0.197420} + - time: 0.533333 + value: {x: 0.335864, y: 0.226733, z: -0.212320} + - time: 0.566667 + value: {x: 0.357322, y: 0.242675, z: -0.225231} + - time: 0.600000 + value: {x: 0.375498, y: 0.260323, z: -0.236299} + - time: 0.633333 + value: {x: 0.388965, y: 0.279601, z: -0.244750} + - time: 0.666667 + value: {x: 0.397000, y: 0.300037, z: -0.250041} + - time: 0.700000 + value: {x: 0.399697, y: 0.319424, z: -0.252306} + - time: 0.733333 + value: {x: 0.398258, y: 0.335189, z: -0.252148} + - time: 0.766667 + value: {x: 0.393742, y: 0.344953, z: -0.250358} + - time: 0.800000 + value: {x: 0.388773, y: 0.348837, z: -0.248157} + - time: 0.833333 + value: {x: 0.386103, y: 0.347204, z: -0.247387} + - time: 0.866667 + value: {x: 0.387924, y: 0.340844, z: -0.249010} + - time: 0.900000 + value: {x: 0.394517, y: 0.331891, z: -0.253364} + - time: 0.933333 + value: {x: 0.405422, y: 0.322862, z: -0.260153} + - time: 0.966667 + value: {x: 0.420803, y: 0.315723, z: -0.269497} + - time: 1.000000 + value: {x: 0.443633, y: 0.311220, z: -0.282997} + - time: 1.033333 + value: {x: 0.477989, y: 0.309340, z: -0.303096} + - time: 1.066667 + value: {x: 0.527231, y: 0.310194, z: -0.331520} + - time: 1.100000 + value: {x: 0.590413, y: 0.313411, z: -0.367857} + - time: 1.133333 + value: {x: 0.662141, y: 0.318411, z: -0.408987} + - time: 1.166667 + value: {x: 0.737273, y: 0.324627, z: -0.451987} + - time: 1.200000 + value: {x: 0.811517, y: 0.331561, z: -0.494524} + - time: 1.233333 + value: {x: 0.881817, y: 0.339163, z: -0.534916} + - time: 1.266667 + value: {x: 0.945653, y: 0.347780, z: -0.571493} + - time: 1.300000 + value: {x: 1.001045, y: 0.357372, z: -0.603431} + - time: 1.333333 + value: {x: 1.047421, y: 0.368000, z: -0.630182} + - time: 1.366667 + value: {x: 1.084406, y: 0.379611, z: -0.651594} + - time: 1.400000 + value: {x: 1.114654, y: 0.391730, z: -0.669135} + - time: 1.433333 + value: {x: 1.138546, y: 0.404176, z: -0.683147} + - time: 1.466667 + value: {x: 1.158048, y: 0.416628, z: -0.694667} + - time: 1.500000 + value: {x: 1.173987, y: 0.428877, z: -0.704249} + - time: 1.533333 + value: {x: 1.186915, y: 0.441051, z: -0.711954} + - time: 1.566667 + value: {x: 1.197532, y: 0.452939, z: -0.718531} + - time: 1.600000 + value: {x: 1.206313, y: 0.464727, z: -0.723921} + - time: 1.633333 + value: {x: 1.213614, y: 0.476305, z: -0.728530} + - time: 1.666667 + value: {x: 1.219704, y: 0.487721, z: -0.732434} + - time: 1.700000 + value: {x: 1.224806, y: 0.498981, z: -0.735753} + - time: 1.733333 + value: {x: 1.229006, y: 0.510087, z: -0.738576} + - time: 1.766667 + value: {x: 1.232323, y: 0.521047, z: -0.740881} + - time: 1.800000 + value: {x: 1.234823, y: 0.531837, z: -0.742719} + - time: 1.833333 + value: {x: 1.236556, y: 0.542437, z: -0.744149} + - time: 1.866667 + value: {x: 1.237567, y: 0.552945, z: -0.745017} + - time: 1.900000 + value: {x: 1.237593, y: 0.563177, z: -0.745569} + - time: 1.933333 + value: {x: 1.236843, y: 0.573358, z: -0.745474} + - time: 1.966667 + value: {x: 1.235533, y: 0.583337, z: -0.745094} + - time: 2.000000 + value: {x: 1.233338, y: 0.593137, z: -0.744272} + - time: 2.033333 + value: {x: 1.230432, y: 0.602763, z: -0.743034} + - time: 2.066667 + value: {x: 1.227195, y: 0.612195, z: -0.741599} + - time: 2.100000 + value: {x: 1.223086, y: 0.621264, z: -0.739770} + - time: 2.133333 + value: {x: 1.218816, y: 0.630161, z: -0.737644} + - time: 2.166667 + value: {x: 1.214140, y: 0.638634, z: -0.735373} + - time: 2.200000 + value: {x: 1.209271, y: 0.646618, z: -0.733120} + - time: 2.233333 + value: {x: 1.204228, y: 0.654391, z: -0.730500} + - time: 2.266667 + value: {x: 1.199042, y: 0.661484, z: -0.728050} + - time: 2.300000 + value: {x: 1.193834, y: 0.668303, z: -0.725472} + - time: 2.333333 + value: {x: 1.188538, y: 0.674589, z: -0.722731} + - time: 2.366667 + value: {x: 1.183308, y: 0.680403, z: -0.720228} + - time: 2.400000 + value: {x: 1.178091, y: 0.685764, z: -0.717551} + - time: 2.433333 + value: {x: 1.172954, y: 0.690571, z: -0.715083} + - time: 2.466667 + value: {x: 1.167927, y: 0.695050, z: -0.712619} + - time: 2.533333 + value: {x: 1.158155, y: 0.702725, z: -0.707687} + - time: 2.600000 + value: {x: 1.148883, y: 0.708628, z: -0.703082} + - time: 2.633333 + value: {x: 1.144460, y: 0.711198, z: -0.700920} + - time: 2.700000 + value: {x: 1.136023, y: 0.715505, z: -0.696918} + - time: 2.800000 + value: {x: 1.124418, y: 0.720492, z: -0.691212} + - time: 2.866667 + value: {x: 1.117460, y: 0.722798, z: -0.687914} + - time: 2.900000 + value: {x: 1.114152, y: 0.723889, z: -0.686480} + - time: 3.000000 + value: {x: 1.105164, y: 0.726413, z: -0.682239} + - time: 3.033333 + value: {x: 1.102467, y: 0.727039, z: -0.681106} + - time: 3.100000 + value: {x: 1.097436, y: 0.728277, z: -0.678740} + - time: 3.166667 + value: {x: 1.092887, y: 0.729341, z: -0.676719} + - time: 3.266667 + value: {x: 1.086854, y: 0.730752, z: -0.674184} + - time: 3.333333 + value: {x: 1.083215, y: 0.731419, z: -0.672805} + - time: 3.500000 + value: {x: 1.074848, y: 0.733445, z: -0.669454} + - time: 3.700000 + value: {x: 1.065581, y: 0.736294, z: -0.665645} + - time: 3.733333 + value: {x: 1.064190, y: 0.736758, z: -0.665244} + - time: 3.866667 + value: {x: 1.058208, y: 0.739132, z: -0.662713} + - time: 4.000000 + value: {x: 1.052975, y: 0.741793, z: -0.660854} + - time: 4.033333 + value: {x: 1.051504, y: 0.742630, z: -0.660081} + - time: 4.066667 + value: {x: 1.050150, y: 0.743299, z: -0.659716} + - time: 4.100000 + value: {x: 1.048836, y: 0.744197, z: -0.659035} + - time: 4.133333 + value: {x: 1.047638, y: 0.744926, z: -0.658760} + - time: 4.200000 + value: {x: 1.045413, y: 0.746784, z: -0.657781} + - time: 4.333333 + value: {x: 1.041518, y: 0.750553, z: -0.656639} + - time: 4.400000 + value: {x: 1.039656, y: 0.752752, z: -0.655866} + - time: 4.433333 + value: {x: 1.038888, y: 0.753747, z: -0.655832} + - time: 4.533333 + value: {x: 1.037032, y: 0.757367, z: -0.655204} + - time: 4.566667 + value: {x: 1.036619, y: 0.758494, z: -0.655357} + - time: 4.600000 + value: {x: 1.036254, y: 0.759861, z: -0.655178} + - time: 4.700000 + value: {x: 1.035758, y: 0.763850, z: -0.655505} + - time: 4.766666 + value: {x: 1.035901, y: 0.766570, z: -0.656165} + - time: 4.833333 + value: {x: 1.036371, y: 0.769628, z: -0.656661} + - time: 4.933333 + value: {x: 1.037805, y: 0.774335, z: -0.658058} + - time: 5.333333 + value: {x: 1.046967, y: 0.793850, z: -0.665327} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.491594, y: 0.491594, z: 0.491594} + - time: 0.166667 + value: {x: 0.525667, y: 0.525667, z: 0.525667} + - time: 0.333333 + value: {x: 0.560713, y: 0.560713, z: 0.560713} + - time: 0.500000 + value: {x: 0.596725, y: 0.596725, z: 0.596725} + - time: 0.666667 + value: {x: 0.633693, y: 0.633693, z: 0.633693} + - time: 0.833333 + value: {x: 0.671609, y: 0.671609, z: 0.671609} + - time: 1.000000 + value: {x: 0.710465, y: 0.710465, z: 0.710465} + - time: 1.166667 + value: {x: 0.750254, y: 0.750254, z: 0.750254} + - time: 1.333333 + value: {x: 0.790969, y: 0.790969, z: 0.790969} + - time: 1.500000 + value: {x: 0.832603, y: 0.832603, z: 0.832603} + - time: 1.666667 + value: {x: 0.875148, y: 0.875148, z: 0.875148} + - time: 1.833333 + value: {x: 0.918599, y: 0.918599, z: 0.918599} + - time: 2.000000 + value: {x: 0.962949, y: 0.962949, z: 0.962949} + - time: 2.166667 + value: {x: 1.008192, y: 1.008192, z: 1.008192} + - time: 2.333333 + value: {x: 1.054323, y: 1.054323, z: 1.054323} + - time: 2.500000 + value: {x: 1.101335, y: 1.101335, z: 1.101335} + - time: 2.666667 + value: {x: 1.149223, y: 1.149223, z: 1.149223} + - time: 2.833333 + value: {x: 1.197983, y: 1.197983, z: 1.197983} + - time: 3.000000 + value: {x: 1.247608, y: 1.247608, z: 1.247608} + - time: 3.166667 + value: {x: 1.298094, y: 1.298094, z: 1.298094} + - time: 3.333333 + value: {x: 1.349436, y: 1.349436, z: 1.349436} + - time: 3.500000 + value: {x: 1.401629, y: 1.401629, z: 1.401629} + - time: 3.666667 + value: {x: 1.454668, y: 1.454668, z: 1.454668} + - time: 3.833333 + value: {x: 1.508549, y: 1.508549, z: 1.508549} + - time: 4.000000 + value: {x: 1.563269, y: 1.563269, z: 1.563269} + - time: 4.166667 + value: {x: 1.618821, y: 1.618821, z: 1.618821} + - time: 4.333333 + value: {x: 1.675203, y: 1.675203, z: 1.675203} + - time: 4.500000 + value: {x: 1.732410, y: 1.732410, z: 1.732410} + - time: 4.666667 + value: {x: 1.790439, y: 1.790439, z: 1.790439} + - time: 4.833333 + value: {x: 1.849285, y: 1.849285, z: 1.849285} + - time: 5.000000 + value: {x: 1.908944, y: 1.908944, z: 1.908944} + - time: 5.166667 + value: {x: 1.969414, y: 1.969414, z: 1.969414} + - time: 5.333333 + value: {x: 2.030689, y: 2.030689, z: 2.030689} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_5: + position: + - time: 0.000000 + value: {x: -0.039630, y: 0.457204, z: -0.005600} + - time: 0.033333 + value: {x: -0.039790, y: 0.457202, z: -0.005625} + - time: 0.066667 + value: {x: -0.061731, y: 0.281783, z: -0.009267} + - time: 0.100000 + value: {x: -0.079780, y: 0.160109, z: -0.014312} + - time: 0.133333 + value: {x: -0.095100, y: 0.083964, z: -0.020278} + - time: 0.166667 + value: {x: -0.108340, y: 0.041942, z: -0.026961} + - time: 0.200000 + value: {x: -0.119836, y: 0.020873, z: -0.034356} + - time: 0.233333 + value: {x: -0.129594, y: 0.009908, z: -0.042859} + - time: 0.266667 + value: {x: -0.136816, y: 0.004730, z: -0.054111} + - time: 0.300000 + value: {x: -0.140664, y: 0.002325, z: -0.069703} + - time: 0.333333 + value: {x: -0.140491, y: 0.001311, z: -0.090853} + - time: 0.366667 + value: {x: -0.135718, y: 0.001371, z: -0.118765} + - time: 0.400000 + value: {x: -0.126443, y: 0.002440, z: -0.153299} + - time: 0.433333 + value: {x: -0.115563, y: 0.004543, z: -0.189718} + - time: 0.466667 + value: {x: -0.106314, y: 0.007732, z: -0.222806} + - time: 0.500000 + value: {x: -0.100431, y: 0.012326, z: -0.249618} + - time: 0.533333 + value: {x: -0.096980, y: 0.018529, z: -0.271859} + - time: 0.566667 + value: {x: -0.095171, y: 0.026765, z: -0.290893} + - time: 0.600000 + value: {x: -0.094997, y: 0.036978, z: -0.306709} + - time: 0.633333 + value: {x: -0.097331, y: 0.049109, z: -0.317867} + - time: 0.666667 + value: {x: -0.102589, y: 0.062516, z: -0.323807} + - time: 0.700000 + value: {x: -0.110753, y: 0.075070, z: -0.324529} + - time: 0.733333 + value: {x: -0.121111, y: 0.084098, z: -0.321301} + - time: 0.766667 + value: {x: -0.133101, y: 0.087425, z: -0.314936} + - time: 0.800000 + value: {x: -0.145112, y: 0.084862, z: -0.308337} + - time: 0.833333 + value: {x: -0.155607, y: 0.077087, z: -0.303862} + - time: 0.866667 + value: {x: -0.163222, y: 0.064563, z: -0.304014} + - time: 0.900000 + value: {x: -0.167850, y: 0.049622, z: -0.308844} + - time: 0.933333 + value: {x: -0.169763, y: 0.034732, z: -0.317946} + - time: 0.966667 + value: {x: -0.168879, y: 0.021882, z: -0.331447} + - time: 1.000000 + value: {x: -0.163425, y: 0.011721, z: -0.352370} + - time: 1.033333 + value: {x: -0.151033, y: 0.004386, z: -0.384563} + - time: 1.066667 + value: {x: -0.129671, y: -0.000218, z: -0.431552} + - time: 1.100000 + value: {x: -0.099939, y: -0.002326, z: -0.492254} + - time: 1.133333 + value: {x: -0.065019, y: -0.002598, z: -0.561433} + - time: 1.166667 + value: {x: -0.027949, y: -0.001626, z: -0.634051} + - time: 1.200000 + value: {x: 0.008694, y: 0.000202, z: -0.705755} + - time: 1.233333 + value: {x: 0.043088, y: 0.002884, z: -0.773483} + - time: 1.266667 + value: {x: 0.073804, y: 0.006485, z: -0.835049} + - time: 1.300000 + value: {x: 0.099584, y: 0.011300, z: -0.888140} + - time: 1.333333 + value: {x: 0.120148, y: 0.017132, z: -0.932468} + - time: 1.366667 + value: {x: 0.135256, y: 0.023992, z: -0.967588} + - time: 1.400000 + value: {x: 0.146484, y: 0.031365, z: -0.996159} + - time: 1.433333 + value: {x: 0.154017, y: 0.039212, z: -1.018395} + - time: 1.466667 + value: {x: 0.159041, y: 0.047124, z: -1.036330} + - time: 1.500000 + value: {x: 0.162014, y: 0.054989, z: -1.050666} + - time: 1.533333 + value: {x: 0.163333, y: 0.062644, z: -1.062260} + - time: 1.566667 + value: {x: 0.163310, y: 0.070281, z: -1.071366} + - time: 1.600000 + value: {x: 0.162317, y: 0.077709, z: -1.078852} + - time: 1.633333 + value: {x: 0.160505, y: 0.085049, z: -1.084823} + - time: 1.666667 + value: {x: 0.158052, y: 0.092261, z: -1.089633} + - time: 1.700000 + value: {x: 0.155089, y: 0.099346, z: -1.093505} + - time: 1.733333 + value: {x: 0.151656, y: 0.106344, z: -1.096484} + - time: 1.766667 + value: {x: 0.147769, y: 0.113230, z: -1.098619} + - time: 1.800000 + value: {x: 0.143465, y: 0.119992, z: -1.099964} + - time: 1.833333 + value: {x: 0.138761, y: 0.126641, z: -1.100531} + - time: 1.866667 + value: {x: 0.133732, y: 0.133074, z: -1.100578} + - time: 1.900000 + value: {x: 0.128113, y: 0.139554, z: -1.099369} + - time: 1.933333 + value: {x: 0.122150, y: 0.145791, z: -1.097657} + - time: 1.966667 + value: {x: 0.115902, y: 0.151910, z: -1.095356} + - time: 2.000000 + value: {x: 0.109170, y: 0.157960, z: -1.092122} + - time: 2.033333 + value: {x: 0.102075, y: 0.163866, z: -1.088210} + - time: 2.066667 + value: {x: 0.094839, y: 0.169608, z: -1.083990} + - time: 2.100000 + value: {x: 0.087111, y: 0.175145, z: -1.078793} + - time: 2.133333 + value: {x: 0.079397, y: 0.180314, z: -1.073696} + - time: 2.166667 + value: {x: 0.071468, y: 0.185196, z: -1.068102} + - time: 2.200000 + value: {x: 0.063438, y: 0.189774, z: -1.062168} + - time: 2.233333 + value: {x: 0.055428, y: 0.193874, z: -1.056394} + - time: 2.266667 + value: {x: 0.047311, y: 0.197619, z: -1.050180} + - time: 2.300000 + value: {x: 0.039258, y: 0.200996, z: -1.044088} + - time: 2.366667 + value: {x: 0.023232, y: 0.206291, z: -1.031845} + - time: 2.400000 + value: {x: 0.015337, y: 0.208208, z: -1.025880} + - time: 2.433333 + value: {x: 0.007483, y: 0.209798, z: -1.019790} + - time: 2.466667 + value: {x: -0.000244, y: 0.211024, z: -1.013891} + - time: 2.500000 + value: {x: -0.007877, y: 0.211599, z: -1.008111} + - time: 2.533333 + value: {x: -0.015361, y: 0.212110, z: -1.002582} + - time: 2.600000 + value: {x: -0.030035, y: 0.211607, z: -0.991725} + - time: 2.633333 + value: {x: -0.037192, y: 0.211046, z: -0.986487} + - time: 2.666667 + value: {x: -0.044251, y: 0.210191, z: -0.981268} + - time: 2.700000 + value: {x: -0.051171, y: 0.209287, z: -0.976320} + - time: 2.766667 + value: {x: -0.064619, y: 0.206529, z: -0.966884} + - time: 2.800000 + value: {x: -0.071152, y: 0.205064, z: -0.962499} + - time: 2.833333 + value: {x: -0.077573, y: 0.203310, z: -0.958074} + - time: 2.900000 + value: {x: -0.090074, y: 0.199762, z: -0.949769} + - time: 2.966667 + value: {x: -0.102037, y: 0.195644, z: -0.942158} + - time: 3.033333 + value: {x: -0.113573, y: 0.191484, z: -0.935063} + - time: 3.066667 + value: {x: -0.119141, y: 0.189259, z: -0.931766} + - time: 3.133333 + value: {x: -0.130003, y: 0.184878, z: -0.925599} + - time: 3.233333 + value: {x: -0.145502, y: 0.178162, z: -0.917067} + - time: 3.300000 + value: {x: -0.155445, y: 0.173723, z: -0.911833} + - time: 3.366667 + value: {x: -0.165096, y: 0.169316, z: -0.906914} + - time: 3.500000 + value: {x: -0.183789, y: 0.160774, z: -0.897549} + - time: 3.666667 + value: {x: -0.206159, y: 0.150739, z: -0.886617} + - time: 3.733333 + value: {x: -0.214802, y: 0.147097, z: -0.882338} + - time: 3.766667 + value: {x: -0.219009, y: 0.145229, z: -0.880486} + - time: 3.800000 + value: {x: -0.223370, y: 0.143516, z: -0.878125} + - time: 3.833333 + value: {x: -0.227612, y: 0.141726, z: -0.876096} + - time: 3.933333 + value: {x: -0.240020, y: 0.136901, z: -0.869982} + - time: 3.966667 + value: {x: -0.243984, y: 0.135296, z: -0.868284} + - time: 4.033333 + value: {x: -0.252036, y: 0.132320, z: -0.864391} + - time: 4.066667 + value: {x: -0.256061, y: 0.131003, z: -0.862249} + - time: 4.100000 + value: {x: -0.259942, y: 0.129544, z: -0.860564} + - time: 4.133333 + value: {x: -0.263827, y: 0.128328, z: -0.858577} + - time: 4.166667 + value: {x: -0.267605, y: 0.127069, z: -0.856855} + - time: 4.200000 + value: {x: -0.271271, y: 0.125749, z: -0.855428} + - time: 4.233333 + value: {x: -0.274937, y: 0.124659, z: -0.853722} + - time: 4.300000 + value: {x: -0.282050, y: 0.122401, z: -0.850865} + - time: 4.333333 + value: {x: -0.285687, y: 0.121454, z: -0.849088} + - time: 4.400000 + value: {x: -0.292632, y: 0.119446, z: -0.846327} + - time: 4.433333 + value: {x: -0.296048, y: 0.118663, z: -0.844790} + - time: 4.500000 + value: {x: -0.302559, y: 0.116999, z: -0.842470} + - time: 4.533333 + value: {x: -0.305675, y: 0.116168, z: -0.841590} + - time: 4.566667 + value: {x: -0.308787, y: 0.115574, z: -0.840427} + - time: 4.600000 + value: {x: -0.311747, y: 0.114824, z: -0.839759} + - time: 4.666667 + value: {x: -0.317560, y: 0.113782, z: -0.838086} + - time: 4.700000 + value: {x: -0.320292, y: 0.113171, z: -0.837710} + - time: 4.766666 + value: {x: -0.325653, y: 0.112415, z: -0.836605} + - time: 4.833333 + value: {x: -0.330639, y: 0.111662, z: -0.836261} + - time: 4.900000 + value: {x: -0.335382, y: 0.111269, z: -0.835981} + - time: 5.000000 + value: {x: -0.341850, y: 0.110868, z: -0.836681} + - time: 5.333333 + value: {x: -0.361339, y: 0.110607, z: -0.839778} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.491594, y: 0.491594, z: 0.491594} + - time: 0.166667 + value: {x: 0.525667, y: 0.525667, z: 0.525667} + - time: 0.333333 + value: {x: 0.560713, y: 0.560713, z: 0.560713} + - time: 0.500000 + value: {x: 0.596725, y: 0.596725, z: 0.596725} + - time: 0.666667 + value: {x: 0.633693, y: 0.633693, z: 0.633693} + - time: 0.833333 + value: {x: 0.671609, y: 0.671609, z: 0.671609} + - time: 1.000000 + value: {x: 0.710465, y: 0.710465, z: 0.710465} + - time: 1.166667 + value: {x: 0.750254, y: 0.750254, z: 0.750254} + - time: 1.333333 + value: {x: 0.790969, y: 0.790969, z: 0.790969} + - time: 1.500000 + value: {x: 0.832603, y: 0.832603, z: 0.832603} + - time: 1.666667 + value: {x: 0.875148, y: 0.875148, z: 0.875148} + - time: 1.833333 + value: {x: 0.918599, y: 0.918599, z: 0.918599} + - time: 2.000000 + value: {x: 0.962949, y: 0.962949, z: 0.962949} + - time: 2.166667 + value: {x: 1.008192, y: 1.008192, z: 1.008192} + - time: 2.333333 + value: {x: 1.054323, y: 1.054323, z: 1.054323} + - time: 2.500000 + value: {x: 1.101335, y: 1.101335, z: 1.101335} + - time: 2.666667 + value: {x: 1.149223, y: 1.149223, z: 1.149223} + - time: 2.833333 + value: {x: 1.197983, y: 1.197983, z: 1.197983} + - time: 3.000000 + value: {x: 1.247608, y: 1.247608, z: 1.247608} + - time: 3.166667 + value: {x: 1.298094, y: 1.298094, z: 1.298094} + - time: 3.333333 + value: {x: 1.349436, y: 1.349436, z: 1.349436} + - time: 3.500000 + value: {x: 1.401629, y: 1.401629, z: 1.401629} + - time: 3.666667 + value: {x: 1.454668, y: 1.454668, z: 1.454668} + - time: 3.833333 + value: {x: 1.508549, y: 1.508549, z: 1.508549} + - time: 4.000000 + value: {x: 1.563269, y: 1.563269, z: 1.563269} + - time: 4.166667 + value: {x: 1.618821, y: 1.618821, z: 1.618821} + - time: 4.333333 + value: {x: 1.675203, y: 1.675203, z: 1.675203} + - time: 4.500000 + value: {x: 1.732410, y: 1.732410, z: 1.732410} + - time: 4.666667 + value: {x: 1.790439, y: 1.790439, z: 1.790439} + - time: 4.833333 + value: {x: 1.849285, y: 1.849285, z: 1.849285} + - time: 5.000000 + value: {x: 1.908944, y: 1.908944, z: 1.908944} + - time: 5.166667 + value: {x: 1.969414, y: 1.969414, z: 1.969414} + - time: 5.333333 + value: {x: 2.030689, y: 2.030689, z: 2.030689} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_6: + position: + - time: 0.000000 + value: {x: 0.033163, y: 0.462666, z: 0.021890} + - time: 0.033333 + value: {x: 0.033300, y: 0.462686, z: 0.021977} + - time: 0.066667 + value: {x: 0.052211, y: 0.290333, z: 0.033762} + - time: 0.100000 + value: {x: 0.069856, y: 0.171329, z: 0.042198} + - time: 0.133333 + value: {x: 0.086546, y: 0.097582, z: 0.048321} + - time: 0.166667 + value: {x: 0.102519, y: 0.057755, z: 0.052669} + - time: 0.200000 + value: {x: 0.118010, y: 0.038710, z: 0.055465} + - time: 0.233333 + value: {x: 0.133424, y: 0.029631, z: 0.056469} + - time: 0.266667 + value: {x: 0.149871, y: 0.026238, z: 0.054155} + - time: 0.300000 + value: {x: 0.168398, y: 0.025515, z: 0.047012} + - time: 0.333333 + value: {x: 0.189806, y: 0.026073, z: 0.033884} + - time: 0.366667 + value: {x: 0.214883, y: 0.027674, z: 0.013637} + - time: 0.400000 + value: {x: 0.243586, y: 0.030202, z: -0.013560} + - time: 0.433333 + value: {x: 0.273104, y: 0.033684, z: -0.042938} + - time: 0.466667 + value: {x: 0.300345, y: 0.038241, z: -0.069234} + - time: 0.500000 + value: {x: 0.323554, y: 0.044114, z: -0.089500} + - time: 0.533333 + value: {x: 0.343788, y: 0.051577, z: -0.105403} + - time: 0.566667 + value: {x: 0.361886, y: 0.061057, z: -0.118288} + - time: 0.600000 + value: {x: 0.377854, y: 0.072459, z: -0.128142} + - time: 0.633333 + value: {x: 0.390836, y: 0.085710, z: -0.133511} + - time: 0.666667 + value: {x: 0.400523, y: 0.100241, z: -0.133808} + - time: 0.700000 + value: {x: 0.406917, y: 0.113884, z: -0.129031} + - time: 0.733333 + value: {x: 0.410798, y: 0.124006, z: -0.120430} + - time: 0.766667 + value: {x: 0.412650, y: 0.128340, z: -0.108833} + - time: 0.800000 + value: {x: 0.414244, y: 0.126831, z: -0.097100} + - time: 0.833333 + value: {x: 0.416984, y: 0.120013, z: -0.087622} + - time: 0.866667 + value: {x: 0.422402, y: 0.108495, z: -0.082857} + - time: 0.900000 + value: {x: 0.430520, y: 0.094517, z: -0.082874} + - time: 0.933333 + value: {x: 0.441104, y: 0.080567, z: -0.087258} + - time: 0.966667 + value: {x: 0.454232, y: 0.068622, z: -0.096131} + - time: 1.000000 + value: {x: 0.471732, y: 0.059374, z: -0.112507} + - time: 1.033333 + value: {x: 0.495911, y: 0.052890, z: -0.140244} + - time: 1.066667 + value: {x: 0.528904, y: 0.049167, z: -0.182843} + - time: 1.100000 + value: {x: 0.570054, y: 0.047905, z: -0.239230} + - time: 1.133333 + value: {x: 0.616225, y: 0.048484, z: -0.304163} + - time: 1.166667 + value: {x: 0.664392, y: 0.050318, z: -0.372593} + - time: 1.200000 + value: {x: 0.711937, y: 0.052971, z: -0.440181} + - time: 1.233333 + value: {x: 0.757020, y: 0.056414, z: -0.503867} + - time: 1.266667 + value: {x: 0.798346, y: 0.060843, z: -0.561430} + - time: 1.300000 + value: {x: 0.834508, y: 0.066399, z: -0.610596} + - time: 1.333333 + value: {x: 0.865349, y: 0.073002, z: -0.651042} + - time: 1.366667 + value: {x: 0.890602, y: 0.080633, z: -0.682332} + - time: 1.400000 + value: {x: 0.911868, y: 0.088793, z: -0.707117} + - time: 1.433333 + value: {x: 0.929269, y: 0.097379, z: -0.725627} + - time: 1.466667 + value: {x: 0.944032, y: 0.106020, z: -0.739883} + - time: 1.500000 + value: {x: 0.956578, y: 0.114562, z: -0.750600} + - time: 1.533333 + value: {x: 0.967437, y: 0.122973, z: -0.758595} + - time: 1.566667 + value: {x: 0.976741, y: 0.131260, z: -0.764172} + - time: 1.600000 + value: {x: 0.985037, y: 0.139404, z: -0.768154} + - time: 1.633333 + value: {x: 0.992372, y: 0.147418, z: -0.770669} + - time: 1.666667 + value: {x: 0.998967, y: 0.155306, z: -0.772061} + - time: 1.700000 + value: {x: 1.004958, y: 0.163068, z: -0.772553} + - time: 1.733333 + value: {x: 1.010369, y: 0.170727, z: -0.772192} + - time: 1.766667 + value: {x: 1.015233, y: 0.178272, z: -0.771022} + - time: 1.800000 + value: {x: 1.019584, y: 0.185686, z: -0.769099} + - time: 1.833333 + value: {x: 1.023425, y: 0.192964, z: -0.766436} + - time: 1.866667 + value: {x: 1.026930, y: 0.200098, z: -0.763271} + - time: 1.900000 + value: {x: 1.029623, y: 0.207142, z: -0.758913} + - time: 1.933333 + value: {x: 1.031993, y: 0.214044, z: -0.754059} + - time: 1.966667 + value: {x: 1.033973, y: 0.220802, z: -0.748655} + - time: 2.000000 + value: {x: 1.035353, y: 0.227454, z: -0.742357} + - time: 2.033333 + value: {x: 1.036293, y: 0.233958, z: -0.735409} + - time: 2.066667 + value: {x: 1.037014, y: 0.240296, z: -0.728184} + - time: 2.100000 + value: {x: 1.037109, y: 0.246369, z: -0.720025} + - time: 2.133333 + value: {x: 1.037248, y: 0.252173, z: -0.711970} + - time: 2.166667 + value: {x: 1.037050, y: 0.257640, z: -0.703456} + - time: 2.200000 + value: {x: 1.036608, y: 0.262727, z: -0.694649} + - time: 2.233333 + value: {x: 1.036252, y: 0.267471, z: -0.685994} + - time: 2.266667 + value: {x: 1.035584, y: 0.271719, z: -0.676960} + - time: 2.300000 + value: {x: 1.034968, y: 0.275654, z: -0.668059} + - time: 2.333333 + value: {x: 1.034368, y: 0.279014, z: -0.659231} + - time: 2.366667 + value: {x: 1.033617, y: 0.282057, z: -0.650276} + - time: 2.400000 + value: {x: 1.033000, y: 0.284560, z: -0.641566} + - time: 2.433333 + value: {x: 1.032269, y: 0.286645, z: -0.632782} + - time: 2.466667 + value: {x: 1.031629, y: 0.288388, z: -0.624203} + - time: 2.500000 + value: {x: 1.031039, y: 0.289493, z: -0.615764} + - time: 2.533333 + value: {x: 1.030578, y: 0.290575, z: -0.607588} + - time: 2.600000 + value: {x: 1.029695, y: 0.291126, z: -0.591527} + - time: 2.633333 + value: {x: 1.029328, y: 0.291072, z: -0.583725} + - time: 2.666667 + value: {x: 1.028940, y: 0.290661, z: -0.575979} + - time: 2.700000 + value: {x: 1.028701, y: 0.290261, z: -0.568508} + - time: 2.766667 + value: {x: 1.028425, y: 0.288484, z: -0.554097} + - time: 2.800000 + value: {x: 1.028462, y: 0.287572, z: -0.547239} + - time: 2.833333 + value: {x: 1.028436, y: 0.286247, z: -0.540392} + - time: 2.900000 + value: {x: 1.028658, y: 0.283640, z: -0.527280} + - time: 2.966667 + value: {x: 1.029209, y: 0.280456, z: -0.514942} + - time: 3.033333 + value: {x: 1.029987, y: 0.277218, z: -0.503197} + - time: 3.066667 + value: {x: 1.030495, y: 0.275446, z: -0.497605} + - time: 3.133333 + value: {x: 1.031716, y: 0.272038, z: -0.486884} + - time: 3.233333 + value: {x: 1.033805, y: 0.266589, z: -0.471703} + - time: 3.333333 + value: {x: 1.036216, y: 0.261199, z: -0.457487} + - time: 3.466667 + value: {x: 1.039637, y: 0.254250, z: -0.439559} + - time: 3.633333 + value: {x: 1.043938, y: 0.246125, z: -0.418248} + - time: 3.733333 + value: {x: 1.046513, y: 0.241660, z: -0.406001} + - time: 3.766667 + value: {x: 1.047508, y: 0.240255, z: -0.402195} + - time: 3.800000 + value: {x: 1.048160, y: 0.238855, z: -0.397933} + - time: 3.933333 + value: {x: 1.051421, y: 0.233725, z: -0.382269} + - time: 3.966667 + value: {x: 1.052409, y: 0.232555, z: -0.378709} + - time: 4.066667 + value: {x: 1.054671, y: 0.229274, z: -0.367250} + - time: 4.100000 + value: {x: 1.055607, y: 0.228259, z: -0.363759} + - time: 4.133333 + value: {x: 1.056319, y: 0.227303, z: -0.360023} + - time: 4.233333 + value: {x: 1.059073, y: 0.224692, z: -0.349936} + - time: 4.300000 + value: {x: 1.061068, y: 0.223172, z: -0.343646} + - time: 4.333333 + value: {x: 1.061818, y: 0.222479, z: -0.340201} + - time: 4.433333 + value: {x: 1.064635, y: 0.220657, z: -0.330923} + - time: 4.566667 + value: {x: 1.069022, y: 0.218865, z: -0.320096} + - time: 4.666667 + value: {x: 1.072723, y: 0.218001, z: -0.313041} + - time: 4.766666 + value: {x: 1.076824, y: 0.217551, z: -0.306956} + - time: 4.800000 + value: {x: 1.078290, y: 0.217494, z: -0.305155} + - time: 4.900000 + value: {x: 1.082927, y: 0.217608, z: -0.300357} + - time: 4.966667 + value: {x: 1.086355, y: 0.217920, z: -0.297844} + - time: 5.333333 + value: {x: 1.104741, y: 0.220603, z: -0.286123} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.491594, y: 0.491594, z: 0.491594} + - time: 0.166667 + value: {x: 0.525667, y: 0.525667, z: 0.525667} + - time: 0.333333 + value: {x: 0.560713, y: 0.560713, z: 0.560713} + - time: 0.500000 + value: {x: 0.596725, y: 0.596725, z: 0.596725} + - time: 0.666667 + value: {x: 0.633693, y: 0.633693, z: 0.633693} + - time: 0.833333 + value: {x: 0.671609, y: 0.671609, z: 0.671609} + - time: 1.000000 + value: {x: 0.710465, y: 0.710465, z: 0.710465} + - time: 1.166667 + value: {x: 0.750254, y: 0.750254, z: 0.750254} + - time: 1.333333 + value: {x: 0.790969, y: 0.790969, z: 0.790969} + - time: 1.500000 + value: {x: 0.832603, y: 0.832603, z: 0.832603} + - time: 1.666667 + value: {x: 0.875148, y: 0.875148, z: 0.875148} + - time: 1.833333 + value: {x: 0.918599, y: 0.918599, z: 0.918599} + - time: 2.000000 + value: {x: 0.962949, y: 0.962949, z: 0.962949} + - time: 2.166667 + value: {x: 1.008192, y: 1.008192, z: 1.008192} + - time: 2.333333 + value: {x: 1.054323, y: 1.054323, z: 1.054323} + - time: 2.500000 + value: {x: 1.101335, y: 1.101335, z: 1.101335} + - time: 2.666667 + value: {x: 1.149223, y: 1.149223, z: 1.149223} + - time: 2.833333 + value: {x: 1.197983, y: 1.197983, z: 1.197983} + - time: 3.000000 + value: {x: 1.247608, y: 1.247608, z: 1.247608} + - time: 3.166667 + value: {x: 1.298094, y: 1.298094, z: 1.298094} + - time: 3.333333 + value: {x: 1.349436, y: 1.349436, z: 1.349436} + - time: 3.500000 + value: {x: 1.401629, y: 1.401629, z: 1.401629} + - time: 3.666667 + value: {x: 1.454668, y: 1.454668, z: 1.454668} + - time: 3.833333 + value: {x: 1.508549, y: 1.508549, z: 1.508549} + - time: 4.000000 + value: {x: 1.563269, y: 1.563269, z: 1.563269} + - time: 4.166667 + value: {x: 1.618821, y: 1.618821, z: 1.618821} + - time: 4.333333 + value: {x: 1.675203, y: 1.675203, z: 1.675203} + - time: 4.500000 + value: {x: 1.732410, y: 1.732410, z: 1.732410} + - time: 4.666667 + value: {x: 1.790439, y: 1.790439, z: 1.790439} + - time: 4.833333 + value: {x: 1.849285, y: 1.849285, z: 1.849285} + - time: 5.000000 + value: {x: 1.908944, y: 1.908944, z: 1.908944} + - time: 5.166667 + value: {x: 1.969414, y: 1.969414, z: 1.969414} + - time: 5.333333 + value: {x: 2.030689, y: 2.030689, z: 2.030689} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_7: + position: + - time: 0.000000 + value: {x: 0.015904, y: 0.491772, z: -0.012272} + - time: 0.033333 + value: {x: 0.015970, y: 0.491910, z: -0.012325} + - time: 0.066667 + value: {x: 0.025193, y: 0.335893, z: -0.019705} + - time: 0.100000 + value: {x: 0.034387, y: 0.231155, z: -0.028057} + - time: 0.133333 + value: {x: 0.043493, y: 0.170204, z: -0.036976} + - time: 0.166667 + value: {x: 0.052535, y: 0.142060, z: -0.046321} + - time: 0.200000 + value: {x: 0.061628, y: 0.133806, z: -0.056191} + - time: 0.233333 + value: {x: 0.071078, y: 0.134790, z: -0.067012} + - time: 0.266667 + value: {x: 0.081899, y: 0.140868, z: -0.080392} + - time: 0.300000 + value: {x: 0.095116, y: 0.149094, z: -0.098020} + - time: 0.333333 + value: {x: 0.111521, y: 0.158125, z: -0.121216} + - time: 0.366667 + value: {x: 0.131758, y: 0.167860, z: -0.150907} + - time: 0.400000 + value: {x: 0.155851, y: 0.178158, z: -0.187214} + - time: 0.433333 + value: {x: 0.180981, y: 0.189075, z: -0.225432} + - time: 0.466667 + value: {x: 0.203927, y: 0.200843, z: -0.260083} + - time: 0.500000 + value: {x: 0.223060, y: 0.213625, z: -0.288581} + - time: 0.533333 + value: {x: 0.239315, y: 0.227799, z: -0.312359} + - time: 0.566667 + value: {x: 0.253516, y: 0.243812, z: -0.332781} + - time: 0.600000 + value: {x: 0.265733, y: 0.261532, z: -0.350027} + - time: 0.633333 + value: {x: 0.275128, y: 0.280882, z: -0.362722} + - time: 0.666667 + value: {x: 0.281268, y: 0.301391, z: -0.370021} + - time: 0.700000 + value: {x: 0.284216, y: 0.320851, z: -0.372094} + - time: 0.733333 + value: {x: 0.284680, y: 0.336691, z: -0.370047} + - time: 0.766667 + value: {x: 0.283300, y: 0.346530, z: -0.365104} + - time: 0.800000 + value: {x: 0.281617, y: 0.350490, z: -0.359595} + - time: 0.833333 + value: {x: 0.281274, y: 0.348933, z: -0.356503} + - time: 0.866667 + value: {x: 0.283558, y: 0.342651, z: -0.357716} + - time: 0.900000 + value: {x: 0.288645, y: 0.333775, z: -0.363685} + - time: 0.933333 + value: {x: 0.296261, y: 0.324824, z: -0.373918} + - time: 0.966667 + value: {x: 0.306506, y: 0.317764, z: -0.388603} + - time: 1.000000 + value: {x: 0.321137, y: 0.313341, z: -0.410588} + - time: 1.033333 + value: {x: 0.342573, y: 0.311540, z: -0.444020} + - time: 1.066667 + value: {x: 0.372796, y: 0.312474, z: -0.492037} + - time: 1.100000 + value: {x: 0.411252, y: 0.315771, z: -0.553827} + - time: 1.133333 + value: {x: 0.454746, y: 0.320853, z: -0.624009} + - time: 1.166667 + value: {x: 0.500237, y: 0.327150, z: -0.697507} + - time: 1.200000 + value: {x: 0.545189, y: 0.334166, z: -0.770185} + - time: 1.233333 + value: {x: 0.587797, y: 0.341850, z: -0.839075} + - time: 1.266667 + value: {x: 0.626558, y: 0.350550, z: -0.901464} + - time: 1.300000 + value: {x: 0.660316, y: 0.360224, z: -0.955683} + - time: 1.333333 + value: {x: 0.688722, y: 0.370936, z: -1.000953} + - time: 1.366667 + value: {x: 0.711557, y: 0.382630, z: -1.036963} + - time: 1.400000 + value: {x: 0.730390, y: 0.394834, z: -1.066294} + - time: 1.433333 + value: {x: 0.745453, y: 0.407364, z: -1.089442} + - time: 1.466667 + value: {x: 0.757907, y: 0.419900, z: -1.108271} + - time: 1.500000 + value: {x: 0.768246, y: 0.432233, z: -1.123676} + - time: 1.533333 + value: {x: 0.776784, y: 0.444493, z: -1.135962} + - time: 1.566667 + value: {x: 0.783952, y: 0.456466, z: -1.146154} + - time: 1.600000 + value: {x: 0.790018, y: 0.468340, z: -1.154405} + - time: 1.633333 + value: {x: 0.795200, y: 0.480003, z: -1.161265} + - time: 1.666667 + value: {x: 0.799655, y: 0.491505, z: -1.166921} + - time: 1.700000 + value: {x: 0.803515, y: 0.502852, z: -1.171590} + - time: 1.733333 + value: {x: 0.806834, y: 0.514044, z: -1.175393} + - time: 1.766667 + value: {x: 0.809620, y: 0.525090, z: -1.178318} + - time: 1.800000 + value: {x: 0.811914, y: 0.535967, z: -1.180443} + - time: 1.833333 + value: {x: 0.813746, y: 0.546653, z: -1.181847} + - time: 1.866667 + value: {x: 0.815137, y: 0.557250, z: -1.182400} + - time: 1.900000 + value: {x: 0.815948, y: 0.567568, z: -1.182223} + - time: 1.933333 + value: {x: 0.816281, y: 0.577837, z: -1.181090} + - time: 1.966667 + value: {x: 0.816279, y: 0.587903, z: -1.179444} + - time: 2.000000 + value: {x: 0.815747, y: 0.597790, z: -1.176991} + - time: 2.033333 + value: {x: 0.814787, y: 0.607504, z: -1.173831} + - time: 2.066667 + value: {x: 0.813623, y: 0.617024, z: -1.170345} + - time: 2.100000 + value: {x: 0.811942, y: 0.626180, z: -1.166102} + - time: 2.133333 + value: {x: 0.810147, y: 0.635165, z: -1.161510} + - time: 2.166667 + value: {x: 0.808110, y: 0.643726, z: -1.156605} + - time: 2.200000 + value: {x: 0.805959, y: 0.651797, z: -1.151641} + - time: 2.233333 + value: {x: 0.803685, y: 0.659660, z: -1.146252} + - time: 2.266667 + value: {x: 0.801333, y: 0.666839, z: -1.140973} + - time: 2.300000 + value: {x: 0.798955, y: 0.673747, z: -1.135566} + - time: 2.333333 + value: {x: 0.796514, y: 0.680122, z: -1.129970} + - time: 2.366667 + value: {x: 0.794116, y: 0.686023, z: -1.124638} + - time: 2.400000 + value: {x: 0.791710, y: 0.691473, z: -1.119151} + - time: 2.433333 + value: {x: 0.789354, y: 0.696368, z: -1.113906} + - time: 2.466667 + value: {x: 0.787054, y: 0.700934, z: -1.108720} + - time: 2.533333 + value: {x: 0.782597, y: 0.708786, z: -1.098485} + - time: 2.600000 + value: {x: 0.778416, y: 0.714866, z: -1.088806} + - time: 2.633333 + value: {x: 0.776444, y: 0.717524, z: -1.084203} + - time: 2.700000 + value: {x: 0.772732, y: 0.722006, z: -1.075508} + - time: 2.800000 + value: {x: 0.767731, y: 0.727258, z: -1.063249} + - time: 2.866667 + value: {x: 0.764837, y: 0.729739, z: -1.055932} + - time: 2.900000 + value: {x: 0.763489, y: 0.730916, z: -1.052564} + - time: 3.000000 + value: {x: 0.759949, y: 0.733704, z: -1.042957} + - time: 3.100000 + value: {x: 0.757115, y: 0.735829, z: -1.034661} + - time: 3.166667 + value: {x: 0.755560, y: 0.737067, z: -1.029719} + - time: 3.266667 + value: {x: 0.753662, y: 0.738737, z: -1.023164} + - time: 3.466667 + value: {x: 0.750741, y: 0.741546, z: -1.011831} + - time: 3.566667 + value: {x: 0.749559, y: 0.743103, z: -1.006731} + - time: 3.666667 + value: {x: 0.748253, y: 0.744784, z: -1.001344} + - time: 3.733333 + value: {x: 0.747559, y: 0.745936, z: -0.998266} + - time: 3.866667 + value: {x: 0.745957, y: 0.748646, z: -0.991529} + - time: 3.966667 + value: {x: 0.745038, y: 0.750914, z: -0.987124} + - time: 4.000000 + value: {x: 0.744751, y: 0.751638, z: -0.985827} + - time: 4.033333 + value: {x: 0.744335, y: 0.752559, z: -0.984039} + - time: 4.066667 + value: {x: 0.744000, y: 0.753309, z: -0.982703} + - time: 4.100000 + value: {x: 0.743669, y: 0.754290, z: -0.981080} + - time: 4.133333 + value: {x: 0.743420, y: 0.755100, z: -0.979907} + - time: 4.200000 + value: {x: 0.742988, y: 0.757122, z: -0.977226} + - time: 4.333333 + value: {x: 0.742436, y: 0.761214, z: -0.972937} + - time: 4.400000 + value: {x: 0.742179, y: 0.763575, z: -0.970653} + - time: 4.433333 + value: {x: 0.742154, y: 0.764647, z: -0.969929} + - time: 4.533333 + value: {x: 0.742291, y: 0.768508, z: -0.967459} + - time: 4.566667 + value: {x: 0.742464, y: 0.769711, z: -0.967083} + - time: 4.600000 + value: {x: 0.742645, y: 0.771159, z: -0.966408} + - time: 4.700000 + value: {x: 0.743549, y: 0.775382, z: -0.965503} + - time: 4.733333 + value: {x: 0.743953, y: 0.776847, z: -0.965398} + - time: 4.800000 + value: {x: 0.744929, y: 0.779809, z: -0.965589} + - time: 4.866667 + value: {x: 0.746074, y: 0.783095, z: -0.965808} + - time: 4.900000 + value: {x: 0.746753, y: 0.784656, z: -0.966309} + - time: 4.966667 + value: {x: 0.748218, y: 0.788152, z: -0.967104} + - time: 5.333333 + value: {x: 0.757128, y: 0.806816, z: -0.974140} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.491594, y: 0.491594, z: 0.491594} + - time: 0.166667 + value: {x: 0.525667, y: 0.525667, z: 0.525667} + - time: 0.333333 + value: {x: 0.560713, y: 0.560713, z: 0.560713} + - time: 0.500000 + value: {x: 0.596725, y: 0.596725, z: 0.596725} + - time: 0.666667 + value: {x: 0.633693, y: 0.633693, z: 0.633693} + - time: 0.833333 + value: {x: 0.671609, y: 0.671609, z: 0.671609} + - time: 1.000000 + value: {x: 0.710465, y: 0.710465, z: 0.710465} + - time: 1.166667 + value: {x: 0.750254, y: 0.750254, z: 0.750254} + - time: 1.333333 + value: {x: 0.790969, y: 0.790969, z: 0.790969} + - time: 1.500000 + value: {x: 0.832603, y: 0.832603, z: 0.832603} + - time: 1.666667 + value: {x: 0.875148, y: 0.875148, z: 0.875148} + - time: 1.833333 + value: {x: 0.918599, y: 0.918599, z: 0.918599} + - time: 2.000000 + value: {x: 0.962949, y: 0.962949, z: 0.962949} + - time: 2.166667 + value: {x: 1.008192, y: 1.008192, z: 1.008192} + - time: 2.333333 + value: {x: 1.054323, y: 1.054323, z: 1.054323} + - time: 2.500000 + value: {x: 1.101335, y: 1.101335, z: 1.101335} + - time: 2.666667 + value: {x: 1.149223, y: 1.149223, z: 1.149223} + - time: 2.833333 + value: {x: 1.197983, y: 1.197983, z: 1.197983} + - time: 3.000000 + value: {x: 1.247608, y: 1.247608, z: 1.247608} + - time: 3.166667 + value: {x: 1.298094, y: 1.298094, z: 1.298094} + - time: 3.333333 + value: {x: 1.349436, y: 1.349436, z: 1.349436} + - time: 3.500000 + value: {x: 1.401629, y: 1.401629, z: 1.401629} + - time: 3.666667 + value: {x: 1.454668, y: 1.454668, z: 1.454668} + - time: 3.833333 + value: {x: 1.508549, y: 1.508549, z: 1.508549} + - time: 4.000000 + value: {x: 1.563269, y: 1.563269, z: 1.563269} + - time: 4.166667 + value: {x: 1.618821, y: 1.618821, z: 1.618821} + - time: 4.333333 + value: {x: 1.675203, y: 1.675203, z: 1.675203} + - time: 4.500000 + value: {x: 1.732410, y: 1.732410, z: 1.732410} + - time: 4.666667 + value: {x: 1.790439, y: 1.790439, z: 1.790439} + - time: 4.833333 + value: {x: 1.849285, y: 1.849285, z: 1.849285} + - time: 5.000000 + value: {x: 1.908944, y: 1.908944, z: 1.908944} + - time: 5.166667 + value: {x: 1.969414, y: 1.969414, z: 1.969414} + - time: 5.333333 + value: {x: 2.030689, y: 2.030689, z: 2.030689} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_8: + position: + - time: 0.000000 + value: {x: -0.000382, y: 0.457730, z: 0.000636} + - time: 0.033333 + value: {x: -0.000382, y: 0.457730, z: 0.000636} + - time: 0.066667 + value: {x: -0.000299, y: 0.282607, z: 0.000497} + - time: 0.100000 + value: {x: 0.000905, y: 0.161182, z: -0.001507} + - time: 0.133333 + value: {x: 0.002848, y: 0.085264, z: -0.004740} + - time: 0.166667 + value: {x: 0.005355, y: 0.043457, z: -0.008913} + - time: 0.200000 + value: {x: 0.008410, y: 0.022582, z: -0.013997} + - time: 0.233333 + value: {x: 0.012227, y: 0.011796, z: -0.020348} + - time: 0.266667 + value: {x: 0.017757, y: 0.006799, z: -0.029553} + - time: 0.300000 + value: {x: 0.025970, y: 0.004559, z: -0.043221} + - time: 0.333333 + value: {x: 0.037613, y: 0.003674, z: -0.062599} + - time: 0.366667 + value: {x: 0.053316, y: 0.003901, z: -0.088733} + - time: 0.400000 + value: {x: 0.073063, y: 0.005112, z: -0.121598} + - time: 0.433333 + value: {x: 0.094013, y: 0.007328, z: -0.156464} + - time: 0.466667 + value: {x: 0.112943, y: 0.010668, z: -0.187969} + - time: 0.500000 + value: {x: 0.128190, y: 0.015363, z: -0.213344} + - time: 0.533333 + value: {x: 0.140689, y: 0.021688, z: -0.234147} + - time: 0.566667 + value: {x: 0.151257, y: 0.030067, z: -0.251735} + - time: 0.600000 + value: {x: 0.159943, y: 0.040399, z: -0.266190} + - time: 0.633333 + value: {x: 0.165897, y: 0.052606, z: -0.276099} + - time: 0.666667 + value: {x: 0.168694, y: 0.066125, z: -0.280754} + - time: 0.700000 + value: {x: 0.168383, y: 0.078779, z: -0.280236} + - time: 0.733333 + value: {x: 0.165675, y: 0.087941, z: -0.275729} + - time: 0.766667 + value: {x: 0.161182, y: 0.091330, z: -0.268251} + - time: 0.800000 + value: {x: 0.156471, y: 0.088904, z: -0.260412} + - time: 0.833333 + value: {x: 0.153150, y: 0.081183, z: -0.254884} + - time: 0.866667 + value: {x: 0.152532, y: 0.068786, z: -0.253856} + - time: 0.900000 + value: {x: 0.154770, y: 0.053944, z: -0.257580} + - time: 0.933333 + value: {x: 0.159592, y: 0.039148, z: -0.265605} + - time: 0.966667 + value: {x: 0.167091, y: 0.026371, z: -0.278086} + - time: 1.000000 + value: {x: 0.179031, y: 0.016308, z: -0.297957} + - time: 1.033333 + value: {x: 0.197813, y: 0.009019, z: -0.329216} + - time: 1.066667 + value: {x: 0.225437, y: 0.004508, z: -0.375191} + - time: 1.100000 + value: {x: 0.261335, y: 0.002471, z: -0.434934} + - time: 1.133333 + value: {x: 0.302315, y: 0.002288, z: -0.503136} + - time: 1.166667 + value: {x: 0.345337, y: 0.003374, z: -0.574738} + - time: 1.200000 + value: {x: 0.387853, y: 0.005288, z: -0.645495} + - time: 1.233333 + value: {x: 0.428050, y: 0.008001, z: -0.712395} + - time: 1.266667 + value: {x: 0.464453, y: 0.011716, z: -0.772980} + - time: 1.300000 + value: {x: 0.495870, y: 0.016562, z: -0.825266} + - time: 1.333333 + value: {x: 0.521976, y: 0.022468, z: -0.868714} + - time: 1.366667 + value: {x: 0.542544, y: 0.029412, z: -0.902946} + - time: 1.400000 + value: {x: 0.559149, y: 0.036897, z: -0.930580} + - time: 1.433333 + value: {x: 0.572004, y: 0.044814, z: -0.951975} + - time: 1.466667 + value: {x: 0.582279, y: 0.052795, z: -0.969075} + - time: 1.500000 + value: {x: 0.590456, y: 0.060681, z: -0.982684} + - time: 1.533333 + value: {x: 0.596878, y: 0.068451, z: -0.993373} + - time: 1.566667 + value: {x: 0.601936, y: 0.076098, z: -1.001790} + - time: 1.600000 + value: {x: 0.605932, y: 0.083615, z: -1.008440} + - time: 1.633333 + value: {x: 0.609063, y: 0.091008, z: -1.013651} + - time: 1.666667 + value: {x: 0.611492, y: 0.098281, z: -1.017693} + - time: 1.700000 + value: {x: 0.613351, y: 0.105437, z: -1.020787} + - time: 1.733333 + value: {x: 0.614689, y: 0.112495, z: -1.023015} + - time: 1.766667 + value: {x: 0.615518, y: 0.119447, z: -1.024395} + - time: 1.800000 + value: {x: 0.615877, y: 0.126275, z: -1.024992} + - time: 1.833333 + value: {x: 0.615793, y: 0.132973, z: -1.024851} + - time: 1.866667 + value: {x: 0.615303, y: 0.139537, z: -1.024037} + - time: 1.900000 + value: {x: 0.614226, y: 0.146008, z: -1.022244} + - time: 1.933333 + value: {x: 0.612715, y: 0.152352, z: -1.019730} + - time: 1.966667 + value: {x: 0.610881, y: 0.158555, z: -1.016677} + - time: 2.000000 + value: {x: 0.608531, y: 0.164655, z: -1.012766} + - time: 2.033333 + value: {x: 0.605771, y: 0.170614, z: -1.008173} + - time: 2.066667 + value: {x: 0.602827, y: 0.176413, z: -1.003273} + - time: 2.100000 + value: {x: 0.599370, y: 0.181947, z: -0.997519} + - time: 2.133333 + value: {x: 0.595842, y: 0.187226, z: -0.991647} + - time: 2.166667 + value: {x: 0.592077, y: 0.192169, z: -0.985381} + - time: 2.200000 + value: {x: 0.588199, y: 0.196733, z: -0.978928} + - time: 2.233333 + value: {x: 0.584245, y: 0.200968, z: -0.972348} + - time: 2.266667 + value: {x: 0.580201, y: 0.204703, z: -0.965616} + - time: 2.300000 + value: {x: 0.576158, y: 0.208133, z: -0.958888} + - time: 2.333333 + value: {x: 0.572082, y: 0.210998, z: -0.952104} + - time: 2.366667 + value: {x: 0.568038, y: 0.213542, z: -0.945374} + - time: 2.400000 + value: {x: 0.564025, y: 0.215559, z: -0.938695} + - time: 2.433333 + value: {x: 0.560054, y: 0.217153, z: -0.932087} + - time: 2.466667 + value: {x: 0.556163, y: 0.218414, z: -0.925610} + - time: 2.533333 + value: {x: 0.548582, y: 0.219655, z: -0.912993} + - time: 2.600000 + value: {x: 0.541324, y: 0.219273, z: -0.900914} + - time: 2.633333 + value: {x: 0.537831, y: 0.218758, z: -0.895101} + - time: 2.700000 + value: {x: 0.531106, y: 0.217034, z: -0.883908} + - time: 2.733333 + value: {x: 0.527894, y: 0.215744, z: -0.878563} + - time: 2.800000 + value: {x: 0.521714, y: 0.213014, z: -0.868278} + - time: 2.900000 + value: {x: 0.513165, y: 0.207777, z: -0.854050} + - time: 2.966667 + value: {x: 0.507957, y: 0.203742, z: -0.845382} + - time: 3.033333 + value: {x: 0.503060, y: 0.199670, z: -0.837232} + - time: 3.133333 + value: {x: 0.496355, y: 0.193269, z: -0.826074} + - time: 3.233333 + value: {x: 0.490394, y: 0.186618, z: -0.816153} + - time: 3.333333 + value: {x: 0.484878, y: 0.180061, z: -0.806972} + - time: 3.466667 + value: {x: 0.478021, y: 0.171600, z: -0.795560} + - time: 3.633333 + value: {x: 0.469934, y: 0.161650, z: -0.782102} + - time: 3.800000 + value: {x: 0.462257, y: 0.152631, z: -0.769324} + - time: 3.900000 + value: {x: 0.457759, y: 0.147693, z: -0.761838} + - time: 4.033333 + value: {x: 0.452131, y: 0.141769, z: -0.752473} + - time: 4.133333 + value: {x: 0.448024, y: 0.137780, z: -0.745638} + - time: 4.233333 + value: {x: 0.444370, y: 0.134232, z: -0.739557} + - time: 4.366667 + value: {x: 0.439781, y: 0.130147, z: -0.731919} + - time: 4.466667 + value: {x: 0.436715, y: 0.127574, z: -0.726816} + - time: 4.566667 + value: {x: 0.434163, y: 0.125431, z: -0.722568} + - time: 4.666667 + value: {x: 0.432124, y: 0.123720, z: -0.719175} + - time: 4.766666 + value: {x: 0.430603, y: 0.122444, z: -0.716644} + - time: 4.866667 + value: {x: 0.429607, y: 0.121608, z: -0.714987} + - time: 4.966667 + value: {x: 0.429149, y: 0.121224, z: -0.714224} + - time: 5.333333 + value: {x: 0.429118, y: 0.121198, z: -0.714172} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.493883, y: 0.493883, z: 0.493883} + - time: 0.166667 + value: {x: 0.529612, y: 0.529612, z: 0.529612} + - time: 0.300000 + value: {x: 0.558962, y: 0.558962, z: 0.558962} + - time: 0.433333 + value: {x: 0.588988, y: 0.588988, z: 0.588988} + - time: 0.566667 + value: {x: 0.619684, y: 0.619684, z: 0.619684} + - time: 0.700000 + value: {x: 0.651047, y: 0.651047, z: 0.651047} + - time: 0.833333 + value: {x: 0.683070, y: 0.683070, z: 0.683070} + - time: 0.966667 + value: {x: 0.715751, y: 0.715751, z: 0.715751} + - time: 1.100000 + value: {x: 0.749084, y: 0.749084, z: 0.749084} + - time: 1.233333 + value: {x: 0.783065, y: 0.783065, z: 0.783065} + - time: 1.366667 + value: {x: 0.817690, y: 0.817690, z: 0.817690} + - time: 1.500000 + value: {x: 0.852955, y: 0.852955, z: 0.852955} + - time: 1.666667 + value: {x: 0.897930, y: 0.897930, z: 0.897930} + - time: 1.833333 + value: {x: 0.943893, y: 0.943893, z: 0.943893} + - time: 2.000000 + value: {x: 0.990835, y: 0.990835, z: 0.990835} + - time: 2.166667 + value: {x: 1.038750, y: 1.038750, z: 1.038750} + - time: 2.333333 + value: {x: 1.087632, y: 1.087632, z: 1.087632} + - time: 2.500000 + value: {x: 1.137474, y: 1.137474, z: 1.137474} + - time: 2.666667 + value: {x: 1.188270, y: 1.188270, z: 1.188270} + - time: 2.833333 + value: {x: 1.240014, y: 1.240014, z: 1.240014} + - time: 3.000000 + value: {x: 1.292700, y: 1.292700, z: 1.292700} + - time: 3.166667 + value: {x: 1.346323, y: 1.346323, z: 1.346323} + - time: 3.333333 + value: {x: 1.400878, y: 1.400878, z: 1.400878} + - time: 3.500000 + value: {x: 1.456358, y: 1.456358, z: 1.456358} + - time: 3.666667 + value: {x: 1.512760, y: 1.512760, z: 1.512760} + - time: 3.833333 + value: {x: 1.570077, y: 1.570077, z: 1.570077} + - time: 4.000000 + value: {x: 1.628306, y: 1.628306, z: 1.628306} + - time: 4.166667 + value: {x: 1.687441, y: 1.687441, z: 1.687441} + - time: 4.333333 + value: {x: 1.747478, y: 1.747478, z: 1.747478} + - time: 4.500000 + value: {x: 1.808412, y: 1.808412, z: 1.808412} + - time: 4.666667 + value: {x: 1.870239, y: 1.870239, z: 1.870239} + - time: 4.833333 + value: {x: 1.932955, y: 1.932955, z: 1.932955} + - time: 5.000000 + value: {x: 1.996554, y: 1.996554, z: 1.996554} + - time: 5.166667 + value: {x: 2.061035, y: 2.061035, z: 2.061035} + - time: 5.333333 + value: {x: 2.126391, y: 2.126391, z: 2.126391} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] + point_9: + position: + - time: 0.000000 + value: {x: -0.029529, y: 0.457335, z: -0.003947} + - time: 0.033333 + value: {x: -0.029674, y: 0.457333, z: -0.003970} + - time: 0.066667 + value: {x: -0.046284, y: 0.281986, z: -0.006774} + - time: 0.100000 + value: {x: -0.060774, y: 0.160373, z: -0.011410} + - time: 0.133333 + value: {x: -0.073750, y: 0.084284, z: -0.017250} + - time: 0.166667 + value: {x: -0.085574, y: 0.042313, z: -0.024022} + - time: 0.200000 + value: {x: -0.096485, y: 0.021290, z: -0.031709} + - time: 0.233333 + value: {x: -0.106636, y: 0.010368, z: -0.040756} + - time: 0.266667 + value: {x: -0.116094, y: 0.005233, z: -0.053054} + - time: 0.300000 + value: {x: -0.124907, y: 0.002867, z: -0.070466} + - time: 0.333333 + value: {x: -0.133112, y: 0.001883, z: -0.094425} + - time: 0.366667 + value: {x: -0.140712, y: 0.001982, z: -0.126269} + - time: 0.400000 + value: {x: -0.147773, y: 0.003083, z: -0.165882} + - time: 0.433333 + value: {x: -0.154477, y: 0.005212, z: -0.207743} + - time: 0.466667 + value: {x: -0.160999, y: 0.008435, z: -0.245708} + - time: 0.500000 + value: {x: -0.167477, y: 0.013052, z: -0.276415} + - time: 0.533333 + value: {x: -0.173865, y: 0.019282, z: -0.301793} + - time: 0.566667 + value: {x: -0.180140, y: 0.027550, z: -0.323427} + - time: 0.600000 + value: {x: -0.186329, y: 0.037789, z: -0.341346} + - time: 0.633333 + value: {x: -0.192497, y: 0.049936, z: -0.353878} + - time: 0.666667 + value: {x: -0.198654, y: 0.063368, z: -0.360312} + - time: 0.700000 + value: {x: -0.204823, y: 0.075944, z: -0.360680} + - time: 0.733333 + value: {x: -0.210966, y: 0.085001, z: -0.356426} + - time: 0.766667 + value: {x: -0.217090, y: 0.088341, z: -0.348582} + - time: 0.800000 + value: {x: -0.223081, y: 0.085807, z: -0.340415} + - time: 0.833333 + value: {x: -0.228911, y: 0.078043, z: -0.334801} + - time: 0.866667 + value: {x: -0.234475, y: 0.065547, z: -0.334534} + - time: 0.900000 + value: {x: -0.239799, y: 0.050626, z: -0.339752} + - time: 0.933333 + value: {x: -0.244897, y: 0.035755, z: -0.349966} + - time: 0.966667 + value: {x: -0.249772, y: 0.022920, z: -0.365332} + - time: 1.000000 + value: {x: -0.254328, y: 0.012780, z: -0.389343} + - time: 1.033333 + value: {x: -0.258469, y: 0.005453, z: -0.426546} + - time: 1.066667 + value: {x: -0.262066, y: 0.000868, z: -0.480973} + - time: 1.100000 + value: {x: -0.265174, y: -0.001227, z: -0.551415} + - time: 1.133333 + value: {x: -0.267946, y: -0.001480, z: -0.631737} + - time: 1.166667 + value: {x: -0.270537, y: -0.000485, z: -0.716054} + - time: 1.200000 + value: {x: -0.273096, y: 0.001361, z: -0.799334} + - time: 1.233333 + value: {x: -0.275724, y: 0.004047, z: -0.878025} + - time: 1.266667 + value: {x: -0.278460, y: 0.007671, z: -0.949470} + - time: 1.300000 + value: {x: -0.281414, y: 0.012491, z: -1.011101} + - time: 1.333333 + value: {x: -0.284568, y: 0.018337, z: -1.062482} + - time: 1.366667 + value: {x: -0.287946, y: 0.025213, z: -1.103123} + - time: 1.400000 + value: {x: -0.291463, y: 0.032609, z: -1.136108} + - time: 1.433333 + value: {x: -0.295132, y: 0.040469, z: -1.161743} + - time: 1.466667 + value: {x: -0.298881, y: 0.048394, z: -1.182364} + - time: 1.500000 + value: {x: -0.302704, y: 0.056260, z: -1.198832} + - time: 1.533333 + value: {x: -0.306541, y: 0.063939, z: -1.212032} + - time: 1.566667 + value: {x: -0.310432, y: 0.071576, z: -1.222416} + - time: 1.600000 + value: {x: -0.314310, y: 0.079021, z: -1.230853} + - time: 1.633333 + value: {x: -0.318200, y: 0.086370, z: -1.237554} + - time: 1.666667 + value: {x: -0.322080, y: 0.093593, z: -1.242898} + - time: 1.700000 + value: {x: -0.325946, y: 0.100691, z: -1.247145} + - time: 1.733333 + value: {x: -0.329802, y: 0.107699, z: -1.250361} + - time: 1.766667 + value: {x: -0.333643, y: 0.114596, z: -1.252591} + - time: 1.800000 + value: {x: -0.337470, y: 0.121370, z: -1.253904} + - time: 1.833333 + value: {x: -0.341288, y: 0.128027, z: -1.254325} + - time: 1.866667 + value: {x: -0.345066, y: 0.134486, z: -1.254082} + - time: 1.900000 + value: {x: -0.348879, y: 0.140961, z: -1.252480} + - time: 1.933333 + value: {x: -0.352646, y: 0.147219, z: -1.250209} + - time: 1.966667 + value: {x: -0.356402, y: 0.153353, z: -1.247270} + - time: 2.000000 + value: {x: -0.360161, y: 0.159412, z: -1.243272} + - time: 2.033333 + value: {x: -0.363908, y: 0.165326, z: -1.238482} + - time: 2.066667 + value: {x: -0.367631, y: 0.171078, z: -1.233334} + - time: 2.100000 + value: {x: -0.371366, y: 0.176611, z: -1.227093} + - time: 2.133333 + value: {x: -0.375041, y: 0.181801, z: -1.220887} + - time: 2.166667 + value: {x: -0.378713, y: 0.186694, z: -1.214141} + - time: 2.200000 + value: {x: -0.382382, y: 0.191266, z: -1.207057} + - time: 2.233333 + value: {x: -0.385983, y: 0.195392, z: -1.200049} + - time: 2.266667 + value: {x: -0.389602, y: 0.199132, z: -1.192639} + - time: 2.300000 + value: {x: -0.393175, y: 0.202517, z: -1.185327} + - time: 2.366667 + value: {x: -0.400237, y: 0.207831, z: -1.170634} + - time: 2.400000 + value: {x: -0.403712, y: 0.209766, z: -1.163441} + - time: 2.433333 + value: {x: -0.407187, y: 0.211354, z: -1.156177} + - time: 2.466667 + value: {x: -0.410623, y: 0.212585, z: -1.149113} + - time: 2.500000 + value: {x: -0.414025, y: 0.213168, z: -1.142176} + - time: 2.533333 + value: {x: -0.417383, y: 0.213698, z: -1.135498} + - time: 2.600000 + value: {x: -0.424036, y: 0.213215, z: -1.122445} + - time: 2.633333 + value: {x: -0.427324, y: 0.212660, z: -1.116154} + - time: 2.666667 + value: {x: -0.430602, y: 0.211799, z: -1.109934} + - time: 2.700000 + value: {x: -0.433832, y: 0.210903, z: -1.103980} + - time: 2.766667 + value: {x: -0.440210, y: 0.208157, z: -1.092626} + - time: 2.800000 + value: {x: -0.443337, y: 0.206713, z: -1.087286} + - time: 2.833333 + value: {x: -0.446474, y: 0.204954, z: -1.081996} + - time: 2.900000 + value: {x: -0.452638, y: 0.201416, z: -1.071983} + - time: 2.966667 + value: {x: -0.458693, y: 0.197310, z: -1.062781} + - time: 3.033333 + value: {x: -0.464644, y: 0.193162, z: -1.054182} + - time: 3.066667 + value: {x: -0.467581, y: 0.190942, z: -1.050181} + - time: 3.133333 + value: {x: -0.473360, y: 0.186589, z: -1.042618} + - time: 3.233333 + value: {x: -0.481898, y: 0.179879, z: -1.032256} + - time: 3.333333 + value: {x: -0.490218, y: 0.173218, z: -1.022817} + - time: 3.466667 + value: {x: -0.501017, y: 0.164618, z: -1.011166} + - time: 3.633333 + value: {x: -0.514076, y: 0.154500, z: -0.997478} + - time: 3.733333 + value: {x: -0.521687, y: 0.148887, z: -0.989690} + - time: 3.766667 + value: {x: -0.524159, y: 0.147040, z: -0.987342} + - time: 3.800000 + value: {x: -0.526668, y: 0.145317, z: -0.984516} + - time: 3.900000 + value: {x: -0.534011, y: 0.140282, z: -0.976920} + - time: 3.966667 + value: {x: -0.538792, y: 0.137131, z: -0.972386} + - time: 4.066667 + value: {x: -0.545899, y: 0.132835, z: -0.965052} + - time: 4.133333 + value: {x: -0.550532, y: 0.130168, z: -0.960545} + - time: 4.233333 + value: {x: -0.557337, y: 0.126514, z: -0.954539} + - time: 4.300000 + value: {x: -0.561772, y: 0.124276, z: -0.950946} + - time: 4.333333 + value: {x: -0.564006, y: 0.123315, z: -0.948830} + - time: 4.433333 + value: {x: -0.570525, y: 0.120531, z: -0.943522} + - time: 4.500000 + value: {x: -0.574770, y: 0.118879, z: -0.940595} + - time: 4.566667 + value: {x: -0.578958, y: 0.117457, z: -0.938028} + - time: 4.600000 + value: {x: -0.580992, y: 0.116730, z: -0.937081} + - time: 4.666667 + value: {x: -0.585106, y: 0.115673, z: -0.935016} + - time: 4.700000 + value: {x: -0.587087, y: 0.115085, z: -0.934408} + - time: 4.766666 + value: {x: -0.591098, y: 0.114315, z: -0.933009} + - time: 4.833333 + value: {x: -0.594983, y: 0.113584, z: -0.932365} + - time: 4.900000 + value: {x: -0.598851, y: 0.113184, z: -0.931912} + - time: 4.966667 + value: {x: -0.602606, y: 0.112856, z: -0.932173} + - time: 5.333333 + value: {x: -0.622234, y: 0.112568, z: -0.935232} + rotation: + [] + scale: + - time: 0.000000 + value: {x: 0.493883, y: 0.493883, z: 0.493883} + - time: 0.166667 + value: {x: 0.529612, y: 0.529612, z: 0.529612} + - time: 0.300000 + value: {x: 0.558962, y: 0.558962, z: 0.558962} + - time: 0.433333 + value: {x: 0.588988, y: 0.588988, z: 0.588988} + - time: 0.566667 + value: {x: 0.619684, y: 0.619684, z: 0.619684} + - time: 0.700000 + value: {x: 0.651047, y: 0.651047, z: 0.651047} + - time: 0.833333 + value: {x: 0.683070, y: 0.683070, z: 0.683070} + - time: 0.966667 + value: {x: 0.715751, y: 0.715751, z: 0.715751} + - time: 1.100000 + value: {x: 0.749084, y: 0.749084, z: 0.749084} + - time: 1.233333 + value: {x: 0.783065, y: 0.783065, z: 0.783065} + - time: 1.366667 + value: {x: 0.817690, y: 0.817690, z: 0.817690} + - time: 1.500000 + value: {x: 0.852955, y: 0.852955, z: 0.852955} + - time: 1.666667 + value: {x: 0.897930, y: 0.897930, z: 0.897930} + - time: 1.833333 + value: {x: 0.943893, y: 0.943893, z: 0.943893} + - time: 2.000000 + value: {x: 0.990835, y: 0.990835, z: 0.990835} + - time: 2.166667 + value: {x: 1.038750, y: 1.038750, z: 1.038750} + - time: 2.333333 + value: {x: 1.087632, y: 1.087632, z: 1.087632} + - time: 2.500000 + value: {x: 1.137474, y: 1.137474, z: 1.137474} + - time: 2.666667 + value: {x: 1.188270, y: 1.188270, z: 1.188270} + - time: 2.833333 + value: {x: 1.240014, y: 1.240014, z: 1.240014} + - time: 3.000000 + value: {x: 1.292700, y: 1.292700, z: 1.292700} + - time: 3.166667 + value: {x: 1.346323, y: 1.346323, z: 1.346323} + - time: 3.333333 + value: {x: 1.400878, y: 1.400878, z: 1.400878} + - time: 3.500000 + value: {x: 1.456358, y: 1.456358, z: 1.456358} + - time: 3.666667 + value: {x: 1.512760, y: 1.512760, z: 1.512760} + - time: 3.833333 + value: {x: 1.570077, y: 1.570077, z: 1.570077} + - time: 4.000000 + value: {x: 1.628306, y: 1.628306, z: 1.628306} + - time: 4.166667 + value: {x: 1.687441, y: 1.687441, z: 1.687441} + - time: 4.333333 + value: {x: 1.747478, y: 1.747478, z: 1.747478} + - time: 4.500000 + value: {x: 1.808412, y: 1.808412, z: 1.808412} + - time: 4.666667 + value: {x: 1.870239, y: 1.870239, z: 1.870239} + - time: 4.833333 + value: {x: 1.932955, y: 1.932955, z: 1.932955} + - time: 5.000000 + value: {x: 1.996554, y: 1.996554, z: 1.996554} + - time: 5.166667 + value: {x: 2.061035, y: 2.061035, z: 2.061035} + - time: 5.333333 + value: {x: 2.126391, y: 2.126391, z: 2.126391} + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset.meta new file mode 100644 index 00000000..7fe9d347 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/CloudsStart.animationAsset.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + AnimationAsset: ! cc6b3dd5-1efd-4774-9d22-3a10a77a8e63 + ImporterName: AnimationAssetImporter + PrimaryAsset: ! cc6b3dd5-1efd-4774-9d22-3a10a77a8e63 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh new file mode 100644 index 00000000..a26cebaf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba85fc2594e62d5e13df43f10b580eaa6f1ef2931cd11602ddb74bffe9f6bdb +size 420075 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh.meta new file mode 100644 index 00000000..98f1c82b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Clouds Start/line1.mesh.meta @@ -0,0 +1,24 @@ +- ! + ImportedAssetIds: + FileMesh: ! 458d9a17-559a-44c4-83cc-2ae3ab2df652 + ImporterName: FileMeshImporter + PrimaryAsset: ! 458d9a17-559a-44c4-83cc-2ae3ab2df652 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + boneData: Float + color: UNorm Byte + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab new file mode 100644 index 00000000..58a80933 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab @@ -0,0 +1,34 @@ +- ! + PackagePath: "" + objects: + - ! c9b8fecb-036e-4558-9f6b-cf6c123fc2d6 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -28.166780, z: 0.000092} + rotation: {x: -0.000000, y: -0.000001, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ae63f88f-8ef2-4fa9-b186-e8ea94f583af diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab.meta new file mode 100644 index 00000000..f76f1c81 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Custom Mesh Emitter.prefab.meta @@ -0,0 +1,55 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! c03b943f-3767-48e9-b013-bbe596ca7fef + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! c03b943f-3767-48e9-b013-bbe596ca7fef + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! f9190aff-1aac-4ba1-8e84-b7e67a784665 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: VFX Component + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + VFXAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a +- ! + PackagePath: "" + objects: + - ! ec662a0e-4222-4bac-9241-9431bf0fcd70 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Custom Mesh Emitter + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -28.166780, z: 0.000092} + rotation: {x: -0.000000, y: -0.000001, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b51dc68b-5441-471f-85cb-790c527f2e0c +- ! + SourceRemaps: + - ae63f88f-8ef2-4fa9-b186-e8ea94f583af: b51dc68b-5441-471f-85cb-790c527f2e0c + - c9b8fecb-036e-4558-9f6b-cf6c123fc2d6: ec662a0e-4222-4bac-9241-9431bf0fcd70 + SourceState: ! c7a99275-0dd7-490a-97e5-9bbbb6ece073 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph new file mode 100644 index 00000000..0be1495c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48bb41d4c4ffcb84216064801b0d8f123e4f79702d5574e065bf20dd32ca5a3b +size 1205163 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph.meta new file mode 100644 index 00000000..0490be4d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/Rocket_clouds_emit.vfxgraph.meta @@ -0,0 +1,43 @@ +- ! + ImportedAssetIds: + VFXGraph: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a + ImporterName: VFXAssetImporter + PrimaryAsset: ! 8ac631a7-b459-40f1-9e83-b9793ed5868a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + VFXGraph: ! ad35f612-c784-4da2-958d-c057b1fbb687 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Mesh: ! 10ef60b3-a4f3-4366-8c39-824420df3171 + SystemPassProperties: + 39: ! + FeedbackProperties: + {} + SimulateProperties: + Tweak_N12: + typeIdx: 1 + value: 57.829998 + particle_scale: + typeIdx: 1 + value: 1.580000 + particles_speed: + typeIdx: 1 + value: 800.000000 + particlesReduce: + typeIdx: 1 + value: 1.100000 + RenderProperties: + {} + FeedbackDefines: + [] + SimulateDefines: + [] + RenderDefines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh new file mode 100644 index 00000000..c6cabe07 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9113f9c8d33735bbbfbb8265bb34b702220b10e46c33ca1fe544b805b61f6bce +size 19344 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh.meta new file mode 100644 index 00000000..cba7c6fd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Custom Mesh Emitter/cl_goup.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 10ef60b3-a4f3-4366-8c39-824420df3171 + ImporterName: FileMeshImporter + PrimaryAsset: ! 10ef60b3-a4f3-4366-8c39-824420df3171 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph new file mode 100644 index 00000000..20d90759 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d997235c55d0c8fbfa4fcd37e5c39b41f55bbd197ded887015cc45467034e59b +size 378474 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph.meta new file mode 100644 index 00000000..f82a4269 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! ca27b336-e558-4c79-9d17-7126f6203909 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ca27b336-e558-4c79-9d17-7126f6203909 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat new file mode 100644 index 00000000..3b7d7420 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat @@ -0,0 +1,208 @@ +- ! + PackagePath: "" + PassesInfo: + - ! b94e9897-5493-4f73-afe5-096e8599cb3f +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 2 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Center_N012: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Default_N017: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Default_N042: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + Port_Direction_N013: + typeIdx: 3 + value: {x: 0.000000, y: 2.000000} + Port_Input0_N006: + typeIdx: 1 + value: 0.000000 + Port_Input1_N006: + typeIdx: 1 + value: 0.200000 + Port_Input1_N007: + typeIdx: 1 + value: -1.000000 + Port_Input1_N009: + typeIdx: 1 + value: 2.000000 + Port_Input1_N019: + typeIdx: 1 + value: 2.000000 + Port_Input1_N029: + typeIdx: 1 + value: 0.050000 + Port_Input1_N032: + typeIdx: 1 + value: 1.000000 + Port_Input1_N034: + typeIdx: 1 + value: 1.000000 + Port_Input1_N050: + typeIdx: 1 + value: 0.100000 + Port_Input1_N054: + typeIdx: 1 + value: 0.200000 + Port_Input1_N056: + typeIdx: 1 + value: 0.300000 + Port_Input1_N060: + typeIdx: 1 + value: 30.000000 + Port_Multiplier_N024: + typeIdx: 1 + value: 0.750000 + Port_Position1_N010: + typeIdx: 1 + value: 0.500000 + Port_Position1_N043: + typeIdx: 1 + value: 0.510000 + Port_Position1_N044: + typeIdx: 1 + value: 0.550000 + Port_Position1_N049: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N035: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N038: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N040: + typeIdx: 1 + value: 1.000000 + Port_RangeMinA_N035: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N038: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N040: + typeIdx: 1 + value: 0.000000 + Port_Rotation_N012: + typeIdx: 1 + value: 90.000000 + Port_Speed_N013: + typeIdx: 1 + value: 1.000000 + Port_Value0_N010: + typeIdx: 5 + value: {x: 1.000000, y: 0.683680, z: 0.145296, w: 1.000000} + Port_Value0_N043: + typeIdx: 5 + value: {x: 1.000000, y: 0.563622, z: 0.165759, w: 1.000000} + Port_Value0_N044: + typeIdx: 5 + value: {x: 1.000000, y: 0.366949, z: 0.116960, w: 1.000000} + Port_Value0_N049: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value1_N010: + typeIdx: 5 + value: {x: 1.000000, y: 0.995392, z: 0.937377, w: 1.000000} + Port_Value1_N031: + typeIdx: 1 + value: 0.000000 + Port_Value1_N043: + typeIdx: 5 + value: {x: 1.000000, y: 0.662745, z: 0.090196, w: 1.000000} + Port_Value1_N044: + typeIdx: 5 + value: {x: 1.000000, y: 0.563622, z: 0.165759, w: 1.000000} + Port_Value1_N049: + typeIdx: 5 + value: {x: 1.000000, y: 0.003922, z: 0.000000, w: 1.000000} + Port_Value2_N001: + typeIdx: 1 + value: 1.000000 + Port_Value2_N010: + typeIdx: 5 + value: {x: 1.000000, y: 0.682353, z: 0.145098, w: 1.000000} + Port_Value2_N043: + typeIdx: 5 + value: {x: 1.000000, y: 0.560784, z: 0.164706, w: 1.000000} + Port_Value2_N044: + typeIdx: 5 + value: {x: 1.000000, y: 0.364706, z: 0.113725, w: 1.000000} + Port_Value2_N049: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value2_N059: + typeIdx: 1 + value: 1.000000 + Port_Value3_N059: + typeIdx: 1 + value: 1.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N14: + typeIdx: 9 + value: + id: 5d59c8dd-baf3-4f05-93ac-fbcc2cc40f9d + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + Tweak_N14BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N14Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N14Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N14UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + fire_scale: + typeIdx: 1 + value: 1.000000 + noise_freq: + typeIdx: 1 + value: 27.939999 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + range: + typeIdx: 1 + value: 0.750000 + Pass: ! ca27b336-e558-4c79-9d17-7126f6203909 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat.meta new file mode 100644 index 00000000..3dcd1e18 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Fire_ANIM_mat.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! e90357de-3c89-449a-b286-ef475ca93a50 + ImporterName: MaterialImporter + PrimaryAsset: ! e90357de-3c89-449a-b286-ef475ca93a50 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat new file mode 100644 index 00000000..38c748c7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat @@ -0,0 +1,127 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 0d4f45f9-be50-480c-a432-e101f054b4dc +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Add + Properties: + Port_Center_N006: + typeIdx: 3 + value: {x: 0.500000, y: 1.000000} + Port_Input0_N003: + typeIdx: 1 + value: 0.000000 + Port_Input0_N009: + typeIdx: 1 + value: 0.000000 + Port_Input0_N016: + typeIdx: 1 + value: 1.000000 + Port_Input0_N022: + typeIdx: 1 + value: 0.000000 + Port_Input1_N000: + typeIdx: 3 + value: {x: 0.500000, y: 0.700000} + Port_Input1_N003: + typeIdx: 1 + value: 0.500000 + Port_Input1_N009: + typeIdx: 1 + value: 1.000000 + Port_Input1_N016: + typeIdx: 1 + value: 0.900000 + Port_Input1_N017: + typeIdx: 1 + value: 1.000000 + Port_Input1_N019: + typeIdx: 1 + value: 6.000000 + Port_Input1_N020: + typeIdx: 1 + value: 0.250000 + Port_Input1_N021: + typeIdx: 1 + value: 20.000000 + Port_Input1_N022: + typeIdx: 1 + value: 0.200000 + Port_Multiplier_N012: + typeIdx: 1 + value: 1.000000 + Port_Position1_N005: + typeIdx: 1 + value: 0.230000 + Port_RangeMaxA_N015: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxA_N035: + typeIdx: 1 + value: 1.000000 + Port_RangeMaxB_N015: + typeIdx: 1 + value: 1.100000 + Port_RangeMinA_N015: + typeIdx: 1 + value: 0.000000 + Port_RangeMinA_N035: + typeIdx: 1 + value: 0.000000 + Port_RangeMinB_N015: + typeIdx: 1 + value: 1.000000 + Port_Scale_N006: + typeIdx: 3 + value: {x: 1.000000, y: 0.900000} + Port_Scale_N013: + typeIdx: 3 + value: {x: 10.000000, y: 10.000000} + Port_Value0_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.323110, z: 0.000000, w: 1.000000} + Port_Value1_N005: + typeIdx: 5 + value: {x: 1.000000, y: 0.615808, z: 0.116228, w: 1.000000} + Port_Value1_N018: + typeIdx: 1 + value: 1.000000 + Port_Value2_N005: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Port_Value3_N018: + typeIdx: 1 + value: 1.000000 + Port_ValueIn_N035: + typeIdx: 5 + value: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: -1 + glow_scale: + typeIdx: 1 + value: 1.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 5044e365-8b27-4d44-81c1-2f0238016319 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat.meta new file mode 100644 index 00000000..69d37af6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_ANIM_mat.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 889745a7-9062-432b-b028-bed9c7556fff + ImporterName: MaterialImporter + PrimaryAsset: ! 889745a7-9062-432b-b028-bed9c7556fff + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph new file mode 100644 index 00000000..2009dc38 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97ea069de22a1e6ba57768479e0b070d2994bed121b43ac5717cae87c0fd0b04 +size 148742 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph.meta new file mode 100644 index 00000000..dbed839c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/Glow_MAt.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 5044e365-8b27-4d44-81c1-2f0238016319 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 5044e365-8b27-4d44-81c1-2f0238016319 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh new file mode 100644 index 00000000..a347fbc6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b206a6d61d9920aa69c9e3562b8499044d13eeb1931f2617b12cdab16a6d11b0 +size 26202 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh.meta new file mode 100644 index 00000000..96a34551 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/blendshapes1.mesh.meta @@ -0,0 +1,26 @@ +- ! + ImportedAssetIds: + FileMesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + ImporterName: FileMeshImporter + PrimaryAsset: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + color: UNorm Byte + normal: Float + position: Float + tangent: Float + texture0: Float + texture1: Float + texture2: Float + texture3: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png new file mode 100644 index 00000000..bae75ed9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:551e1d6b088a879af4385c1db2aeb43ed3616195f2e1b363086f20946a7d708f +size 2142 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png.meta new file mode 100644 index 00000000..a560726b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/dots.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 5d59c8dd-baf3-4f05-93ac-fbcc2cc40f9d + ImporterName: FileTextureImporter + PrimaryAsset: ! 5d59c8dd-baf3-4f05-93ac-fbcc2cc40f9d + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab new file mode 100644 index 00000000..549a5d80 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab @@ -0,0 +1,102 @@ +- ! + PackagePath: "" + objects: + - ! 0a1b452c-746c-4273-a47a-4982a219fc84 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: engine_exhaust + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 4.000000, y: 4.000000, z: 4.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6140714c-49da-45d6-a418-ced84a31c733 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! 69f75d0a-3f47-438f-898d-6b6edf43ac6c + Components: + - ! 506ee674-3f6a-435d-91b6-c4b281463811 + - ! f0d14b2e-2523-486b-b7fe-d53211b82ec2 +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.043960, z: -0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2a0b49d4-512e-45d2-b3af-84246595dc04 +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab.meta new file mode 100644 index 00000000..fcd09b6e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/engine_exhaust.prefab.meta @@ -0,0 +1,127 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 4d1b57db-5ca2-4c9f-b1f4-9e2c50c7429c + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 4d1b57db-5ca2-4c9f-b1f4-9e2c50c7429c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 2eccdc47-e0aa-4ab9-bcf0-fc20a7e6ff51 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PackagePath: "" + objects: + - ! 3961b906-603d-48b6-a681-f62746feca88 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Look At + Enabled: true + LookAtMode: LookAtPoint + AimVectors: NegativeZAimYUp + WorldUpVector: ObjectY + Target: ! b49fd017-c3f4-45da-b6f3-ea6a4119aa87 + OffsetRotation: {x: 0.000000, y: 0.000000, z: 0.000000} +- ! + SourceRemaps: + - 0a1b452c-746c-4273-a47a-4982a219fc84: 3961b906-603d-48b6-a681-f62746feca88 + - 2a0b49d4-512e-45d2-b3af-84246595dc04: a4ba8aec-737b-4d8d-ba45-9b12e1864eaa + - 506ee674-3f6a-435d-91b6-c4b281463811: 5eadc179-2c94-472a-beea-48bee7250502 + - 6140714c-49da-45d6-a418-ced84a31c733: a38aa9d8-ceb5-43af-966a-80f6b3001217 + - 69f75d0a-3f47-438f-898d-6b6edf43ac6c: de09c852-e96c-4bdb-ab41-a84e7d9b1714 + - f0d14b2e-2523-486b-b7fe-d53211b82ec2: 2c63ceeb-277e-4b29-8832-b90b916a731e + SourceState: ! 093ac6a4-5943-406d-9893-4d538540893d +- ! + PrefabRemaps: + [] + Name: engine_exhaust + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 4.000000, y: 4.000000, z: 4.000000} + hasSegmentScaleCompensation: false + Children: + - ! a38aa9d8-ceb5-43af-966a-80f6b3001217 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e90357de-3c89-449a-b286-ef475ca93a50 + Mesh: ! fcfdee51-ef2d-45bf-9718-cf9de3ec3e1c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + edit34: 1.000000 +- ! + PrefabRemaps: + [] + Name: blendshapes1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.727880, z: 0.000000} + rotation: {x: -180.000000, y: 0.000000, z: 180.000000} + scale: {x: 0.900000, y: 0.900000, z: 0.900000} + hasSegmentScaleCompensation: false + Children: + - ! de09c852-e96c-4bdb-ab41-a84e7d9b1714 + Components: + - ! 5eadc179-2c94-472a-beea-48bee7250502 + - ! 2c63ceeb-277e-4b29-8832-b90b916a731e +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 100 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 889745a7-9062-432b-b028-bed9c7556fff + Mesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: glow_plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.043960, z: -0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 2.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a4ba8aec-737b-4d8d-ba45-9b12e1864eaa diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh new file mode 100644 index 00000000..17dcbb40 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545446387b23994b9aa63dd719c006fead49982d778cf0f1b7253f86686edd0e +size 1332 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh.meta new file mode 100644 index 00000000..c74de089 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Exhaust/glow_plane.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + ImporterName: FileMeshImporter + PrimaryAsset: ! 78af2a2b-32ce-48b7-ba42-c5bccfeef254 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png new file mode 100644 index 00000000..1428c7a5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01218fee9c2e53c46f69895752d55468f26162ece89f24018135037d07e6325c +size 27605 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png.meta new file mode 100644 index 00000000..684f3135 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Noise00.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 34ed7a86-f25c-4cf5-a228-3a48f666ac39 + ImporterName: FileTextureImporter + PrimaryAsset: ! 34ed7a86-f25c-4cf5-a228-3a48f666ac39 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh new file mode 100644 index 00000000..19129e99 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b321d02694706f032870bec8bfc42b552497b543bf875125776b21570046bedf +size 1332 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh.meta new file mode 100644 index 00000000..53ec2c36 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Plane.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! fa150aa3-3740-4c32-8a2c-e7f4d9420fbf + ImporterName: FileMeshImporter + PrimaryAsset: ! fa150aa3-3740-4c32-8a2c-e7f4d9420fbf + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat new file mode 100644 index 00000000..faeba6d5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat @@ -0,0 +1,139 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 5a7c87ef-53dd-41ec-896c-30e63cc2f09d +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Add + Properties: + Port_Center_N008: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Center_N014: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Direction_N001: + typeIdx: 3 + value: {x: -1.000000, y: 0.000000} + Port_Import_N023: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Import_N029: + typeIdx: 1 + value: 1.000000 + Port_Import_N030: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input0_N003: + typeIdx: 1 + value: 0.000000 + Port_Input0_N018: + typeIdx: 1 + value: 0.000000 + Port_Input0_N035: + typeIdx: 1 + value: 1.000000 + Port_Input1_N002: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Input1_N003: + typeIdx: 1 + value: 0.500000 + Port_Input1_N018: + typeIdx: 1 + value: 0.200000 + Port_Input1_N019: + typeIdx: 1 + value: 2.500000 + Port_Input1_N024: + typeIdx: 1 + value: 0.500000 + Port_Input1_N025: + typeIdx: 1 + value: 2.000000 + Port_Input1_N026: + typeIdx: 1 + value: 12.000000 + Port_Input1_N035: + typeIdx: 1 + value: 0.800000 + Port_Input1_N037: + typeIdx: 1 + value: 1.500000 + Port_Multiplier_N007: + typeIdx: 1 + value: 1.000000 + Port_Position1_N009: + typeIdx: 1 + value: 0.300000 + Port_Scale_N008: + typeIdx: 3 + value: {x: 1.000000, y: 4.000000} + Port_Speed_N001: + typeIdx: 1 + value: 2.000000 + Port_Value0_N009: + typeIdx: 5 + value: {x: 1.000000, y: 0.789944, z: 0.000870, w: 1.000000} + Port_Value1_N009: + typeIdx: 5 + value: {x: 1.000000, y: 0.318013, z: 0.094392, w: 1.000000} + Port_Value2_N009: + typeIdx: 5 + value: {x: 1.000000, y: 0.149126, z: 0.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N16: + typeIdx: 9 + value: + id: 34ed7a86-f25c-4cf5-a228-3a48f666ac39 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + Tweak_N16BorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N16Dims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Tweak_N16Transform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + Tweak_N16UvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + heating: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ef057d69-4db4-4d8e-8ab1-f44f0e7ca9c8 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat.meta new file mode 100644 index 00000000..9b0aaffc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/RadialHeat_ANIM_mat.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 48bfedff-f6a2-4631-8866-a2d38f0d84bf + ImporterName: MaterialImporter + PrimaryAsset: ! 48bfedff-f6a2-4631-8866-a2d38f0d84bf + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph new file mode 100644 index 00000000..e3a12298 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e729a35d45fc39334c5a32f9c96d645ad2baae68175e215913490e196b31ee3f +size 221070 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph.meta new file mode 100644 index 00000000..f5981936 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Radial Heat/Radial_heat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! ef057d69-4db4-4d8e-8ab1-f44f0e7ca9c8 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! ef057d69-4db4-4d8e-8ab1-f44f0e7ca9c8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset new file mode 100644 index 00000000..4514d7d1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset @@ -0,0 +1,1218 @@ +- ! + PackagePath: "" + AnimationPropertiesLayers: + piece_0: + position: + - time: 0.000000 + value: {x: -0.000004, y: 4.089297, z: -0.064310} + - time: 0.033333 + value: {x: -0.000004, y: 4.089297, z: -0.064310} + - time: 0.066667 + value: {x: -0.000004, y: 4.102908, z: -0.064310} + - time: 0.100000 + value: {x: -0.000004, y: 4.120387, z: -0.064310} + - time: 0.133333 + value: {x: -0.000004, y: 4.141476, z: -0.064310} + - time: 0.166667 + value: {x: -0.000004, y: 4.165964, z: -0.064310} + - time: 0.200000 + value: {x: -0.000004, y: 4.193673, z: -0.064310} + - time: 0.233333 + value: {x: -0.000004, y: 4.224459, z: -0.064310} + - time: 0.266667 + value: {x: -0.000004, y: 4.258199, z: -0.064310} + - time: 0.300000 + value: {x: -0.000004, y: 4.294793, z: -0.064310} + - time: 0.333333 + value: {x: -0.000004, y: 4.334155, z: -0.064310} + - time: 0.366667 + value: {x: -0.000004, y: 4.376215, z: -0.064310} + - time: 0.400000 + value: {x: -0.000004, y: 4.420917, z: -0.064309} + - time: 0.433333 + value: {x: -0.000004, y: 4.468215, z: -0.064308} + - time: 0.466667 + value: {x: -0.000004, y: 4.518072, z: -0.064307} + - time: 0.500000 + value: {x: -0.000004, y: 4.570462, z: -0.064306} + - time: 0.533333 + value: {x: -0.000004, y: 4.625366, z: -0.064305} + - time: 0.566667 + value: {x: -0.000004, y: 4.682772, z: -0.064304} + - time: 0.600000 + value: {x: -0.000004, y: 4.742678, z: -0.064303} + - time: 0.633333 + value: {x: -0.000004, y: 4.805084, z: -0.064302} + - time: 0.666667 + value: {x: -0.000005, y: 4.870000, z: -0.064301} + - time: 0.700000 + value: {x: -0.000005, y: 4.937441, z: -0.064300} + - time: 0.733333 + value: {x: -0.000006, y: 5.007429, z: -0.064299} + - time: 0.766667 + value: {x: -0.000006, y: 5.079991, z: -0.064297} + - time: 0.800000 + value: {x: -0.000007, y: 5.155160, z: -0.064296} + - time: 0.833333 + value: {x: -0.000007, y: 5.232977, z: -0.064294} + - time: 0.866667 + value: {x: -0.000007, y: 5.313488, z: -0.064293} + - time: 0.900000 + value: {x: -0.000008, y: 5.396746, z: -0.064291} + - time: 0.933333 + value: {x: -0.000008, y: 5.482810, z: -0.064290} + - time: 0.966667 + value: {x: -0.000009, y: 5.571749, z: -0.064288} + - time: 1.000000 + value: {x: -0.000009, y: 5.663638, z: -0.064287} + - time: 1.033333 + value: {x: -0.000010, y: 5.758560, z: -0.064285} + - time: 1.066667 + value: {x: -0.000010, y: 5.856609, z: -0.064283} + - time: 1.100000 + value: {x: -0.000011, y: 5.957887, z: -0.064281} + - time: 1.133333 + value: {x: -0.000011, y: 6.062510, z: -0.064280} + - time: 1.166667 + value: {x: -0.000012, y: 6.170600, z: -0.064278} + - time: 1.200000 + value: {x: -0.000012, y: 6.282300, z: -0.064276} + - time: 1.233333 + value: {x: -0.000013, y: 6.397762, z: -0.064274} + - time: 1.266667 + value: {x: -0.000013, y: 6.517158, z: -0.064272} + - time: 1.300000 + value: {x: -0.000014, y: 6.640677, z: -0.064269} + - time: 1.333333 + value: {x: -0.000014, y: 6.768531, z: -0.064267} + - time: 1.366667 + value: {x: -0.000015, y: 6.900957, z: -0.064265} + - time: 1.400000 + value: {x: -0.000016, y: 7.038216, z: -0.064262} + - time: 1.433333 + value: {x: -0.000017, y: 7.180608, z: -0.064260} + - time: 1.466667 + value: {x: -0.000018, y: 7.328469, z: -0.064257} + - time: 1.500000 + value: {x: -0.000019, y: 7.482180, z: -0.064254} + - time: 1.533333 + value: {x: -0.000019, y: 7.642175, z: -0.064252} + - time: 1.566666 + value: {x: -0.000020, y: 7.808955, z: -0.064249} + - time: 1.600000 + value: {x: -0.000021, y: 7.983100, z: -0.064245} + - time: 1.633333 + value: {x: -0.000022, y: 8.165287, z: -0.064242} + - time: 1.666666 + value: {x: -0.000023, y: 8.356312, z: -0.064239} + - time: 1.700000 + value: {x: -0.000024, y: 8.557125, z: -0.064235} + - time: 1.733333 + value: {x: -0.000025, y: 8.768875, z: -0.064232} + - time: 1.766667 + value: {x: -0.000026, y: 8.992970, z: -0.064228} + - time: 1.800000 + value: {x: -0.000557, y: 9.231056, z: -0.063851} + - time: 1.833333 + value: {x: -0.001417, y: 9.485410, z: -0.063241} + - time: 1.866667 + value: {x: -0.002342, y: 9.759007, z: -0.062586} + - time: 1.900000 + value: {x: -0.003346, y: 10.055794, z: -0.061875} + - time: 1.933333 + value: {x: -0.004447, y: 10.381334, z: -0.061095} + - time: 1.966667 + value: {x: -0.005674, y: 10.743914, z: -0.060226} + - time: 2.000000 + value: {x: -0.007071, y: 11.156875, z: -0.059236} + - time: 2.033333 + value: {x: -0.009666, y: 11.923565, z: -0.057397} + - time: 2.066667 + value: {x: -0.013355, y: 13.013418, z: -0.054783} + - time: 2.100000 + value: {x: -0.023874, y: 14.278951, z: -0.047572} + - time: 2.133333 + value: {x: -0.069368, y: 15.675714, z: -0.016919} + - time: 2.166667 + value: {x: -0.118456, y: 17.182674, z: 0.016158} + - time: 2.200000 + value: {x: -0.170791, y: 18.789141, z: 0.051424} + - time: 2.233333 + value: {x: -0.256957, y: 20.482166, z: 0.109165} + - time: 2.266667 + value: {x: -0.353859, y: 22.264296, z: 0.174059} + - time: 2.300000 + value: {x: -0.456889, y: 24.136118, z: 0.243047} + - time: 2.333333 + value: {x: -0.586369, y: 26.100090, z: 0.329569} + - time: 2.366667 + value: {x: -0.721912, y: 28.155985, z: 0.420141} + - time: 2.400000 + value: {x: -0.873324, y: 30.310684, z: 0.521235} + - time: 2.433333 + value: {x: -1.038204, y: 32.566822, z: 0.631267} + - time: 2.466667 + value: {x: -1.217428, y: 34.922333, z: 0.747418} + - time: 2.500000 + value: {x: -1.415793, y: 37.380444, z: 0.870662} + - time: 2.533333 + value: {x: -1.637812, y: 39.958607, z: 0.995479} + - time: 2.566667 + value: {x: -1.894366, y: 42.668201, z: 1.119266} + - time: 2.600000 + value: {x: -2.193212, y: 45.510330, z: 1.235912} + - time: 2.633333 + value: {x: -2.532915, y: 48.497734, z: 1.347174} + - time: 2.666667 + value: {x: -2.952249, y: 51.632053, z: 1.432838} + - time: 2.700000 + value: {x: -3.434719, y: 54.940224, z: 1.502796} + - time: 2.733333 + value: {x: -4.010881, y: 58.442554, z: 1.542869} + - time: 2.766667 + value: {x: -4.731380, y: 62.158634, z: 1.526878} + - time: 2.800000 + value: {x: -5.605080, y: 66.119972, z: 1.452263} + - time: 2.833333 + value: {x: -6.687144, y: 70.360085, z: 1.291595} + - time: 2.866667 + value: {x: -8.059566, y: 74.917747, z: 1.002677} + - time: 2.900000 + value: {x: -9.847469, y: 79.835617, z: 0.519168} + - time: 2.933333 + value: {x: -12.247578, y: 85.155693, z: -0.266013} + - time: 2.966667 + value: {x: -15.578043, y: 90.912659, z: -1.530037} + - time: 3.000000 + value: {x: -20.505070, y: 97.006691, z: -3.688360} + - time: 3.033333 + value: {x: -26.864887, y: 102.698303, z: -6.809002} + - time: 3.066667 + value: {x: -33.839401, y: 107.103539, z: -10.613621} + - time: 3.100000 + value: {x: -41.139446, y: 110.232208, z: -15.020901} + - time: 3.133333 + value: {x: -48.509026, y: 112.063164, z: -19.991671} + - time: 3.166667 + value: {x: -55.717026, y: 112.708260, z: -25.445448} + - time: 3.200000 + value: {x: -62.572670, y: 112.224091, z: -31.332388} + - time: 3.233333 + value: {x: -68.949150, y: 110.754951, z: -37.573845} + - time: 3.266667 + value: {x: -74.775307, y: 108.481148, z: -44.097717} + - time: 3.300000 + value: {x: -79.980652, y: 105.547684, z: -50.867096} + - time: 3.333333 + value: {x: -84.536934, y: 102.120476, z: -57.852974} + - time: 3.366667 + value: {x: -88.412231, y: 98.331779, z: -65.048370} + - time: 3.400000 + value: {x: -91.543152, y: 94.293655, z: -72.456154} + - time: 3.433333 + value: {x: -93.858139, y: 90.097733, z: -80.060326} + - time: 3.466667 + value: {x: -95.260963, y: 85.800095, z: -87.813217} + - time: 3.500000 + value: {x: -95.699509, y: 81.465988, z: -95.647781} + - time: 3.533333 + value: {x: -95.124588, y: 77.170944, z: -103.479996} + - time: 3.566667 + value: {x: -93.466431, y: 73.000809, z: -111.202148} + - time: 3.600000 + value: {x: -90.653343, y: 69.044441, z: -118.693436} + - time: 3.633333 + value: {x: -86.589287, y: 65.419518, z: -125.748329} + - time: 3.666667 + value: {x: -81.391609, y: 62.166882, z: -132.200943} + - time: 3.700000 + value: {x: -75.190376, y: 59.319710, z: -137.903656} + - time: 3.733333 + value: {x: -68.137398, y: 56.899891, z: -142.736069} + - time: 3.766667 + value: {x: -60.384525, y: 54.915150, z: -146.609482} + - time: 3.800000 + value: {x: -52.117233, y: 53.373886, z: -149.438980} + - time: 3.833333 + value: {x: -43.530956, y: 52.211372, z: -151.353409} + - time: 3.866667 + value: {x: -34.767689, y: 51.384125, z: -152.463333} + - time: 3.900000 + value: {x: -25.929031, y: 50.856190, z: -152.859467} + - time: 3.933333 + value: {x: -17.079523, y: 50.613655, z: -152.576920} + - time: 3.966667 + value: {x: -8.274588, y: 50.630157, z: -151.679306} + - time: 4.000000 + value: {x: 0.437538, y: 50.893677, z: -150.195633} + - time: 4.033333 + value: {x: 9.006100, y: 51.402779, z: -148.121765} + - time: 4.066667 + value: {x: 17.376198, y: 52.158112, z: -145.422989} + - time: 4.100000 + value: {x: 25.476122, y: 53.148735, z: -142.080750} + - time: 4.133333 + value: {x: 33.260719, y: 54.343422, z: -138.132980} + - time: 4.166667 + value: {x: 40.683128, y: 55.718273, z: -133.601013} + - time: 4.200000 + value: {x: 47.695503, y: 57.246742, z: -128.515198} + - time: 4.233333 + value: {x: 54.246479, y: 58.909924, z: -122.891785} + - time: 4.266666 + value: {x: 60.330917, y: 60.720764, z: -116.817696} + - time: 4.300000 + value: {x: 65.898926, y: 62.731182, z: -110.336594} + - time: 4.333333 + value: {x: 70.883759, y: 64.996506, z: -103.485382} + - time: 4.366667 + value: {x: 75.134583, y: 67.606667, z: -96.279167} + - time: 4.400000 + value: {x: 78.576157, y: 70.598663, z: -88.809753} + - time: 4.433333 + value: {x: 81.072166, y: 74.021835, z: -81.164848} + - time: 4.466667 + value: {x: 82.506569, y: 77.872086, z: -73.452477} + - time: 4.500000 + value: {x: 82.780067, y: 81.994385, z: -65.755447} + - time: 4.533333 + value: {x: 82.010040, y: 86.149666, z: -58.118450} + - time: 4.566667 + value: {x: 80.230049, y: 90.146736, z: -50.571522} + - time: 4.600000 + value: {x: 77.468719, y: 93.795677, z: -43.146328} + - time: 4.633333 + value: {x: 73.686928, y: 96.836121, z: -35.907314} + - time: 4.666667 + value: {x: 69.030800, y: 99.115952, z: -28.915354} + - time: 4.700000 + value: {x: 63.601334, y: 100.592705, z: -22.276880} + - time: 4.733333 + value: {x: 57.503780, y: 101.343979, z: -16.114141} + - time: 4.766666 + value: {x: 50.802013, y: 101.430038, z: -10.573420} + - time: 4.800000 + value: {x: 43.620468, y: 100.985466, z: -5.707824} + - time: 4.833333 + value: {x: 36.023651, y: 100.080879, z: -1.607154} + - time: 4.866667 + value: {x: 28.070683, y: 98.772995, z: 1.606055} + - time: 4.900000 + value: {x: 19.844713, y: 97.121559, z: 3.788879} + - time: 4.933333 + value: {x: 11.484190, y: 95.195892, z: 4.994367} + - time: 4.966667 + value: {x: 3.103925, y: 93.024254, z: 5.278117} + - time: 5.000000 + value: {x: -5.190222, y: 90.617889, z: 4.651420} + - time: 5.033333 + value: {x: -13.298819, y: 87.994301, z: 3.160961} + - time: 5.066667 + value: {x: -21.139174, y: 85.170815, z: 0.861565} + - time: 5.100000 + value: {x: -28.618738, y: 82.149849, z: -2.246276} + - time: 5.133333 + value: {x: -35.569679, y: 78.921387, z: -6.237651} + - time: 5.166667 + value: {x: -41.879982, y: 75.529579, z: -11.049838} + - time: 5.200000 + value: {x: -47.450233, y: 72.028557, z: -16.623596} + - time: 5.233333 + value: {x: -52.161415, y: 68.473427, z: -22.911877} + - time: 5.266666 + value: {x: -55.828434, y: 64.938492, z: -29.866028} + - time: 5.300000 + value: {x: -58.411755, y: 61.501610, z: -37.324184} + - time: 5.333333 + value: {x: -59.813797, y: 58.243126, z: -45.164001} + - time: 5.366667 + value: {x: -59.882248, y: 55.257572, z: -53.227375} + - time: 5.400000 + value: {x: -58.574093, y: 52.556564, z: -61.265244} + - time: 5.433333 + value: {x: -55.905479, y: 50.078747, z: -69.014786} + - time: 5.466667 + value: {x: -51.841785, y: 47.807884, z: -76.204155} + - time: 5.500000 + value: {x: -46.348156, y: 45.779747, z: -82.464745} + - time: 5.533333 + value: {x: -39.790470, y: 43.985088, z: -87.654289} + - time: 5.566667 + value: {x: -32.438499, y: 42.412365, z: -91.753204} + - time: 5.600000 + value: {x: -24.580011, y: 41.061729, z: -94.918701} + - time: 5.633333 + value: {x: -16.474554, y: 39.927452, z: -97.411263} + - time: 5.666667 + value: {x: -8.214243, y: 38.981392, z: -99.461319} + - time: 5.700000 + value: {x: 0.147692, y: 38.217049, z: -101.194710} + - time: 5.733333 + value: {x: 8.560836, y: 37.651577, z: -102.694237} + - time: 5.766666 + value: {x: 17.000713, y: 37.274403, z: -104.065178} + - time: 5.800000 + value: {x: 25.455011, y: 37.094303, z: -105.375893} + - time: 5.833333 + value: {x: 33.907803, y: 37.138859, z: -106.692627} + - time: 5.866667 + value: {x: 42.338078, y: 37.443058, z: -108.092659} + - time: 5.900000 + value: {x: 50.709705, y: 38.044186, z: -109.642265} + - time: 5.933333 + value: {x: 59.009167, y: 39.012310, z: -111.423012} + - time: 5.966667 + value: {x: 67.138847, y: 40.493267, z: -113.573074} + - time: 6.000000 + value: {x: 74.982376, y: 42.560879, z: -116.184067} + - time: 6.033333 + value: {x: 82.362915, y: 45.335060, z: -119.380844} + - time: 6.066667 + value: {x: 88.955612, y: 48.971947, z: -123.319756} + - time: 6.100000 + value: {x: 94.392349, y: 53.474445, z: -128.019379} + - time: 6.133333 + value: {x: 98.470543, y: 58.678684, z: -133.339600} + - time: 6.166667 + value: {x: 101.132164, y: 64.360153, z: -139.100281} + - time: 6.200000 + value: {x: 102.412140, y: 70.234215, z: -145.112289} + - time: 6.233333 + value: {x: 102.508797, y: 76.110817, z: -151.256668} + - time: 6.266666 + value: {x: 101.446533, y: 81.851074, z: -157.455139} + - time: 6.300000 + value: {x: 99.127586, y: 87.264816, z: -163.601715} + - time: 6.333333 + value: {x: 95.622597, y: 92.187958, z: -169.575745} + - time: 6.366667 + value: {x: 90.977150, y: 96.474403, z: -175.268509} + - time: 6.400000 + value: {x: 85.246964, y: 99.921036, z: -180.508682} + - time: 6.433333 + value: {x: 78.583084, y: 102.407089, z: -185.168594} + - time: 6.466667 + value: {x: 71.278748, y: 103.978905, z: -189.206360} + - time: 6.500000 + value: {x: 63.510605, y: 104.761116, z: -192.650070} + - time: 6.533333 + value: {x: 55.497551, y: 104.842079, z: -195.456909} + - time: 6.566667 + value: {x: 47.306454, y: 104.379623, z: -197.720764} + - time: 6.600000 + value: {x: 39.027752, y: 103.421753, z: -199.423264} + - time: 6.633333 + value: {x: 30.714428, y: 101.957611, z: -200.483337} + - time: 6.666667 + value: {x: 22.449656, y: 100.017563, z: -200.859100} + - time: 6.700000 + value: {x: 14.320254, y: 97.603516, z: -200.472443} + - time: 6.733333 + value: {x: 6.450816, y: 94.663406, z: -199.141266} + - time: 6.766666 + value: {x: -0.857435, y: 91.186859, z: -196.656219} + - time: 6.800000 + value: {x: -7.325934, y: 87.220795, z: -192.909149} + - time: 6.833333 + value: {x: -12.520099, y: 82.881317, z: -187.835541} + - time: 6.866667 + value: {x: -15.968111, y: 78.398682, z: -181.549454} + - time: 6.900000 + value: {x: -18.008509, y: 73.998093, z: -174.622391} + - time: 6.933333 + value: {x: -18.977390, y: 69.726921, z: -167.315659} + - time: 6.966667 + value: {x: -19.098570, y: 65.648315, z: -159.858536} + - time: 7.000000 + value: {x: -18.645685, y: 61.737885, z: -152.354233} + - time: 7.033333 + value: {x: -17.764713, y: 57.955948, z: -144.806946} + - time: 7.066667 + value: {x: -16.536247, y: 54.289795, z: -137.230515} + - time: 7.100000 + value: {x: -15.039962, y: 50.730507, z: -129.645645} + - time: 7.133333 + value: {x: -13.350032, y: 47.265537, z: -122.066780} + - time: 7.166667 + value: {x: -11.507426, y: 43.883301, z: -114.485886} + - time: 7.200000 + value: {x: -9.543935, y: 40.577358, z: -106.888550} + - time: 7.233333 + value: {x: -7.511844, y: 37.338104, z: -99.276711} + - time: 7.266666 + value: {x: -5.449040, y: 34.161190, z: -91.641243} + - time: 7.300000 + value: {x: -3.409057, y: 31.051048, z: -83.971535} + - time: 7.333333 + value: {x: -1.474224, y: 28.017086, z: -76.280899} + - time: 7.366667 + value: {x: 0.216537, y: 25.192698, z: -68.894424} + - time: 7.400000 + value: {x: 1.565559, y: 22.710739, z: -62.118214} + - time: 7.433333 + value: {x: 2.632941, y: 20.527853, z: -55.883614} + - time: 7.466667 + value: {x: 3.415172, y: 18.645124, z: -50.149807} + - time: 7.500000 + value: {x: 3.941897, y: 17.033176, z: -44.822060} + - time: 7.533333 + value: {x: 4.236704, y: 15.682274, z: -39.863781} + - time: 7.566667 + value: {x: 4.314149, y: 14.598645, z: -35.265175} + - time: 7.600000 + value: {x: 4.199131, y: 13.782976, z: -31.011017} + - time: 7.633333 + value: {x: 3.896740, y: 13.252628, z: -27.004314} + - time: 7.666667 + value: {x: 3.464718, y: 13.066098, z: -23.316769} + - time: 7.700000 + value: {x: 3.019122, y: 13.143795, z: -19.915819} + - time: 7.733333 + value: {x: 2.583213, y: 13.413641, z: -16.777792} + - time: 7.766666 + value: {x: 2.182013, y: 14.119775, z: -13.960745} + - time: 7.800000 + value: {x: 1.814722, y: 14.897038, z: -11.404104} + - time: 7.833333 + value: {x: 1.486765, y: 16.006832, z: -9.193007} + - time: 7.866667 + value: {x: 1.188230, y: 17.094669, z: -7.197637} + - time: 7.900000 + value: {x: 0.930438, y: 18.405428, z: -5.557415} + - time: 7.933333 + value: {x: 0.693756, y: 19.607983, z: -4.051500} + - time: 7.966667 + value: {x: 0.512229, y: 20.954777, z: -2.956514} + - time: 8.000000 + value: {x: 0.360276, y: 22.280651, z: -2.068465} + - time: 8.033334 + value: {x: 0.221798, y: 23.486923, z: -1.259341} + - time: 8.066667 + value: {x: 0.144699, y: 24.708923, z: -0.820177} + - time: 8.100000 + value: {x: 0.112671, y: 25.911728, z: -0.652152} + - time: 8.133333 + value: {x: 0.083842, y: 26.992041, z: -0.501039} + - time: 8.166667 + value: {x: 0.058045, y: 27.956532, z: -0.365911} + - time: 8.200000 + value: {x: 0.035140, y: 28.810978, z: -0.246000} + - time: 8.233334 + value: {x: 0.028321, y: 29.571487, z: -0.210462} + - time: 8.266666 + value: {x: 0.024280, y: 30.233553, z: -0.189476} + - time: 8.300000 + value: {x: 0.020817, y: 30.800766, z: -0.171492} + - time: 8.333333 + value: {x: 0.017899, y: 31.278435, z: -0.156344} + - time: 8.366667 + value: {x: 0.015499, y: 31.671162, z: -0.143888} + - time: 8.400000 + value: {x: 0.013406, y: 32.013699, z: -0.133022} + - time: 8.433333 + value: {x: 0.011431, y: 32.336723, z: -0.122773} + - time: 8.466666 + value: {x: 0.009578, y: 32.639759, z: -0.113157} + - time: 8.500000 + value: {x: 0.007847, y: 32.922821, z: -0.104174} + - time: 8.533334 + value: {x: 0.006239, y: 33.185596, z: -0.095834} + - time: 8.566667 + value: {x: 0.004753, y: 33.428539, z: -0.088122} + - time: 8.600000 + value: {x: 0.003386, y: 33.651814, z: -0.081034} + - time: 8.633333 + value: {x: 0.002134, y: 33.856476, z: -0.074536} + - time: 8.666667 + value: {x: 0.001737, y: 34.043583, z: -0.072497} + - time: 8.700000 + value: {x: 0.001676, y: 34.214783, z: -0.072204} + - time: 8.733334 + value: {x: 0.001619, y: 34.372269, z: -0.071934} + - time: 8.766666 + value: {x: 0.001567, y: 34.518635, z: -0.071683} + - time: 8.800000 + value: {x: 0.001518, y: 34.656475, z: -0.071447} + - time: 8.833333 + value: {x: 0.001470, y: 34.789288, z: -0.071219} + - time: 8.866667 + value: {x: 0.001423, y: 34.920277, z: -0.070994} + - time: 8.900000 + value: {x: 0.001376, y: 35.052937, z: -0.070767} + - time: 8.933333 + value: {x: 0.001326, y: 35.190773, z: -0.070531} + - time: 8.966666 + value: {x: 0.001274, y: 35.336987, z: -0.070280} + - time: 9.000000 + value: {x: 0.001217, y: 35.494629, z: -0.070009} + - time: 9.033334 + value: {x: 0.001156, y: 35.666130, z: -0.069715} + - time: 9.066667 + value: {x: 0.001088, y: 35.853924, z: -0.069393} + - time: 9.100000 + value: {x: 0.001015, y: 36.059544, z: -0.069041} + - time: 9.133333 + value: {x: 0.000942, y: 36.261349, z: -0.068694} + - time: 9.166667 + value: {x: 0.000878, y: 36.440006, z: -0.068388} + - time: 9.200000 + value: {x: 0.000821, y: 36.599167, z: -0.068115} + - time: 9.233334 + value: {x: 0.000770, y: 36.741730, z: -0.067870} + - time: 9.266666 + value: {x: 0.000724, y: 36.869820, z: -0.067650} + - time: 9.300000 + value: {x: 0.000683, y: 36.985268, z: -0.067452} + - time: 9.333333 + value: {x: 0.000645, y: 37.089298, z: -0.067274} + - time: 9.366667 + value: {x: 0.000612, y: 37.183422, z: -0.067112} + - time: 9.400000 + value: {x: 0.000581, y: 37.268414, z: -0.066966} + - time: 9.433333 + value: {x: 0.000554, y: 37.345024, z: -0.066835} + - time: 9.466666 + value: {x: 0.000529, y: 37.414169, z: -0.066716} + - time: 9.500000 + value: {x: 0.000507, y: 37.476463, z: -0.066609} + - time: 9.533334 + value: {x: 0.000487, y: 37.532360, z: -0.066514} + - time: 9.566667 + value: {x: 0.000469, y: 37.582317, z: -0.066428} + - time: 9.600000 + value: {x: 0.000453, y: 37.626945, z: -0.066351} + - time: 9.633333 + value: {x: 0.000438, y: 37.666393, z: -0.066283} + - time: 9.666667 + value: {x: 0.000426, y: 37.701271, z: -0.066224} + - time: 9.700000 + value: {x: 0.000415, y: 37.706757, z: -0.066172} + - time: 9.733334 + value: {x: 0.000406, y: 37.685753, z: -0.066127} + - time: 9.766666 + value: {x: 0.000398, y: 37.637760, z: -0.066088} + - time: 9.800000 + value: {x: 0.000391, y: 37.562599, z: -0.066056} + - time: 9.833333 + value: {x: 0.000385, y: 37.459789, z: -0.066030} + - time: 9.866667 + value: {x: 0.000382, y: 37.328758, z: -0.066009} + - time: 9.900000 + value: {x: 0.000378, y: 37.169395, z: -0.065994} + - time: 9.933333 + value: {x: 0.000378, y: 36.981216, z: -0.065983} + - time: 9.966666 + value: {x: 0.000378, y: 36.764080, z: -0.065977} + - time: 10.000000 + value: {x: 0.000378, y: 36.517776, z: -0.065977} + - time: 10.033334 + value: {x: 0.000378, y: 36.243248, z: -0.065977} + - time: 10.066667 + value: {x: 0.000378, y: 35.941559, z: -0.065977} + - time: 10.100000 + value: {x: 0.000378, y: 35.612640, z: -0.065977} + - time: 10.133333 + value: {x: 0.000378, y: 35.256596, z: -0.065977} + - time: 10.166667 + value: {x: 0.000378, y: 34.873634, z: -0.065977} + - time: 10.200000 + value: {x: 0.000378, y: 34.464169, z: -0.065977} + - time: 10.233334 + value: {x: 0.000378, y: 34.028728, z: -0.065977} + - time: 10.266666 + value: {x: 0.000378, y: 33.568077, z: -0.065977} + - time: 10.300000 + value: {x: 0.000378, y: 33.083107, z: -0.065977} + - time: 10.333333 + value: {x: 0.000378, y: 32.574947, z: -0.065977} + - time: 10.366667 + value: {x: 0.000378, y: 32.044846, z: -0.065977} + - time: 10.400000 + value: {x: 0.000378, y: 31.494286, z: -0.065977} + - time: 10.433333 + value: {x: 0.000378, y: 30.924841, z: -0.065977} + - time: 10.466666 + value: {x: 0.000378, y: 30.338285, z: -0.065977} + - time: 10.500000 + value: {x: 0.000378, y: 29.736450, z: -0.065977} + - time: 10.533334 + value: {x: 0.000378, y: 29.121302, z: -0.065977} + - time: 10.566667 + value: {x: 0.000378, y: 28.494873, z: -0.065977} + - time: 10.600000 + value: {x: 0.000378, y: 27.859179, z: -0.065977} + - time: 10.633333 + value: {x: 0.000378, y: 27.216314, z: -0.065977} + - time: 10.666667 + value: {x: 0.000378, y: 26.568272, z: -0.065977} + - time: 10.700000 + value: {x: 0.000378, y: 25.917074, z: -0.065977} + - time: 10.733334 + value: {x: 0.000378, y: 25.264595, z: -0.065977} + - time: 10.766666 + value: {x: 0.000378, y: 24.612696, z: -0.065977} + - time: 10.800000 + value: {x: 0.000378, y: 23.963043, z: -0.065977} + - time: 10.833333 + value: {x: 0.000378, y: 23.317272, z: -0.065977} + - time: 10.866667 + value: {x: 0.000378, y: 22.676805, z: -0.065977} + - time: 10.900000 + value: {x: 0.000378, y: 22.043009, z: -0.065977} + - time: 10.933333 + value: {x: 0.000378, y: 21.417044, z: -0.065977} + - time: 10.966666 + value: {x: 0.000378, y: 20.800005, z: -0.065977} + - time: 11.000000 + value: {x: 0.000378, y: 20.192791, z: -0.065977} + - time: 11.033334 + value: {x: 0.000378, y: 19.596224, z: -0.065977} + - time: 11.066667 + value: {x: 0.000378, y: 19.011011, z: -0.065977} + - time: 11.100000 + value: {x: 0.000378, y: 18.437696, z: -0.065977} + - time: 11.133333 + value: {x: 0.000378, y: 17.876793, z: -0.065977} + - time: 11.166667 + value: {x: 0.000378, y: 17.328653, z: -0.065977} + - time: 11.200000 + value: {x: 0.000378, y: 16.793613, z: -0.065977} + - time: 11.233334 + value: {x: 0.000378, y: 16.271862, z: -0.065977} + - time: 11.266666 + value: {x: 0.000378, y: 15.763591, z: -0.065977} + - time: 11.300000 + value: {x: 0.000378, y: 15.268867, z: -0.065977} + - time: 11.333333 + value: {x: 0.000378, y: 14.787767, z: -0.065977} + - time: 11.366667 + value: {x: 0.000378, y: 14.320260, z: -0.065977} + - time: 11.400000 + value: {x: 0.000378, y: 13.866333, z: -0.065977} + - time: 11.433333 + value: {x: 0.000378, y: 13.425884, z: -0.065977} + - time: 11.466666 + value: {x: 0.000378, y: 12.998837, z: -0.065977} + - time: 11.500000 + value: {x: 0.000378, y: 12.585034, z: -0.065977} + - time: 11.533334 + value: {x: 0.000378, y: 12.184340, z: -0.065977} + - time: 11.566667 + value: {x: 0.000378, y: 11.796595, z: -0.065977} + - time: 11.600000 + value: {x: 0.000378, y: 11.421597, z: -0.065977} + - time: 11.633333 + value: {x: 0.000378, y: 11.059174, z: -0.065977} + - time: 11.666667 + value: {x: 0.000378, y: 10.709103, z: -0.065977} + - time: 11.700000 + value: {x: 0.000378, y: 10.371194, z: -0.065977} + - time: 11.733334 + value: {x: 0.000378, y: 10.045211, z: -0.065977} + - time: 11.766666 + value: {x: 0.000378, y: 9.730957, z: -0.065977} + - time: 11.800000 + value: {x: 0.000378, y: 9.428191, z: -0.065977} + - time: 11.833333 + value: {x: 0.000378, y: 9.136711, z: -0.065977} + - time: 11.866667 + value: {x: 0.000378, y: 8.856277, z: -0.065977} + - time: 11.900000 + value: {x: 0.000378, y: 8.586685, z: -0.065977} + - time: 11.933333 + value: {x: 0.000378, y: 8.327703, z: -0.065977} + - time: 11.966666 + value: {x: 0.000378, y: 8.079121, z: -0.065977} + - time: 12.000000 + value: {x: 0.000378, y: 7.839787, z: -0.065977} + - time: 12.033334 + value: {x: 0.000378, y: 7.608715, z: -0.065977} + - time: 12.066667 + value: {x: 0.000378, y: 7.385919, z: -0.065977} + - time: 12.100000 + value: {x: 0.000378, y: 7.171389, z: -0.065977} + - time: 12.133333 + value: {x: 0.000378, y: 6.965126, z: -0.065977} + - time: 12.166667 + value: {x: 0.000378, y: 6.767098, z: -0.065977} + - time: 12.200000 + value: {x: 0.000378, y: 6.577289, z: -0.065977} + - time: 12.233334 + value: {x: 0.000378, y: 6.395646, z: -0.065977} + - time: 12.266666 + value: {x: 0.000378, y: 6.222128, z: -0.065977} + - time: 12.300000 + value: {x: 0.000378, y: 6.056663, z: -0.065977} + - time: 12.333333 + value: {x: 0.000378, y: 5.899185, z: -0.065977} + - time: 12.366667 + value: {x: 0.000378, y: 5.749605, z: -0.065977} + - time: 12.400000 + value: {x: 0.000378, y: 5.607826, z: -0.065977} + - time: 12.433333 + value: {x: 0.000378, y: 5.473734, z: -0.065977} + - time: 12.466666 + value: {x: 0.000378, y: 5.347222, z: -0.065977} + - time: 12.500000 + value: {x: 0.000378, y: 5.228140, z: -0.065977} + - time: 12.533334 + value: {x: 0.000378, y: 5.116357, z: -0.065977} + - time: 12.566667 + value: {x: 0.000378, y: 5.011717, z: -0.065977} + - time: 12.600000 + value: {x: 0.000378, y: 4.914045, z: -0.065977} + - time: 12.633333 + value: {x: 0.000378, y: 4.823176, z: -0.065977} + - time: 12.666667 + value: {x: 0.000378, y: 4.738912, z: -0.065977} + - time: 12.700000 + value: {x: 0.000378, y: 4.661059, z: -0.065977} + - time: 12.733334 + value: {x: 0.000378, y: 4.589415, z: -0.065977} + - time: 12.766666 + value: {x: 0.000378, y: 4.523761, z: -0.065977} + - time: 12.800000 + value: {x: 0.000378, y: 4.463873, z: -0.065977} + - time: 12.833333 + value: {x: 0.000378, y: 4.409526, z: -0.065977} + - time: 12.866667 + value: {x: 0.000378, y: 4.360476, z: -0.065977} + - time: 12.900000 + value: {x: 0.000378, y: 4.316482, z: -0.065977} + - time: 12.933333 + value: {x: 0.000378, y: 4.277297, z: -0.065977} + - time: 12.966666 + value: {x: 0.000378, y: 4.242671, z: -0.065977} + - time: 13.000000 + value: {x: 0.000378, y: 4.212340, z: -0.065977} + - time: 13.033334 + value: {x: 0.000378, y: 4.186052, z: -0.065977} + - time: 13.066667 + value: {x: 0.000378, y: 4.163550, z: -0.065977} + - time: 13.100000 + value: {x: 0.000378, y: 4.144564, z: -0.065977} + - time: 13.133333 + value: {x: 0.000378, y: 4.128836, z: -0.065977} + - time: 13.166667 + value: {x: 0.000378, y: 4.116107, z: -0.065977} + - time: 13.200000 + value: {x: 0.000378, y: 4.106112, z: -0.065977} + - time: 13.233334 + value: {x: 0.000378, y: 4.098601, z: -0.065977} + - time: 13.266666 + value: {x: 0.000378, y: 4.093318, z: -0.065977} + - time: 13.300000 + value: {x: 0.000378, y: 4.090006, z: -0.065977} + - time: 13.333333 + value: {x: 0.000378, y: 4.088423, z: -0.065977} + rotation: + - time: 0.000000 + value: {0: -0.707106, 1: -0.000002, 2: 0.000000, 3: 0.707108} + - time: 1.133333 + value: {0: -0.706951, 1: -0.000467, 2: -0.000000, 3: 0.707263} + - time: 1.766667 + value: {0: -0.706719, 1: -0.001158, 2: 0.000000, 3: 0.707493} + - time: 1.800000 + value: {0: -0.706592, 1: -0.001537, 2: 0.000000, 3: 0.707620} + - time: 1.900000 + value: {0: -0.705952, 1: -0.003430, 2: 0.000000, 3: 0.708251} + - time: 2.000000 + value: {0: -0.705089, 1: -0.005951, 2: -0.000000, 3: 0.709094} + - time: 2.033333 + value: {0: -0.704482, 1: -0.007704, 2: 0.000000, 3: 0.709680} + - time: 2.066667 + value: {0: -0.703610, 1: -0.010189, 2: 0.000000, 3: 0.710513} + - time: 2.100000 + value: {0: -0.702488, 1: -0.013343, 2: -0.000000, 3: 0.711570} + - time: 2.133333 + value: {0: -0.700685, 1: -0.018300, 2: 0.000000, 3: 0.713236} + - time: 2.166667 + value: {0: -0.698697, 1: -0.023622, 2: 0.000000, 3: 0.715028} + - time: 2.200000 + value: {0: -0.696528, 1: -0.029264, 2: -0.000000, 3: 0.716933} + - time: 2.300000 + value: {0: -0.691523, 1: -0.041702, 2: -0.000000, 3: 0.721150} + - time: 2.366667 + value: {0: -0.689385, 1: -0.046793, 2: 0.000000, 3: 0.722882} + - time: 2.433333 + value: {0: -0.687880, 1: -0.051415, 2: -0.000000, 3: 0.724001} + - time: 2.466667 + value: {0: -0.687450, 1: -0.054220, 2: 0.000000, 3: 0.724205} + - time: 2.500000 + value: {0: -0.687421, 1: -0.057885, 2: 0.000000, 3: 0.723948} + - time: 2.533333 + value: {0: -0.687655, 1: -0.062531, 2: -0.000000, 3: 0.723340} + - time: 2.566667 + value: {0: -0.688326, 1: -0.068756, 2: 0.000000, 3: 0.722136} + - time: 2.600000 + value: {0: -0.689255, 1: -0.076330, 2: -0.000000, 3: 0.720487} + - time: 2.633333 + value: {0: -0.690373, 1: -0.085206, 2: -0.000000, 3: 0.718418} + - time: 2.666667 + value: {0: -0.691770, 1: -0.096224, 2: 0.000000, 3: 0.715678} + - time: 2.700000 + value: {0: -0.693215, 1: -0.108891, 2: -0.000000, 3: 0.712458} + - time: 2.733333 + value: {0: -0.694702, 1: -0.123946, 2: -0.000000, 3: 0.708539} + - time: 2.766667 + value: {0: -0.696159, 1: -0.142623, 2: -0.000000, 3: 0.703578} + - time: 2.800000 + value: {0: -0.697265, 1: -0.165297, 2: 0.000000, 3: 0.697494} + - time: 2.833333 + value: {0: -0.697594, 1: -0.193562, 2: 0.000000, 3: 0.689853} + - time: 2.866667 + value: {0: -0.696255, 1: -0.229941, 2: 0.000000, 3: 0.679968} + - time: 2.900000 + value: {0: -0.691283, 1: -0.278540, 2: -0.000000, 3: 0.666741} + - time: 2.933333 + value: {0: -0.678146, 1: -0.345890, 2: 0.000000, 3: 0.648443} + - time: 2.966667 + value: {0: -0.647708, 1: -0.438188, 2: -0.000000, 3: 0.623270} + - time: 3.000000 + value: {0: -0.588500, 1: -0.552116, 2: -0.000000, 3: 0.590623} + - time: 3.033333 + value: {0: -0.499958, 1: -0.664643, 2: 0.000000, 3: 0.555241} + - time: 3.066667 + value: {0: -0.394790, 1: -0.756053, 2: 0.000000, 3: 0.522039} + - time: 3.100000 + value: {0: 0.277859, 1: 0.825747, 2: 0.000000, 3: -0.490852} + - time: 3.133333 + value: {0: 0.150877, 1: 0.874600, 2: -0.000000, 3: -0.460772} + - time: 3.166667 + value: {0: 0.011229, 1: 0.902097, 2: 0.000000, 3: -0.431388} + - time: 3.200000 + value: {0: -0.135041, 1: 0.904501, 2: 0.000000, 3: -0.404526} + - time: 3.233333 + value: {0: -0.273490, 1: 0.882795, 2: -0.000000, 3: -0.381938} + - time: 3.266667 + value: {0: -0.398813, 1: 0.842358, 2: 0.000000, 3: -0.362466} + - time: 3.300000 + value: {0: -0.510717, 1: 0.787765, 2: -0.000000, 3: -0.344376} + - time: 3.333333 + value: {0: -0.612378, 1: 0.720106, 2: 0.000000, 3: -0.326252} + - time: 3.366667 + value: {0: 0.707283, 1: -0.636795, 2: 0.000000, 3: 0.306990} + - time: 3.400000 + value: {0: 0.797733, 1: -0.530616, 2: -0.000000, 3: 0.286476} + - time: 3.433333 + value: {0: 0.880405, 1: -0.391193, 2: -0.000000, 3: 0.268058} + - time: 3.466667 + value: {0: 0.943324, 1: -0.212523, 2: 0.000000, 3: 0.254900} + - time: 3.500000 + value: {0: 0.968430, 1: 0.002768, 2: -0.000000, 3: 0.249270} + - time: 3.533333 + value: {0: 0.937748, 1: 0.237019, 2: -0.000000, 3: 0.253870} + - time: 3.566667 + value: {0: 0.846168, 1: 0.458812, 2: 0.000000, 3: 0.271092} + - time: 3.600000 + value: {0: 0.709751, 1: 0.636375, 2: -0.000000, 3: 0.302126} + - time: 3.633333 + value: {0: 0.563867, 1: 0.750106, 2: -0.000000, 3: 0.345537} + - time: 3.666667 + value: {0: 0.435160, 1: 0.808296, 2: 0.000000, 3: 0.396602} + - time: 3.700000 + value: {0: 0.329559, 1: 0.829483, 2: -0.000000, 3: 0.450942} + - time: 3.733333 + value: {0: 0.245215, 1: 0.827342, 2: -0.000000, 3: 0.505346} + - time: 3.766667 + value: {0: 0.178395, 1: 0.810708, 2: 0.000000, 3: 0.557609} + - time: 3.800000 + value: {0: 0.126486, 1: 0.786186, 2: -0.000000, 3: 0.604908} + - time: 3.833333 + value: {0: 0.086942, 1: 0.759790, 2: -0.000000, 3: 0.644330} + - time: 3.866667 + value: {0: 0.055992, 1: 0.733779, 2: 0.000000, 3: 0.677077} + - time: 3.900000 + value: {0: 0.030685, 1: 0.708436, 2: 0.000000, 3: 0.705108} + - time: 3.933333 + value: {0: 0.009110, 1: 0.683462, 2: -0.000000, 3: 0.729930} + - time: 3.966667 + value: {0: -0.010218, 1: 0.658054, 2: 0.000000, 3: 0.752901} + - time: 4.000000 + value: {0: -0.028233, 1: 0.631296, 2: 0.000000, 3: 0.775028} + - time: 4.033333 + value: {0: -0.045080, 1: 0.602257, 2: 0.000000, 3: 0.797028} + - time: 4.066667 + value: {0: -0.060314, 1: 0.570684, 2: -0.000000, 3: 0.818952} + - time: 4.100000 + value: {0: -0.073627, 1: 0.537037, 2: 0.000000, 3: 0.840339} + - time: 4.133333 + value: {0: -0.084895, 1: 0.501983, 2: 0.000000, 3: 0.860701} + - time: 4.166667 + value: {0: -0.094068, 1: 0.466201, 2: -0.000000, 3: 0.879664} + - time: 4.200000 + value: {0: -0.101176, 1: 0.430405, 2: -0.000000, 3: 0.896948} + - time: 4.233333 + value: {0: -0.107732, 1: 0.394987, 2: 0.000000, 3: 0.912348} + - time: 4.266666 + value: {0: -0.117013, 1: 0.358833, 2: 0.000000, 3: 0.926038} + - time: 4.300000 + value: {0: -0.129663, 1: 0.320538, 2: 0.000000, 3: 0.938319} + - time: 4.333333 + value: {0: -0.145752, 1: 0.278669, 2: -0.000000, 3: 0.949263} + - time: 4.366667 + value: {0: -0.165811, 1: 0.231262, 2: -0.000000, 3: 0.958658} + - time: 4.400000 + value: {0: -0.189413, 1: 0.177131, 2: 0.000000, 3: 0.965788} + - time: 4.433333 + value: {0: -0.215398, 1: 0.115690, 2: -0.000000, 3: 0.969649} + - time: 4.466667 + value: {0: -0.236784, 1: 0.050563, 2: -0.000000, 3: 0.970246} + - time: 4.500000 + value: {0: -0.245756, 1: -0.013178, 2: 0.000000, 3: 0.969242} + - time: 4.533333 + value: {0: -0.242898, 1: -0.075294, 2: 0.000000, 3: 0.967125} + - time: 4.566667 + value: {0: -0.228371, 1: -0.136036, 2: 0.000000, 3: 0.964023} + - time: 4.600000 + value: {0: -0.201927, 1: -0.195493, 2: -0.000000, 3: 0.959692} + - time: 4.633333 + value: {0: -0.162439, 1: -0.253150, 2: 0.000000, 3: 0.953692} + - time: 4.666667 + value: {0: -0.114295, 1: -0.307287, 2: -0.000000, 3: 0.944728} + - time: 4.700000 + value: {0: -0.067631, 1: -0.356692, 2: -0.000000, 3: 0.931771} + - time: 4.733333 + value: {0: -0.025977, 1: -0.402383, 2: -0.000000, 3: 0.915103} + - time: 4.766666 + value: {0: 0.011098, 1: -0.446025, 2: 0.000000, 3: 0.894951} + - time: 4.800000 + value: {0: 0.044949, 1: -0.488936, 2: 0.000000, 3: 0.871161} + - time: 4.833333 + value: {0: 0.076262, 1: -0.532080, 2: -0.000000, 3: 0.843253} + - time: 4.866667 + value: {0: 0.105461, 1: -0.576166, 2: -0.000000, 3: 0.810500} + - time: 4.900000 + value: {0: 0.133162, 1: -0.619330, 2: -0.000000, 3: 0.773756} + - time: 4.933333 + value: {0: 0.160768, 1: -0.656995, 2: 0.000000, 3: 0.736554} + - time: 4.966667 + value: {0: 0.189040, 1: -0.688933, 2: 0.000000, 3: 0.699739} + - time: 5.000000 + value: {0: 0.218847, 1: -0.715951, 2: -0.000000, 3: 0.662963} + - time: 5.033333 + value: {0: 0.251488, 1: -0.738722, 2: -0.000000, 3: 0.625334} + - time: 5.066667 + value: {0: 0.288638, 1: -0.757347, 2: -0.000000, 3: 0.585759} + - time: 5.100000 + value: {0: 0.332731, 1: -0.771032, 2: -0.000000, 3: 0.542954} + - time: 5.133333 + value: {0: -0.386345, 1: 0.777749, 2: 0.000000, 3: -0.495827} + - time: 5.166667 + value: {0: -0.448208, 1: 0.774840, 2: -0.000000, 3: -0.445794} + - time: 5.200000 + value: {0: -0.519904, 1: 0.758158, 2: 0.000000, 3: -0.393568} + - time: 5.233333 + value: {0: -0.605139, 1: 0.720034, 2: -0.000000, 3: -0.339644} + - time: 5.266666 + value: {0: 0.708743, 1: -0.645308, 2: 0.000000, 3: 0.285063} + - time: 5.300000 + value: {0: 0.831886, 1: -0.503720, 2: 0.000000, 3: 0.232880} + - time: 5.333333 + value: {0: 0.952034, 1: -0.239894, 2: 0.000000, 3: 0.189954} + - time: 5.366667 + value: {0: 0.968168, 1: 0.181590, 2: 0.000000, 3: 0.172265} + - time: 5.400000 + value: {0: 0.789079, 1: 0.582663, 2: -0.000000, 3: 0.194572} + - time: 5.433333 + value: {0: 0.559525, 1: 0.790013, 2: -0.000000, 3: 0.250619} + - time: 5.466667 + value: {0: 0.389032, 1: 0.862060, 2: -0.000000, 3: 0.324819} + - time: 5.500000 + value: {0: 0.278061, 1: 0.871416, 2: 0.000000, 3: 0.404124} + - time: 5.533333 + value: {0: 0.205962, 1: 0.853615, 2: 0.000000, 3: 0.478456} + - time: 5.566667 + value: {0: 0.158193, 1: 0.827404, 2: -0.000000, 3: 0.538867} + - time: 5.600000 + value: {0: 0.125356, 1: 0.805201, 2: 0.000000, 3: 0.579601} + - time: 5.633333 + value: {0: 0.100484, 1: 0.788712, 2: 0.000000, 3: 0.606496} + - time: 5.666667 + value: {0: 0.079678, 1: 0.776584, 2: 0.000000, 3: 0.624955} + - time: 5.700000 + value: {0: 0.061014, 1: 0.768014, 2: 0.000000, 3: 0.637520} + - time: 5.733333 + value: {0: 0.043231, 1: 0.762647, 2: -0.000000, 3: 0.645369} + - time: 5.766666 + value: {0: 0.025272, 1: 0.759742, 2: 0.000000, 3: 0.649733} + - time: 5.800000 + value: {0: 0.006274, 1: 0.759048, 2: 0.000000, 3: 0.651004} + - time: 5.833333 + value: {0: -0.014846, 1: 0.760564, 2: -0.000000, 3: 0.649094} + - time: 5.866667 + value: {0: -0.040103, 1: 0.764162, 2: 0.000000, 3: 0.643777} + - time: 5.900000 + value: {0: -0.072052, 1: 0.769255, 2: -0.000000, 3: 0.634867} + - time: 5.933333 + value: {0: -0.113525, 1: 0.775086, 2: -0.000000, 3: 0.621574} + - time: 5.966667 + value: {0: -0.169986, 1: 0.780202, 2: 0.000000, 3: 0.601988} + - time: 6.000000 + value: {0: -0.246272, 1: 0.780150, 2: 0.000000, 3: 0.575079} + - time: 6.033333 + value: {0: -0.348933, 1: 0.766045, 2: -0.000000, 3: 0.539833} + - time: 6.066667 + value: {0: -0.483004, 1: 0.721045, 2: 0.000000, 3: 0.496791} + - time: 6.100000 + value: {0: 0.636749, 1: -0.624450, 2: -0.000000, 3: -0.452341} + - time: 6.133333 + value: {0: 0.777231, 1: -0.472106, 2: 0.000000, 3: -0.415967} + - time: 6.166667 + value: {0: 0.872199, 1: -0.292769, 2: 0.000000, 3: -0.391861} + - time: 6.200000 + value: {0: 0.919857, 1: -0.108065, 2: 0.000000, 3: -0.377073} + - time: 6.233333 + value: {0: 0.925624, 1: 0.081416, 2: -0.000000, 3: -0.369582} + - time: 6.266666 + value: {0: 0.888946, 1: 0.270935, 2: 0.000000, 3: -0.369282} + - time: 6.300000 + value: {0: 0.808517, 1: 0.451886, 2: 0.000000, 3: -0.376961} + - time: 6.333333 + value: {0: 0.688179, 1: 0.609282, 2: 0.000000, 3: -0.393935} + - time: 6.366667 + value: {0: 0.540843, 1: 0.728539, 2: 0.000000, 3: -0.420381} + - time: 6.400000 + value: {0: 0.385969, 1: 0.802797, 2: -0.000000, 3: -0.454472} + - time: 6.433333 + value: {0: 0.242755, 1: 0.835783, 2: 0.000000, 3: -0.492480} + - time: 6.466667 + value: {0: -0.127664, 1: -0.838725, 2: -0.000000, 3: 0.529379} + - time: 6.500000 + value: {0: -0.044073, 1: -0.825943, 2: -0.000000, 3: 0.562028} + - time: 6.533333 + value: {0: 0.017988, 1: -0.806300, 2: 0.000000, 3: 0.591233} + - time: 6.566667 + value: {0: 0.067935, 1: -0.782442, 2: -0.000000, 3: 0.619007} + - time: 6.600000 + value: {0: 0.110026, 1: -0.754896, 2: 0.000000, 3: 0.646550} + - time: 6.633333 + value: {0: 0.147073, 1: -0.722755, 2: -0.000000, 3: 0.675274} + - time: 6.666667 + value: {0: 0.180947, 1: -0.684238, 2: 0.000000, 3: 0.706453} + - time: 6.700000 + value: {0: 0.212379, 1: -0.636821, 2: 0.000000, 3: 0.741184} + - time: 6.733333 + value: {0: 0.241346, 1: -0.576257, 2: -0.000000, 3: 0.780820} + - time: 6.766666 + value: {0: 0.266184, 1: -0.497278, 2: -0.000000, 3: 0.825748} + - time: 6.800000 + value: {0: 0.282931, 1: -0.397773, 2: 0.000000, 3: 0.872770} + - time: 6.833333 + value: {0: 0.287209, 1: -0.281562, 2: 0.000000, 3: 0.915551} + - time: 6.866667 + value: {0: 0.279213, 1: -0.172468, 2: -0.000000, 3: 0.944613} + - time: 6.900000 + value: {0: 0.266453, 1: -0.090287, 2: 0.000000, 3: 0.959610} + - time: 6.933333 + value: {0: 0.253741, 1: -0.031457, 2: 0.000000, 3: 0.966760} + - time: 6.966667 + value: {0: 0.242756, 1: 0.010124, 2: 0.000000, 3: 0.970035} + - time: 7.000000 + value: {0: 0.233355, 1: 0.040975, 2: 0.000000, 3: 0.971528} + - time: 7.033333 + value: {0: 0.225283, 1: 0.064500, 2: 0.000000, 3: 0.972156} + - time: 7.066667 + value: {0: 0.218351, 1: 0.082503, 2: 0.000000, 3: 0.972376} + - time: 7.100000 + value: {0: 0.212309, 1: 0.096373, 2: -0.000000, 3: 0.972439} + - time: 7.133333 + value: {0: 0.206915, 1: 0.107135, 2: -0.000000, 3: 0.972475} + - time: 7.166667 + value: {0: 0.202040, 1: 0.115219, 2: 0.000000, 3: 0.972576} + - time: 7.200000 + value: {0: 0.197581, 1: 0.120673, 2: 0.000000, 3: 0.972831} + - time: 7.233333 + value: {0: 0.193380, 1: 0.123700, 2: 0.000000, 3: 0.973295} + - time: 7.266666 + value: {0: 0.189325, 1: 0.124007, 2: 0.000000, 3: 0.974053} + - time: 7.300000 + value: {0: 0.185255, 1: 0.120482, 2: 0.000000, 3: 0.975277} + - time: 7.333333 + value: {0: 0.180817, 1: 0.112008, 2: -0.000000, 3: 0.977118} + - time: 7.366667 + value: {0: 0.175601, 1: 0.100449, 2: 0.000000, 3: 0.979323} + - time: 7.400000 + value: {0: 0.169171, 1: 0.087369, 2: 0.000000, 3: 0.981707} + - time: 7.433333 + value: {0: 0.161457, 1: 0.073020, 2: 0.000001, 3: 0.984175} + - time: 7.466667 + value: {0: 0.151762, 1: 0.056851, 2: -0.000000, 3: 0.986781} + - time: 7.500000 + value: {0: 0.139415, 1: 0.038603, 2: -0.000000, 3: 0.989481} + - time: 7.533333 + value: {0: 0.123734, 1: 0.018362, 2: -0.000000, 3: 0.992145} + - time: 7.566667 + value: {0: 0.103771, 1: -0.003501, 2: 0.000000, 3: 0.994595} + - time: 7.600000 + value: {0: 0.078710, 1: -0.025903, 2: -0.000001, 3: 0.996561} + - time: 7.633333 + value: {0: 0.046930, 1: -0.046583, 2: 0.000000, 3: 0.997811} + - time: 7.666667 + value: {0: 0.008110, 1: -0.059423, 2: -0.000000, 3: 0.998200} + - time: 7.700000 + value: {0: -0.035115, 1: -0.066417, 2: 0.000000, 3: 0.997174} + - time: 7.733333 + value: {0: -0.080799, 1: -0.068921, 2: -0.000000, 3: 0.994345} + - time: 7.766666 + value: {0: -0.135331, 1: -0.068998, 2: 0.000000, 3: 0.988395} + - time: 7.800000 + value: {0: -0.186872, 1: -0.068472, 2: 0.000001, 3: 0.979995} + - time: 7.833333 + value: {0: -0.238339, 1: -0.067533, 2: -0.000000, 3: 0.968831} + - time: 7.866667 + value: {0: -0.286663, 1: -0.066051, 2: -0.000000, 3: 0.955752} + - time: 7.900000 + value: {0: -0.338470, 1: -0.063625, 2: 0.000000, 3: 0.938824} + - time: 7.933333 + value: {0: -0.385183, 1: -0.060802, 2: -0.000000, 3: 0.920835} + - time: 7.966667 + value: {0: -0.440650, 1: -0.055392, 2: 0.000000, 3: 0.895968} + - time: 8.000000 + value: {0: -0.496192, 1: -0.048420, 2: -0.000000, 3: 0.866862} + - time: 8.033334 + value: {0: -0.544742, 1: -0.041153, 2: 0.000000, 3: 0.837594} + - time: 8.066667 + value: {0: -0.580980, 1: -0.034486, 2: -0.000000, 3: 0.813187} + - time: 8.100000 + value: {0: -0.608889, 1: -0.028381, 2: 0.000000, 3: 0.792748} + - time: 8.133333 + value: {0: -0.633412, 1: -0.022495, 2: 0.000000, 3: 0.773488} + - time: 8.166667 + value: {0: -0.654680, 1: -0.016941, 2: -0.000000, 3: 0.755716} + - time: 8.200000 + value: {0: -0.672909, 1: -0.011807, 2: 0.000000, 3: 0.739631} + - time: 8.233334 + value: {0: -0.678546, 1: -0.010034, 2: -0.000000, 3: 0.734489} + - time: 8.266666 + value: {0: -0.682005, 1: -0.008884, 2: -0.000000, 3: 0.731294} + - time: 8.300000 + value: {0: -0.684955, 1: -0.007889, 2: -0.000000, 3: 0.728543} + - time: 8.333333 + value: {0: -0.687430, 1: -0.007046, 2: 0.000000, 3: 0.726216} + - time: 8.366667 + value: {0: -0.689459, 1: -0.006347, 2: -0.000000, 3: 0.724297} + - time: 8.433333 + value: {0: -0.692883, 1: -0.005155, 2: -0.000000, 3: 0.721032} + - time: 8.533334 + value: {0: -0.697223, 1: -0.003620, 2: -0.000000, 3: 0.716845} + - time: 8.633333 + value: {0: -0.700631, 1: -0.002393, 2: -0.000000, 3: 0.713520} + - time: 8.666667 + value: {0: -0.701064, 1: -0.002236, 2: 0.000000, 3: 0.713095} + - time: 9.266666 + value: {0: -0.704179, 1: -0.001091, 2: -0.000000, 3: 0.710022} + - time: 9.600000 + value: {0: -0.705011, 1: -0.000783, 2: 0.000000, 3: 0.709196} + - time: 10.233334 + value: {0: -0.705252, 1: -0.000693, 2: 0.000000, 3: 0.708957} + - time: 13.333333 + value: {0: -0.705252, 1: -0.000693, 2: 0.000000, 3: 0.708957} + scale: + [] + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset.meta new file mode 100644 index 00000000..d0b339dc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 1.animationAsset.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + AnimationAsset: ! 8811a6ee-076e-4144-a4e2-0cdc9e2fe3c2 + ImporterName: AnimationAssetImporter + PrimaryAsset: ! 8811a6ee-076e-4144-a4e2-0cdc9e2fe3c2 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset new file mode 100644 index 00000000..8dfd7f43 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset @@ -0,0 +1,1394 @@ +- ! + PackagePath: "" + AnimationPropertiesLayers: + piece_0: + position: + - time: 0.000000 + value: {x: -0.000002, y: 4.100674, z: -0.064313} + - time: 0.033333 + value: {x: -0.000002, y: 4.100674, z: -0.064313} + - time: 0.066667 + value: {x: -0.000002, y: 4.129870, z: -0.064313} + - time: 0.100000 + value: {x: -0.000002, y: 4.166759, z: -0.064313} + - time: 0.133333 + value: {x: -0.000002, y: 4.210787, z: -0.064313} + - time: 0.166667 + value: {x: -0.000002, y: 4.261509, z: -0.064313} + - time: 0.200000 + value: {x: -0.000002, y: 4.318566, z: -0.064313} + - time: 0.233333 + value: {x: -0.000002, y: 4.381668, z: -0.064312} + - time: 0.266667 + value: {x: -0.000002, y: 4.450577, z: -0.064311} + - time: 0.300000 + value: {x: -0.000003, y: 4.525103, z: -0.064310} + - time: 0.333333 + value: {x: -0.000003, y: 4.605088, z: -0.064309} + - time: 0.366667 + value: {x: -0.000004, y: 4.690409, z: -0.064308} + - time: 0.400000 + value: {x: -0.000004, y: 4.780968, z: -0.064307} + - time: 0.433333 + value: {x: -0.000005, y: 4.876691, z: -0.064307} + - time: 0.466667 + value: {x: -0.000006, y: 4.977525, z: -0.064306} + - time: 0.500000 + value: {x: -0.000006, y: 5.083436, z: -0.064305} + - time: 0.533333 + value: {x: -0.000007, y: 5.194406, z: -0.064304} + - time: 0.566667 + value: {x: -0.000007, y: 5.310433, z: -0.064303} + - time: 0.600000 + value: {x: -0.000008, y: 5.431531, z: -0.064302} + - time: 0.633333 + value: {x: -0.000008, y: 5.557727, z: -0.064301} + - time: 0.666667 + value: {x: -0.000009, y: 5.689063, z: -0.064300} + - time: 0.700000 + value: {x: -0.000009, y: 5.825592, z: -0.064298} + - time: 0.733333 + value: {x: -0.000010, y: 5.967384, z: -0.064297} + - time: 0.766667 + value: {x: -0.000011, y: 6.114520, z: -0.064295} + - time: 0.800000 + value: {x: -0.000011, y: 6.267096, z: -0.064294} + - time: 0.833333 + value: {x: -0.000012, y: 6.425221, z: -0.064293} + - time: 0.866667 + value: {x: -0.000012, y: 6.589019, z: -0.064291} + - time: 0.900000 + value: {x: -0.000013, y: 6.758633, z: -0.064290} + - time: 0.933333 + value: {x: -0.000014, y: 6.934217, z: -0.064288} + - time: 0.966667 + value: {x: -0.000015, y: 7.115947, z: -0.064286} + - time: 1.000000 + value: {x: -0.000016, y: 7.304016, z: -0.064284} + - time: 1.033333 + value: {x: -0.000017, y: 7.498638, z: -0.064282} + - time: 1.066667 + value: {x: -0.000018, y: 7.700050, z: -0.064281} + - time: 1.100000 + value: {x: -0.000019, y: 7.908516, z: -0.064279} + - time: 1.133333 + value: {x: -0.000020, y: 8.124324, z: -0.064276} + - time: 1.166667 + value: {x: -0.000021, y: 8.347796, z: -0.064274} + - time: 1.200000 + value: {x: -0.000022, y: 8.579288, z: -0.064272} + - time: 1.233333 + value: {x: -0.000023, y: 8.819194, z: -0.064270} + - time: 1.266667 + value: {x: -0.000025, y: 9.067956, z: -0.064267} + - time: 1.300000 + value: {x: -0.000832, y: 9.326078, z: -0.063930} + - time: 1.333333 + value: {x: -0.001670, y: 9.594097, z: -0.063579} + - time: 1.366667 + value: {x: -0.002541, y: 9.872632, z: -0.063215} + - time: 1.400000 + value: {x: -0.003447, y: 10.162380, z: -0.062836} + - time: 1.433333 + value: {x: -0.004391, y: 10.464137, z: -0.062441} + - time: 1.466667 + value: {x: -0.005375, y: 10.778811, z: -0.062029} + - time: 1.500000 + value: {x: -0.006403, y: 11.107444, z: -0.061599} + - time: 1.533333 + value: {x: -0.007478, y: 11.451240, z: -0.061149} + - time: 1.566667 + value: {x: -0.008606, y: 11.811612, z: -0.060677} + - time: 1.600000 + value: {x: -0.009790, y: 12.190226, z: -0.060181} + - time: 1.633333 + value: {x: -0.011038, y: 12.589063, z: -0.059658} + - time: 1.666667 + value: {x: -0.012357, y: 13.010522, z: -0.059105} + - time: 1.700000 + value: {x: -0.013756, y: 13.457548, z: -0.058519} + - time: 1.733333 + value: {x: -0.015247, y: 13.933816, z: -0.057894} + - time: 1.766667 + value: {x: -0.030565, y: 14.442986, z: -0.051881} + - time: 1.800000 + value: {x: -0.051750, y: 14.991804, z: -0.043580} + - time: 1.833333 + value: {x: -0.074800, y: 15.588904, z: -0.034548} + - time: 1.866667 + value: {x: -0.100167, y: 16.246031, z: -0.024606} + - time: 1.900000 + value: {x: -0.128531, y: 16.980749, z: -0.013489} + - time: 1.933333 + value: {x: -0.160993, y: 17.821550, z: -0.000764} + - time: 1.966667 + value: {x: -0.199569, y: 18.820677, z: 0.014360} + - time: 2.000000 + value: {x: -0.282414, y: 20.096479, z: 0.046629} + - time: 2.033333 + value: {x: -0.393695, y: 21.683130, z: 0.089947} + - time: 2.066667 + value: {x: -0.517810, y: 23.452711, z: 0.138263} + - time: 2.100000 + value: {x: -0.680404, y: 25.410875, z: 0.201429} + - time: 2.133333 + value: {x: -0.870199, y: 27.565598, z: 0.275116} + - time: 2.166667 + value: {x: -1.089136, y: 29.927343, z: 0.360069} + - time: 2.200000 + value: {x: -1.345562, y: 32.505077, z: 0.459495} + - time: 2.233333 + value: {x: -1.633050, y: 35.292290, z: 0.569251} + - time: 2.266667 + value: {x: -1.954544, y: 38.294159, z: 0.690071} + - time: 2.300000 + value: {x: -2.313212, y: 41.535824, z: 0.806929} + - time: 2.333333 + value: {x: -2.704681, y: 45.023113, z: 0.917197} + - time: 2.366667 + value: {x: -3.130800, y: 48.765873, z: 1.009830} + - time: 2.400000 + value: {x: -3.591383, y: 52.767967, z: 1.053854} + - time: 2.433333 + value: {x: -4.084279, y: 57.037174, z: 1.044911} + - time: 2.466667 + value: {x: -4.609148, y: 61.582451, z: 0.960748} + - time: 2.500000 + value: {x: -5.164922, y: 66.413033, z: 0.773114} + - time: 2.533333 + value: {x: -5.749734, y: 71.537376, z: 0.446382} + - time: 2.566667 + value: {x: -6.360626, y: 76.961914, z: -0.064668} + - time: 2.600000 + value: {x: -6.993049, y: 82.688896, z: -0.817961} + - time: 2.633333 + value: {x: -7.638432, y: 88.709778, z: -1.906313} + - time: 2.666667 + value: {x: -8.279595, y: 94.991997, z: -3.476897} + - time: 2.700000 + value: {x: -8.885023, y: 101.495659, z: -5.636854} + - time: 2.733333 + value: {x: -9.361837, y: 108.107666, z: -8.611780} + - time: 2.766667 + value: {x: -9.599564, y: 114.681519, z: -12.562867} + - time: 2.800000 + value: {x: -9.482107, y: 121.041809, z: -17.584784} + - time: 2.833333 + value: {x: -8.947419, y: 127.087463, z: -23.646006} + - time: 2.866667 + value: {x: -7.936666, y: 132.697784, z: -30.690199} + - time: 2.900000 + value: {x: -6.456824, y: 137.865829, z: -38.577190} + - time: 2.933333 + value: {x: -4.517138, y: 142.696167, z: -47.283192} + - time: 2.966667 + value: {x: -2.123589, y: 147.217758, z: -56.730179} + - time: 3.000000 + value: {x: 0.794039, y: 151.412445, z: -66.823586} + - time: 3.033333 + value: {x: 4.284599, y: 155.217651, z: -77.359093} + - time: 3.066667 + value: {x: 8.351398, y: 158.502701, z: -88.014534} + - time: 3.100000 + value: {x: 13.108130, y: 161.171356, z: -98.686157} + - time: 3.133333 + value: {x: 18.606747, y: 163.186111, z: -109.287506} + - time: 3.166667 + value: {x: 24.973124, y: 164.405930, z: -119.668724} + - time: 3.200000 + value: {x: 32.264008, y: 164.725922, z: -129.645798} + - time: 3.233333 + value: {x: 40.528812, y: 164.008423, z: -138.962845} + - time: 3.266667 + value: {x: 49.725777, y: 162.170654, z: -147.347488} + - time: 3.300000 + value: {x: 59.769165, y: 159.168137, z: -154.547379} + - time: 3.333333 + value: {x: 70.420135, y: 155.147827, z: -160.510468} + - time: 3.366667 + value: {x: 81.458923, y: 150.257431, z: -165.227737} + - time: 3.400000 + value: {x: 92.732231, y: 144.649414, z: -168.790894} + - time: 3.433333 + value: {x: 104.107292, y: 138.383560, z: -171.131042} + - time: 3.466667 + value: {x: 115.459122, y: 131.518936, z: -172.187424} + - time: 3.500000 + value: {x: 126.636292, y: 124.103180, z: -171.839020} + - time: 3.533333 + value: {x: 137.384796, y: 116.187630, z: -169.829315} + - time: 3.566667 + value: {x: 147.389526, y: 107.836296, z: -165.840195} + - time: 3.600000 + value: {x: 156.079575, y: 99.291618, z: -159.576370} + - time: 3.633333 + value: {x: 162.730957, y: 90.943497, z: -150.843262} + - time: 3.666667 + value: {x: 166.698044, y: 83.334923, z: -139.923065} + - time: 3.700000 + value: {x: 168.151505, y: 76.669807, z: -127.657990} + - time: 3.733333 + value: {x: 167.505630, y: 70.924477, z: -114.739197} + - time: 3.766667 + value: {x: 165.067871, y: 66.028625, z: -101.578896} + - time: 3.800000 + value: {x: 161.027008, y: 61.920090, z: -88.438370} + - time: 3.833333 + value: {x: 155.469315, y: 58.571312, z: -75.527931} + - time: 3.866667 + value: {x: 148.401520, y: 56.000046, z: -63.078789} + - time: 3.900000 + value: {x: 139.779785, y: 54.271889, z: -51.399475} + - time: 3.933333 + value: {x: 129.490112, y: 53.503689, z: -40.892982} + - time: 3.966667 + value: {x: 117.529190, y: 53.851944, z: -32.192425} + - time: 4.000000 + value: {x: 104.090240, y: 55.456039, z: -26.051422} + - time: 4.033333 + value: {x: 89.778122, y: 58.258148, z: -22.741053} + - time: 4.066667 + value: {x: 75.236786, y: 62.053444, z: -21.969246} + - time: 4.100000 + value: {x: 60.858681, y: 66.660873, z: -23.339960} + - time: 4.133333 + value: {x: 46.898861, y: 71.946716, z: -26.510962} + - time: 4.166667 + value: {x: 33.543213, y: 77.816002, z: -31.210819} + - time: 4.200000 + value: {x: 20.905979, y: 84.223076, z: -37.249584} + - time: 4.233333 + value: {x: 9.110548, y: 91.152901, z: -44.509060} + - time: 4.266666 + value: {x: -1.668491, y: 98.598679, z: -52.905872} + - time: 4.300000 + value: {x: -11.205782, y: 106.565163, z: -62.384895} + - time: 4.333333 + value: {x: -19.197975, y: 115.057655, z: -72.899307} + - time: 4.366667 + value: {x: -25.391294, y: 124.005325, z: -84.311127} + - time: 4.400000 + value: {x: -29.991135, y: 133.220673, z: -96.357346} + - time: 4.433333 + value: {x: -33.398941, y: 142.537918, z: -108.811447} + - time: 4.466667 + value: {x: -36.124916, y: 151.863846, z: -121.539146} + - time: 4.500000 + value: {x: -38.711720, y: 161.106033, z: -134.419785} + - time: 4.533333 + value: {x: -41.852428, y: 170.203949, z: -147.389297} + - time: 4.566667 + value: {x: -46.530369, y: 178.939621, z: -160.182465} + - time: 4.600000 + value: {x: -54.148159, y: 186.794296, z: -172.129105} + - time: 4.633333 + value: {x: -65.716980, y: 192.739426, z: -181.783401} + - time: 4.666667 + value: {x: -80.401810, y: 196.192688, z: -188.144943} + - time: 4.700000 + value: {x: -96.351166, y: 197.614563, z: -191.640594} + - time: 4.733333 + value: {x: -112.808464, y: 197.552551, z: -192.958115} + - time: 4.766666 + value: {x: -129.309875, y: 196.292969, z: -192.446259} + - time: 4.800000 + value: {x: -145.600128, y: 193.958771, z: -190.233521} + - time: 4.833333 + value: {x: -161.438965, y: 190.590881, z: -186.325790} + - time: 4.866667 + value: {x: -176.511017, y: 186.190186, z: -180.659760} + - time: 4.900000 + value: {x: -190.362885, y: 180.673798, z: -173.019623} + - time: 4.933333 + value: {x: -202.243820, y: 174.012985, z: -163.242233} + - time: 4.966667 + value: {x: -211.325089, y: 166.310135, z: -151.389755} + - time: 5.000000 + value: {x: -217.224854, y: 157.866791, z: -138.040802} + - time: 5.033333 + value: {x: -220.194702, y: 149.004288, z: -123.930687} + - time: 5.066667 + value: {x: -220.471802, y: 139.929092, z: -109.596268} + - time: 5.100000 + value: {x: -218.171494, y: 130.764145, z: -95.451157} + - time: 5.133333 + value: {x: -213.386810, y: 121.617287, z: -81.895439} + - time: 5.166667 + value: {x: -205.898087, y: 112.604729, z: -69.451424} + - time: 5.200000 + value: {x: -195.537811, y: 103.996651, z: -58.948444} + - time: 5.233333 + value: {x: -182.131729, y: 96.286568, z: -51.694839} + - time: 5.266666 + value: {x: -166.370255, y: 90.262154, z: -49.114609} + - time: 5.300000 + value: {x: -149.766708, y: 86.141815, z: -50.777218} + - time: 5.333333 + value: {x: -133.378876, y: 83.610634, z: -55.374424} + - time: 5.366667 + value: {x: -117.438736, y: 82.196251, z: -61.806927} + - time: 5.400000 + value: {x: -101.918785, y: 81.628929, z: -69.534325} + - time: 5.433333 + value: {x: -86.825462, y: 81.686310, z: -78.105751} + - time: 5.466667 + value: {x: -72.134613, y: 82.254730, z: -87.293724} + - time: 5.500000 + value: {x: -57.720196, y: 83.232315, z: -96.959229} + - time: 5.533333 + value: {x: -43.562679, y: 84.568535, z: -106.991592} + - time: 5.566667 + value: {x: -29.618462, y: 86.212753, z: -117.299171} + - time: 5.600000 + value: {x: -15.850748, y: 88.144043, z: -127.828362} + - time: 5.633333 + value: {x: -2.239188, y: 90.349197, z: -138.532974} + - time: 5.666667 + value: {x: 11.200747, y: 92.858971, z: -149.408539} + - time: 5.700000 + value: {x: 24.456499, y: 95.706253, z: -160.456070} + - time: 5.733333 + value: {x: 37.485996, y: 98.947083, z: -171.675140} + - time: 5.766666 + value: {x: 50.253719, y: 102.642342, z: -183.070572} + - time: 5.800000 + value: {x: 62.667622, y: 106.889565, z: -194.633408} + - time: 5.833333 + value: {x: 74.646873, y: 111.812729, z: -206.376633} + - time: 5.866667 + value: {x: 86.072792, y: 117.664253, z: -218.369751} + - time: 5.900000 + value: {x: 96.561661, y: 124.683006, z: -230.476639} + - time: 5.933333 + value: {x: 105.562988, y: 133.483566, z: -242.671127} + - time: 5.966667 + value: {x: 111.849060, y: 144.735077, z: -254.462219} + - time: 6.000000 + value: {x: 113.495689, y: 158.602692, z: -264.831451} + - time: 6.033333 + value: {x: 109.378738, y: 173.631683, z: -272.632843} + - time: 6.066667 + value: {x: 99.980530, y: 187.570267, z: -277.285400} + - time: 6.100000 + value: {x: 87.163910, y: 199.270096, z: -279.448212} + - time: 6.133333 + value: {x: 72.254524, y: 208.413239, z: -279.814972} + - time: 6.166667 + value: {x: 56.168270, y: 215.249161, z: -279.024780} + - time: 6.200000 + value: {x: 39.387646, y: 220.045822, z: -277.397339} + - time: 6.233333 + value: {x: 22.338797, y: 223.209320, z: -275.154053} + - time: 6.266666 + value: {x: 5.147619, y: 224.880447, z: -272.360229} + - time: 6.300000 + value: {x: -12.012612, y: 225.182388, z: -269.086029} + - time: 6.333333 + value: {x: -29.019341, y: 224.037949, z: -265.321228} + - time: 6.366667 + value: {x: -45.734261, y: 221.393112, z: -261.066864} + - time: 6.400000 + value: {x: -61.876160, y: 216.985168, z: -256.275513} + - time: 6.433333 + value: {x: -77.131096, y: 210.553848, z: -250.905823} + - time: 6.466667 + value: {x: -90.762833, y: 201.669083, z: -244.916656} + - time: 6.500000 + value: {x: -102.097061, y: 190.416275, z: -238.219788} + - time: 6.533333 + value: {x: -110.441528, y: 177.299759, z: -230.662537} + - time: 6.566667 + value: {x: -115.524788, y: 163.140915, z: -222.193481} + - time: 6.600000 + value: {x: -117.277908, y: 148.782623, z: -212.827377} + - time: 6.633333 + value: {x: -116.027084, y: 134.945099, z: -202.682419} + - time: 6.666667 + value: {x: -112.210579, y: 122.119621, z: -191.901108} + - time: 6.700000 + value: {x: -106.319717, y: 110.575363, z: -180.636719} + - time: 6.733333 + value: {x: -98.850700, y: 100.410789, z: -169.059448} + - time: 6.766666 + value: {x: -90.136581, y: 91.517830, z: -157.307358} + - time: 6.800000 + value: {x: -80.472542, y: 83.615555, z: -145.625854} + - time: 6.833333 + value: {x: -69.948944, y: 76.553452, z: -134.188950} + - time: 6.866667 + value: {x: -58.635025, y: 70.216995, z: -123.153366} + - time: 6.900000 + value: {x: -46.510021, y: 64.565369, z: -112.692688} + - time: 6.933333 + value: {x: -33.515175, y: 59.612274, z: -103.051682} + - time: 6.966667 + value: {x: -19.578926, y: 55.406521, z: -94.553665} + - time: 7.000000 + value: {x: -4.525906, y: 52.111794, z: -87.777718} + - time: 7.033333 + value: {x: 11.610830, y: 50.004044, z: -83.642029} + - time: 7.066667 + value: {x: 28.245358, y: 49.494770, z: -83.468460} + - time: 7.100000 + value: {x: 43.997562, y: 50.907787, z: -88.424957} + - time: 7.133333 + value: {x: 57.428776, y: 53.854942, z: -97.589302} + - time: 7.166667 + value: {x: 68.556244, y: 57.756760, z: -109.213394} + - time: 7.200000 + value: {x: 77.708954, y: 62.275940, z: -122.251938} + - time: 7.233333 + value: {x: 85.232445, y: 67.206955, z: -136.084854} + - time: 7.266666 + value: {x: 91.324722, y: 72.465279, z: -150.429306} + - time: 7.300000 + value: {x: 96.063736, y: 78.012581, z: -165.112778} + - time: 7.333333 + value: {x: 99.483025, y: 83.820839, z: -179.985199} + - time: 7.366667 + value: {x: 101.549812, y: 89.882286, z: -194.925781} + - time: 7.400000 + value: {x: 102.151093, y: 96.199173, z: -209.804184} + - time: 7.433333 + value: {x: 101.055939, y: 102.793381, z: -224.485855} + - time: 7.466667 + value: {x: 97.990784, y: 109.634445, z: -238.704849} + - time: 7.500000 + value: {x: 92.623993, y: 116.632141, z: -252.026199} + - time: 7.533333 + value: {x: 84.631866, y: 123.635422, z: -263.855530} + - time: 7.566667 + value: {x: 74.009224, y: 130.363022, z: -273.490112} + - time: 7.600000 + value: {x: 61.418068, y: 136.509506, z: -280.704803} + - time: 7.633333 + value: {x: 47.602654, y: 141.951279, z: -285.772064} + - time: 7.666667 + value: {x: 33.062740, y: 146.672134, z: -289.042175} + - time: 7.700000 + value: {x: 18.146059, y: 150.682327, z: -290.817108} + - time: 7.733333 + value: {x: 3.026368, y: 154.013000, z: -291.341583} + - time: 7.766666 + value: {x: -12.159245, y: 156.675552, z: -290.792389} + - time: 7.800000 + value: {x: -27.298445, y: 158.665222, z: -289.299042} + - time: 7.833333 + value: {x: -42.301018, y: 159.961990, z: -286.954407} + - time: 7.866667 + value: {x: -57.136913, y: 160.527084, z: -283.808289} + - time: 7.900000 + value: {x: -71.725044, y: 160.288010, z: -279.886963} + - time: 7.933333 + value: {x: -85.940643, y: 159.139618, z: -275.200226} + - time: 7.966667 + value: {x: -99.628899, y: 156.934662, z: -269.736694} + - time: 8.000000 + value: {x: -112.571640, y: 153.467407, z: -263.466003} + - time: 8.033334 + value: {x: -124.420433, y: 148.466843, z: -256.360077} + - time: 8.066667 + value: {x: -134.706161, y: 141.770294, z: -248.474472} + - time: 8.100000 + value: {x: -143.123795, y: 133.570007, z: -239.978836} + - time: 8.133333 + value: {x: -149.566299, y: 124.226196, z: -231.089584} + - time: 8.166667 + value: {x: -154.110031, y: 114.128159, z: -221.998718} + - time: 8.200000 + value: {x: -156.942307, y: 103.608414, z: -212.835999} + - time: 8.233334 + value: {x: -158.280838, y: 92.920784, z: -203.674072} + - time: 8.266666 + value: {x: -158.307785, y: 82.253647, z: -194.544708} + - time: 8.300000 + value: {x: -157.208069, y: 71.748344, z: -185.451614} + - time: 8.333333 + value: {x: -155.120468, y: 61.513344, z: -176.381882} + - time: 8.366667 + value: {x: -152.142426, y: 51.644951, z: -167.312378} + - time: 8.400000 + value: {x: -148.331039, y: 42.248829, z: -158.212280} + - time: 8.433333 + value: {x: -143.796783, y: 33.583611, z: -149.185333} + - time: 8.466666 + value: {x: -138.705185, y: 25.859798, z: -140.342911} + - time: 8.500000 + value: {x: -133.110062, y: 19.228519, z: -131.682022} + - time: 8.533334 + value: {x: -127.123558, y: 13.662033, z: -123.227013} + - time: 8.566667 + value: {x: -120.831726, y: 9.149284, z: -115.047874} + - time: 8.600000 + value: {x: -114.355980, y: 5.575725, z: -107.194344} + - time: 8.633333 + value: {x: -107.793465, y: 2.833862, z: -99.697670} + - time: 8.666667 + value: {x: -101.228691, y: 0.819944, z: -92.579704} + - time: 8.700000 + value: {x: -94.740845, y: -0.571098, z: -85.856834} + - time: 8.733334 + value: {x: -88.381889, y: -1.444835, z: -79.520348} + - time: 8.766666 + value: {x: -82.194870, y: -1.877333, z: -73.568703} + - time: 8.800000 + value: {x: -76.223373, y: -1.958555, z: -67.993851} + - time: 8.833333 + value: {x: -70.488861, y: -1.782280, z: -62.766258} + - time: 8.866667 + value: {x: -64.947296, y: -1.367540, z: -57.832405} + - time: 8.900000 + value: {x: -59.661037, y: -0.808640, z: -53.201485} + - time: 8.933333 + value: {x: -54.658726, y: -0.129591, z: -48.884315} + - time: 8.966666 + value: {x: -49.880581, y: 0.621589, z: -44.799267} + - time: 9.000000 + value: {x: -45.408646, y: 1.391544, z: -40.993641} + - time: 9.033334 + value: {x: -41.142582, y: 2.166831, z: -37.362663} + - time: 9.066667 + value: {x: -37.123344, y: 2.929995, z: -33.933319} + - time: 9.100000 + value: {x: -33.370529, y: 3.679278, z: -30.721092} + - time: 9.133333 + value: {x: -29.854275, y: 4.424206, z: -27.699574} + - time: 9.166667 + value: {x: -26.561594, y: 5.172714, z: -24.856340} + - time: 9.200000 + value: {x: -23.500114, y: 5.929038, z: -22.196560} + - time: 9.233334 + value: {x: -20.650196, y: 6.704056, z: -19.701817} + - time: 9.266666 + value: {x: -17.998663, y: 7.498439, z: -17.361546} + - time: 9.300000 + value: {x: -15.574231, y: 8.368666, z: -15.184690} + - time: 9.333333 + value: {x: -13.367225, y: 9.307393, z: -13.166396} + - time: 9.366667 + value: {x: -11.346405, y: 10.260587, z: -11.294932} + - time: 9.400000 + value: {x: -9.544242, y: 11.353498, z: -9.572159} + - time: 9.433333 + value: {x: -7.881788, y: 12.390055, z: -7.977996} + - time: 9.466666 + value: {x: -6.457127, y: 13.594611, z: -6.574945} + - time: 9.500000 + value: {x: -5.179698, y: 14.674122, z: -5.316952} + - time: 9.533334 + value: {x: -4.227682, y: 15.854352, z: -4.362171} + - time: 9.566667 + value: {x: -3.456197, y: 16.934521, z: -3.582824} + - time: 9.600000 + value: {x: -2.801113, y: 17.850965, z: -2.921111} + - time: 9.633333 + value: {x: -2.314677, y: 18.692480, z: -2.428258} + - time: 9.666667 + value: {x: -2.029158, y: 19.527142, z: -2.135840} + - time: 9.700000 + value: {x: -1.787793, y: 20.232328, z: -1.888679} + - time: 9.733334 + value: {x: -1.581012, y: 20.836136, z: -1.676954} + - time: 9.766666 + value: {x: -1.399274, y: 21.366550, z: -1.490880} + - time: 9.800000 + value: {x: -1.232816, y: 21.852129, z: -1.320458} + - time: 9.833333 + value: {x: -1.071613, y: 22.322168, z: -1.155416} + - time: 9.866667 + value: {x: -0.905791, y: 22.805445, z: -0.985645} + - time: 9.900000 + value: {x: -0.820788, y: 23.380272, z: -0.898846} + - time: 9.933333 + value: {x: -0.729361, y: 24.035795, z: -0.805523} + - time: 9.966666 + value: {x: -0.622639, y: 24.800596, z: -0.696599} + - time: 10.000000 + value: {x: -0.496223, y: 25.705973, z: -0.567587} + - time: 10.033334 + value: {x: -0.345827, y: 26.782270, z: -0.414109} + - time: 10.066667 + value: {x: -0.209867, y: 27.857615, z: -0.275417} + - time: 10.100000 + value: {x: -0.171047, y: 28.784868, z: -0.236126} + - time: 10.133333 + value: {x: -0.137585, y: 29.583752, z: -0.202259} + - time: 10.166667 + value: {x: -0.108414, y: 30.279860, z: -0.172738} + - time: 10.200000 + value: {x: -0.082752, y: 30.892012, z: -0.146767} + - time: 10.233334 + value: {x: -0.060052, y: 31.433319, z: -0.123795} + - time: 10.266666 + value: {x: -0.039885, y: 31.914095, z: -0.103385} + - time: 10.300000 + value: {x: -0.021918, y: 32.342274, z: -0.085202} + - time: 10.333333 + value: {x: -0.007157, y: 32.724525, z: -0.070271} + - time: 10.366667 + value: {x: -0.006663, y: 33.066139, z: -0.069853} + - time: 10.400000 + value: {x: -0.006222, y: 33.371239, z: -0.069480} + - time: 10.433333 + value: {x: -0.005828, y: 33.643799, z: -0.069146} + - time: 10.466666 + value: {x: -0.005477, y: 33.886238, z: -0.068849} + - time: 10.500000 + value: {x: -0.005165, y: 34.102219, z: -0.068585} + - time: 10.533334 + value: {x: -0.004888, y: 34.293556, z: -0.068350} + - time: 10.566667 + value: {x: -0.004643, y: 34.462379, z: -0.068143} + - time: 10.600000 + value: {x: -0.004428, y: 34.610825, z: -0.067961} + - time: 10.633333 + value: {x: -0.004241, y: 34.740105, z: -0.067802} + - time: 10.666667 + value: {x: -0.004079, y: 34.852047, z: -0.067665} + - time: 10.700000 + value: {x: -0.003939, y: 34.929836, z: -0.067547} + - time: 10.733334 + value: {x: -0.003822, y: 34.982590, z: -0.067448} + - time: 10.766666 + value: {x: -0.003724, y: 35.011948, z: -0.067364} + - time: 10.800000 + value: {x: -0.003644, y: 35.017365, z: -0.067297} + - time: 10.833333 + value: {x: -0.003581, y: 35.000401, z: -0.067243} + - time: 10.866667 + value: {x: -0.003532, y: 34.961040, z: -0.067202} + - time: 10.900000 + value: {x: -0.003497, y: 34.899837, z: -0.067172} + - time: 10.933333 + value: {x: -0.003474, y: 34.816669, z: -0.067153} + - time: 10.966666 + value: {x: -0.003461, y: 34.712288, z: -0.067142} + - time: 11.000000 + value: {x: -0.003458, y: 34.586456, z: -0.067139} + - time: 11.033334 + value: {x: -0.003458, y: 34.442211, z: -0.067139} + - time: 11.066667 + value: {x: -0.003458, y: 34.281021, z: -0.067139} + - time: 11.100000 + value: {x: -0.003458, y: 34.101807, z: -0.067139} + - time: 11.133333 + value: {x: -0.003458, y: 33.903423, z: -0.067139} + - time: 11.166667 + value: {x: -0.003458, y: 33.684620, z: -0.067139} + - time: 11.200000 + value: {x: -0.003458, y: 33.444065, z: -0.067139} + - time: 11.233334 + value: {x: -0.003458, y: 33.180294, z: -0.067139} + - time: 11.266666 + value: {x: -0.003458, y: 32.891781, z: -0.067139} + - time: 11.300000 + value: {x: -0.003458, y: 32.576836, z: -0.067139} + - time: 11.333333 + value: {x: -0.003458, y: 32.233715, z: -0.067139} + - time: 11.366667 + value: {x: -0.003458, y: 31.860548, z: -0.067139} + - time: 11.400000 + value: {x: -0.003458, y: 31.455429, z: -0.067139} + - time: 11.433333 + value: {x: -0.003458, y: 31.016369, z: -0.067139} + - time: 11.466666 + value: {x: -0.003458, y: 30.541430, z: -0.067139} + - time: 11.500000 + value: {x: -0.003458, y: 30.028717, z: -0.067139} + - time: 11.533334 + value: {x: -0.003458, y: 29.476551, z: -0.067139} + - time: 11.566667 + value: {x: -0.003458, y: 28.883587, z: -0.067139} + - time: 11.600000 + value: {x: -0.003458, y: 28.248917, z: -0.067139} + - time: 11.633333 + value: {x: -0.003458, y: 27.572418, z: -0.067139} + - time: 11.666667 + value: {x: -0.003458, y: 26.854830, z: -0.067139} + - time: 11.700000 + value: {x: -0.003458, y: 26.098135, z: -0.067139} + - time: 11.733334 + value: {x: -0.003458, y: 25.305611, z: -0.067139} + - time: 11.766666 + value: {x: -0.003458, y: 24.482075, z: -0.067139} + - time: 11.800000 + value: {x: -0.003458, y: 23.633686, z: -0.067139} + - time: 11.833333 + value: {x: -0.003458, y: 22.767889, z: -0.067139} + - time: 11.866667 + value: {x: -0.003458, y: 21.892832, z: -0.067139} + - time: 11.900000 + value: {x: -0.003458, y: 21.017044, z: -0.067139} + - time: 11.933333 + value: {x: -0.003458, y: 20.148670, z: -0.067139} + - time: 11.966666 + value: {x: -0.003458, y: 19.295183, z: -0.067139} + - time: 12.000000 + value: {x: -0.003458, y: 18.462835, z: -0.067139} + - time: 12.033334 + value: {x: -0.003458, y: 17.656637, z: -0.067139} + - time: 12.066667 + value: {x: -0.003458, y: 16.880259, z: -0.067139} + - time: 12.100000 + value: {x: -0.003458, y: 16.136082, z: -0.067139} + - time: 12.133333 + value: {x: -0.003458, y: 15.425499, z: -0.067139} + - time: 12.166667 + value: {x: -0.003458, y: 14.748963, z: -0.067139} + - time: 12.200000 + value: {x: -0.003458, y: 14.106343, z: -0.067139} + - time: 12.233334 + value: {x: -0.003458, y: 13.496944, z: -0.067139} + - time: 12.266666 + value: {x: -0.003458, y: 12.919804, z: -0.067139} + - time: 12.300000 + value: {x: -0.003458, y: 12.373671, z: -0.067139} + - time: 12.333333 + value: {x: -0.003458, y: 11.857235, z: -0.067139} + - time: 12.366667 + value: {x: -0.003458, y: 11.369054, z: -0.067139} + - time: 12.400000 + value: {x: -0.003458, y: 10.907737, z: -0.067139} + - time: 12.433333 + value: {x: -0.003458, y: 10.471851, z: -0.067139} + - time: 12.466666 + value: {x: -0.003458, y: 10.060065, z: -0.067139} + - time: 12.500000 + value: {x: -0.003458, y: 9.671048, z: -0.067139} + - time: 12.533334 + value: {x: -0.003458, y: 9.303572, z: -0.067139} + - time: 12.566667 + value: {x: -0.003458, y: 8.956474, z: -0.067139} + - time: 12.600000 + value: {x: -0.003458, y: 8.628633, z: -0.067139} + - time: 12.633333 + value: {x: -0.003458, y: 8.319033, z: -0.067139} + - time: 12.666667 + value: {x: -0.003458, y: 8.026688, z: -0.067139} + - time: 12.700000 + value: {x: -0.003458, y: 7.750711, z: -0.067139} + - time: 12.733334 + value: {x: -0.003458, y: 7.490244, z: -0.067139} + - time: 12.766666 + value: {x: -0.003458, y: 7.244511, z: -0.067139} + - time: 12.800000 + value: {x: -0.003458, y: 7.009225, z: -0.067139} + - time: 12.833333 + value: {x: -0.003458, y: 6.781062, z: -0.067139} + - time: 12.866667 + value: {x: -0.003458, y: 6.560688, z: -0.067139} + - time: 12.900000 + value: {x: -0.003458, y: 6.348794, z: -0.067139} + - time: 12.933333 + value: {x: -0.003458, y: 6.146025, z: -0.067139} + - time: 12.966666 + value: {x: -0.003458, y: 5.953012, z: -0.067139} + - time: 13.000000 + value: {x: -0.003458, y: 5.770293, z: -0.067139} + - time: 13.033334 + value: {x: -0.003458, y: 5.598341, z: -0.067139} + - time: 13.066667 + value: {x: -0.003458, y: 5.437514, z: -0.067139} + - time: 13.100000 + value: {x: -0.003458, y: 5.288033, z: -0.067139} + - time: 13.133333 + value: {x: -0.003458, y: 5.149993, z: -0.067139} + - time: 13.166667 + value: {x: -0.003458, y: 5.023330, z: -0.067139} + - time: 13.200000 + value: {x: -0.003458, y: 4.907851, z: -0.067139} + - time: 13.233334 + value: {x: -0.003458, y: 4.803223, z: -0.067139} + - time: 13.266666 + value: {x: -0.003458, y: 4.709005, z: -0.067139} + - time: 13.300000 + value: {x: -0.003458, y: 4.624659, z: -0.067139} + - time: 13.333333 + value: {x: -0.003458, y: 4.549581, z: -0.067139} + - time: 13.366667 + value: {x: -0.003458, y: 4.483117, z: -0.067139} + - time: 13.400000 + value: {x: -0.003458, y: 4.424594, z: -0.067139} + - time: 13.433333 + value: {x: -0.003458, y: 4.373330, z: -0.067139} + - time: 13.466666 + value: {x: -0.003458, y: 4.328658, z: -0.067139} + - time: 13.500000 + value: {x: -0.003458, y: 4.289935, z: -0.067139} + - time: 13.533334 + value: {x: -0.003458, y: 4.256544, z: -0.067139} + - time: 13.566667 + value: {x: -0.003458, y: 4.227917, z: -0.067139} + - time: 13.600000 + value: {x: -0.003458, y: 4.203518, z: -0.067139} + - time: 13.633333 + value: {x: -0.003458, y: 4.182860, z: -0.067139} + - time: 13.666667 + value: {x: -0.003458, y: 4.165497, z: -0.067139} + - time: 13.700000 + value: {x: -0.003458, y: 4.151024, z: -0.067139} + - time: 13.733334 + value: {x: -0.003458, y: 4.139075, z: -0.067139} + - time: 13.766666 + value: {x: -0.003458, y: 4.129323, z: -0.067139} + - time: 13.800000 + value: {x: -0.003458, y: 4.121470, z: -0.067139} + - time: 13.833333 + value: {x: -0.003458, y: 4.115256, z: -0.067139} + - time: 13.866667 + value: {x: -0.003458, y: 4.110444, z: -0.067139} + - time: 13.900000 + value: {x: -0.003458, y: 4.106823, z: -0.067139} + - time: 13.933333 + value: {x: -0.003458, y: 4.104210, z: -0.067139} + - time: 13.966666 + value: {x: -0.003458, y: 4.102433, z: -0.067139} + - time: 14.000000 + value: {x: -0.003458, y: 4.101347, z: -0.067139} + rotation: + - time: 0.000000 + value: {0: -0.707106, 1: -0.000005, 2: 0.000000, 3: 0.707108} + - time: 0.633333 + value: {0: -0.707045, 1: -0.000321, 2: -0.000000, 3: 0.707169} + - time: 1.266667 + value: {0: -0.706896, 1: -0.001084, 2: -0.000000, 3: 0.707317} + - time: 1.333333 + value: {0: -0.706614, 1: -0.002517, 2: -0.000000, 3: 0.707594} + - time: 1.500000 + value: {0: -0.705788, 1: -0.006634, 2: -0.000000, 3: 0.708392} + - time: 1.633333 + value: {0: -0.704954, 1: -0.010655, 2: -0.000000, 3: 0.709173} + - time: 1.733333 + value: {0: -0.704177, 1: -0.014296, 2: -0.000000, 3: 0.709880} + - time: 1.766667 + value: {0: -0.703708, 1: -0.016448, 2: 0.000000, 3: 0.710299} + - time: 1.833333 + value: {0: -0.702502, 1: -0.021833, 2: 0.000000, 3: 0.711347} + - time: 1.866667 + value: {0: -0.701791, 1: -0.024914, 2: 0.000000, 3: 0.711947} + - time: 1.900000 + value: {0: -0.700979, 1: -0.028352, 2: 0.000000, 3: 0.712618} + - time: 1.933333 + value: {0: -0.700029, 1: -0.032277, 2: 0.000000, 3: 0.713384} + - time: 2.000000 + value: {0: -0.697685, 1: -0.041553, 2: 0.000000, 3: 0.715199} + - time: 2.033333 + value: {0: -0.696251, 1: -0.046969, 2: 0.000000, 3: 0.716260} + - time: 2.066667 + value: {0: -0.694601, 1: -0.052987, 2: -0.000000, 3: 0.717441} + - time: 2.100000 + value: {0: -0.693273, 1: -0.057676, 2: 0.000000, 3: 0.718363} + - time: 2.133333 + value: {0: -0.692021, 1: -0.061985, 2: -0.000000, 3: 0.719211} + - time: 2.166667 + value: {0: -0.690862, 1: -0.066020, 2: 0.000000, 3: 0.719966} + - time: 2.200000 + value: {0: -0.689969, 1: -0.069336, 2: 0.000000, 3: 0.720510} + - time: 2.233333 + value: {0: -0.689507, 1: -0.072319, 2: -0.000000, 3: 0.720659} + - time: 2.266667 + value: {0: -0.689603, 1: -0.074841, 2: -0.000000, 3: 0.720310} + - time: 2.300000 + value: {0: -0.690938, 1: -0.076735, 2: -0.000000, 3: 0.718830} + - time: 2.333333 + value: {0: -0.693063, 1: -0.078367, 2: -0.000000, 3: 0.716605} + - time: 2.366667 + value: {0: -0.696166, 1: -0.079678, 2: -0.000000, 3: 0.713445} + - time: 2.400000 + value: {0: -0.700451, 1: -0.080661, 2: -0.000000, 3: 0.709128} + - time: 2.433333 + value: {0: -0.705719, 1: -0.081466, 2: 0.000000, 3: 0.703792} + - time: 2.466667 + value: {0: -0.712135, 1: -0.082085, 2: -0.000000, 3: 0.697228} + - time: 2.500000 + value: {0: -0.719904, 1: -0.082504, 2: 0.000000, 3: 0.689153} + - time: 2.533333 + value: {0: -0.729310, 1: -0.082699, 2: 0.000000, 3: 0.679167} + - time: 2.566667 + value: {0: -0.740740, 1: -0.082612, 2: -0.000000, 3: 0.666693} + - time: 2.600000 + value: {0: -0.754711, 1: -0.082141, 2: 0.000000, 3: 0.650895} + - time: 2.633333 + value: {0: -0.772100, 1: -0.081051, 2: -0.000000, 3: 0.630312} + - time: 2.666667 + value: {0: -0.794306, 1: -0.078001, 2: -0.000000, 3: 0.602490} + - time: 2.700000 + value: {0: -0.821541, 1: -0.068893, 2: -0.000000, 3: 0.565972} + - time: 2.733333 + value: {0: -0.852983, 1: -0.047827, 2: 0.000000, 3: 0.519742} + - time: 2.766667 + value: {0: 0.884790, 1: 0.010108, 2: 0.000000, 3: -0.465881} + - time: 2.800000 + value: {0: 0.910955, 1: -0.047102, 2: 0.000000, 3: -0.409807} + - time: 2.833333 + value: {0: 0.925769, 1: -0.123711, 2: 0.000000, 3: -0.357277} + - time: 2.866667 + value: {0: 0.925063, 1: -0.214510, 2: 0.000000, 3: -0.313440} + - time: 2.900000 + value: {0: 0.908173, 1: -0.311425, 2: 0.000000, 3: -0.279708} + - time: 2.933333 + value: {0: 0.876826, 1: -0.407698, 2: 0.000000, 3: -0.254869} + - time: 2.966667 + value: {0: 0.830681, 1: -0.503383, 2: -0.000000, 3: -0.237853} + - time: 3.000000 + value: {0: 0.761789, 1: -0.606404, 2: -0.000000, 3: -0.227928} + - time: 3.033333 + value: {0: -0.666461, 1: 0.710911, 2: 0.000000, 3: 0.224576} + - time: 3.066667 + value: {0: -0.546473, 1: 0.805780, 2: 0.000000, 3: 0.228223} + - time: 3.100000 + value: {0: -0.406317, 1: 0.881687, 2: -0.000000, 3: 0.239862} + - time: 3.133333 + value: {0: -0.257098, 1: 0.930655, 2: 0.000000, 3: 0.260349} + - time: 3.166667 + value: {0: -0.110750, 1: 0.950379, 2: 0.000000, 3: 0.290712} + - time: 3.200000 + value: {0: 0.021256, 1: 0.943377, 2: 0.000000, 3: 0.331040} + - time: 3.233333 + value: {0: 0.131961, 1: 0.915362, 2: -0.000000, 3: 0.380392} + - time: 3.266667 + value: {0: 0.218560, 1: 0.872946, 2: 0.000000, 3: 0.436116} + - time: 3.300000 + value: {0: 0.280375, 1: 0.823965, 2: 0.000000, 3: 0.492414} + - time: 3.333333 + value: {0: 0.319795, 1: 0.777670, 2: 0.000000, 3: 0.541258} + - time: 3.366667 + value: {0: 0.345577, 1: 0.734859, 2: -0.000000, 3: 0.583573} + - time: 3.400000 + value: {0: 0.363302, 1: 0.693425, 2: 0.000000, 3: 0.622233} + - time: 3.433333 + value: {0: 0.375539, 1: 0.651366, 2: -0.000000, 3: 0.659312} + - time: 3.466667 + value: {0: 0.383433, 1: 0.606210, 2: -0.000000, 3: 0.696770} + - time: 3.500000 + value: {0: 0.386985, 1: 0.555101, 2: -0.000000, 3: 0.736278} + - time: 3.533333 + value: {0: 0.385053, 1: 0.493953, 2: 0.000000, 3: 0.779580} + - time: 3.566667 + value: {0: 0.374913, 1: 0.417673, 2: 0.000000, 3: 0.827641} + - time: 3.600000 + value: {0: 0.352282, 1: 0.322108, 2: 0.000000, 3: 0.878717} + - time: 3.633333 + value: {0: 0.313491, 1: 0.208708, 2: 0.000000, 3: 0.926372} + - time: 3.666667 + value: {0: 0.267001, 1: 0.100018, 2: 0.000000, 3: 0.958492} + - time: 3.700000 + value: {0: 0.225866, 1: 0.013681, 2: -0.000000, 3: 0.974062} + - time: 3.733333 + value: {0: 0.190865, 1: -0.056159, 2: -0.000000, 3: 0.980009} + - time: 3.766667 + value: {0: 0.160431, 1: -0.115906, 2: -0.000000, 3: 0.980218} + - time: 3.800000 + value: {0: 0.132627, 1: -0.170649, 2: -0.000000, 3: 0.976365} + - time: 3.833333 + value: {0: 0.105614, 1: -0.224362, 2: -0.000000, 3: 0.968766} + - time: 3.866667 + value: {0: 0.077533, 1: -0.280494, 2: 0.000000, 3: 0.956719} + - time: 3.900000 + value: {0: 0.046242, 1: -0.342387, 2: 0.000000, 3: 0.938421} + - time: 3.933333 + value: {0: 0.009038, 1: -0.413241, 2: 0.000000, 3: 0.910577} + - time: 3.966667 + value: {0: -0.037025, 1: -0.494341, 2: -0.000000, 3: 0.868479} + - time: 4.000000 + value: {0: -0.091808, 1: -0.577301, 2: -0.000000, 3: 0.811354} + - time: 4.033333 + value: {0: -0.147133, 1: -0.641685, 2: -0.000000, 3: 0.752723} + - time: 4.066667 + value: {0: -0.199903, 1: -0.686636, 2: -0.000000, 3: 0.698978} + - time: 4.100000 + value: {0: -0.250272, 1: -0.716319, 2: -0.000000, 3: 0.651346} + - time: 4.133333 + value: {0: -0.299773, 1: -0.734422, 2: -0.000000, 3: 0.608901} + - time: 4.166667 + value: {0: -0.350386, 1: -0.743052, 2: -0.000000, 3: 0.570178} + - time: 4.200000 + value: {0: -0.404449, 1: -0.742705, 2: -0.000000, 3: 0.533676} + - time: 4.233333 + value: {0: 0.464706, 1: 0.732099, 2: -0.000000, 3: -0.498076} + - time: 4.266666 + value: {0: 0.534467, 1: 0.707553, 2: 0.000000, 3: -0.462293} + - time: 4.300000 + value: {0: 0.617548, 1: 0.661425, 2: -0.000000, 3: -0.425619} + - time: 4.333333 + value: {0: 0.715882, 1: 0.580140, 2: 0.000000, 3: -0.388523} + - time: 4.366667 + value: {0: 0.806093, 1: 0.471339, 2: 0.000000, 3: -0.357845} + - time: 4.400000 + value: {0: 0.867056, 1: 0.366647, 2: 0.000000, 3: -0.337318} + - time: 4.433333 + value: {0: 0.900751, 1: 0.288581, 2: -0.000000, 3: -0.324605} + - time: 4.466667 + value: {0: 0.914218, 1: 0.252445, 2: -0.000000, 3: -0.316982} + - time: 4.500000 + value: {0: 0.909737, 1: 0.272386, 2: -0.000000, 3: -0.313343} + - time: 4.533333 + value: {0: 0.875436, 1: 0.365654, 2: -0.000000, 3: -0.316083} + - time: 4.566667 + value: {0: 0.770451, 1: 0.541685, 2: -0.000000, 3: -0.336130} + - time: 4.600000 + value: {0: 0.547192, 1: 0.736548, 2: 0.000000, 3: -0.397590} + - time: 4.633333 + value: {0: -0.283892, 1: -0.815888, 2: -0.000000, 3: 0.503719} + - time: 4.666667 + value: {0: -0.120077, 1: -0.795425, 2: -0.000000, 3: 0.594037} + - time: 4.700000 + value: {0: -0.029604, 1: -0.755607, 2: -0.000000, 3: 0.654356} + - time: 4.733333 + value: {0: 0.029599, 1: -0.714592, 2: -0.000001, 3: 0.698915} + - time: 4.766666 + value: {0: 0.074042, 1: -0.673308, 2: -0.000000, 3: 0.735645} + - time: 4.800000 + value: {0: 0.111154, 1: -0.629585, 2: 0.000000, 3: 0.768939} + - time: 4.833333 + value: {0: 0.144783, 1: -0.580132, 2: -0.000000, 3: 0.801551} + - time: 4.866667 + value: {0: 0.176885, 1: -0.520690, 2: 0.000000, 3: 0.835221} + - time: 4.900000 + value: {0: 0.208033, 1: -0.445378, 2: -0.000000, 3: 0.870839} + - time: 4.933333 + value: {0: 0.236534, 1: -0.348090, 2: -0.000000, 3: 0.907130} + - time: 4.966667 + value: {0: 0.257451, 1: -0.237341, 2: 0.000000, 3: 0.936690} + - time: 5.000000 + value: {0: 0.269512, 1: -0.137232, 2: -0.000000, 3: 0.953169} + - time: 5.033333 + value: {0: 0.276192, 1: -0.049120, 2: -0.000000, 3: 0.959846} + - time: 5.066667 + value: {0: 0.280035, 1: 0.030952, 2: 0.000000, 3: 0.959491} + - time: 5.100000 + value: {0: 0.282430, 1: 0.108422, 2: 0.000000, 3: 0.953141} + - time: 5.133333 + value: {0: 0.283589, 1: 0.189603, 2: 0.000000, 3: 0.940015} + - time: 5.166667 + value: {0: 0.282644, 1: 0.282560, 2: 0.000000, 3: 0.916664} + - time: 5.200000 + value: {0: 0.275800, 1: 0.396331, 2: 0.000000, 3: 0.875703} + - time: 5.233333 + value: {0: 0.253617, 1: 0.535892, 2: 0.000000, 3: 0.805294} + - time: 5.266666 + value: {0: 0.206479, 1: 0.670167, 2: 0.000000, 3: 0.712911} + - time: 5.300000 + value: {0: 0.148975, 1: 0.757621, 2: 0.000000, 3: 0.635466} + - time: 5.333333 + value: {0: 0.096152, 1: 0.808563, 2: 0.000000, 3: 0.580500} + - time: 5.366667 + value: {0: 0.051004, 1: 0.838992, 2: -0.000000, 3: 0.541748} + - time: 5.400000 + value: {0: 0.013197, 1: 0.857672, 2: 0.000000, 3: 0.514028} + - time: 5.433333 + value: {0: -0.019156, 1: 0.869634, 2: 0.000000, 3: 0.493326} + - time: 5.466667 + value: {0: -0.047097, 1: 0.877303, 2: -0.000000, 3: 0.477620} + - time: 5.500000 + value: {0: -0.071870, 1: 0.882195, 2: 0.000000, 3: 0.465367} + - time: 5.533333 + value: {0: -0.094136, 1: 0.885097, 2: 0.000000, 3: 0.455787} + - time: 5.566667 + value: {0: -0.114577, 1: 0.886524, 2: -0.000000, 3: 0.448271} + - time: 5.600000 + value: {0: -0.133771, 1: 0.886760, 2: 0.000000, 3: 0.442450} + - time: 5.633333 + value: {0: -0.153996, 1: 0.886083, 2: 0.000000, 3: 0.437198} + - time: 5.666667 + value: {0: -0.176912, 1: 0.884395, 2: -0.000000, 3: 0.431912} + - time: 5.700000 + value: {0: -0.203338, 1: 0.881336, 2: -0.000000, 3: 0.426499} + - time: 5.733333 + value: {0: -0.234551, 1: 0.876275, 2: 0.000000, 3: 0.420865} + - time: 5.766666 + value: {0: -0.272242, 1: 0.868167, 2: -0.000000, 3: 0.414934} + - time: 5.800000 + value: {0: -0.319229, 1: 0.855051, 2: 0.000000, 3: 0.408633} + - time: 5.833333 + value: {0: -0.379506, 1: 0.833278, 2: 0.000000, 3: 0.402024} + - time: 5.866667 + value: {0: -0.460289, 1: 0.794823, 2: -0.000000, 3: 0.395462} + - time: 5.900000 + value: {0: -0.570719, 1: 0.722283, 2: -0.000000, 3: 0.390622} + - time: 5.933333 + value: {0: 0.719695, 1: -0.571819, 2: -0.000000, 3: -0.393780} + - time: 5.966667 + value: {0: 0.859716, 1: -0.288677, 2: 0.000000, 3: -0.421371} + - time: 6.000000 + value: {0: 0.871934, 1: 0.069525, 2: 0.000000, 3: -0.484662} + - time: 6.033333 + value: {0: -0.743842, 1: -0.352753, 2: -0.000000, 3: 0.567683} + - time: 6.066667 + value: {0: -0.579041, 1: -0.509304, 2: -0.000000, 3: 0.636648} + - time: 6.100000 + value: {0: -0.435267, 1: -0.586464, 2: -0.000000, 3: 0.683083} + - time: 6.133333 + value: {0: -0.319202, 1: -0.624905, 2: -0.000000, 3: 0.712463} + - time: 6.166667 + value: {0: -0.224360, 1: -0.643663, 2: -0.000000, 3: 0.731683} + - time: 6.200000 + value: {0: -0.151199, 1: -0.649280, 2: -0.000000, 3: 0.745369} + - time: 6.233333 + value: {0: -0.090843, 1: -0.647823, 2: 0.000000, 3: 0.756355} + - time: 6.266666 + value: {0: -0.036930, 1: -0.641847, 2: 0.000000, 3: 0.765943} + - time: 6.300000 + value: {0: 0.014920, 1: -0.631854, 2: -0.000000, 3: 0.774943} + - time: 6.333333 + value: {0: 0.068116, 1: -0.617108, 2: 0.000000, 3: 0.783925} + - time: 6.366667 + value: {0: 0.125661, 1: -0.595748, 2: 0.000000, 3: 0.793280} + - time: 6.400000 + value: {0: 0.191329, 1: -0.563883, 2: 0.000000, 3: 0.803386} + - time: 6.433333 + value: {0: 0.268105, 1: -0.514995, 2: -0.000000, 3: 0.814187} + - time: 6.466667 + value: {0: 0.352878, 1: -0.439966, 2: 0.000000, 3: 0.825777} + - time: 6.500000 + value: {0: 0.422329, 1: -0.341622, 2: 0.000000, 3: 0.839603} + - time: 6.533333 + value: {0: 0.465107, 1: -0.228752, 2: 0.000000, 3: 0.855189} + - time: 6.566667 + value: {0: 0.478259, 1: -0.113508, 2: 0.000000, 3: 0.870853} + - time: 6.600000 + value: {0: 0.465222, 1: -0.006981, 2: -0.000000, 3: 0.885166} + - time: 6.633333 + value: {0: 0.433825, 1: 0.084108, 2: -0.000000, 3: 0.897063} + - time: 6.666667 + value: {0: 0.392189, 1: 0.157761, 2: -0.000000, 3: 0.906256} + - time: 6.700000 + value: {0: 0.346793, 1: 0.215067, 2: 0.000000, 3: 0.912952} + - time: 6.733333 + value: {0: 0.302118, 1: 0.258905, 2: 0.000000, 3: 0.917438} + - time: 6.766666 + value: {0: 0.266303, 1: 0.293016, 2: 0.000000, 3: 0.918273} + - time: 6.800000 + value: {0: 0.238451, 1: 0.322676, 2: -0.000000, 3: 0.915981} + - time: 6.833333 + value: {0: 0.215413, 1: 0.351193, 2: -0.000000, 3: 0.911187} + - time: 6.866667 + value: {0: 0.194925, 1: 0.380899, 2: -0.000000, 3: 0.903837} + - time: 6.900000 + value: {0: 0.175355, 1: 0.414034, 2: -0.000000, 3: 0.893211} + - time: 6.933333 + value: {0: 0.154988, 1: 0.453399, 2: -0.000000, 3: 0.877729} + - time: 6.966667 + value: {0: 0.131465, 1: 0.502558, 2: -0.000000, 3: 0.854490} + - time: 7.000000 + value: {0: 0.100531, 1: 0.567349, 2: 0.000000, 3: 0.817318} + - time: 7.033333 + value: {0: 0.054244, 1: 0.652890, 2: -0.000000, 3: 0.755508} + - time: 7.066667 + value: {0: -0.019921, 1: 0.753891, 2: 0.000000, 3: 0.656697} + - time: 7.100000 + value: {0: -0.129027, 1: 0.838554, 2: 0.000000, 3: 0.529319} + - time: 7.133333 + value: {0: -0.249318, 1: 0.870637, 2: -0.000000, 3: 0.424067} + - time: 7.166667 + value: {0: -0.363481, 1: 0.862039, 2: -0.000000, 3: 0.353228} + - time: 7.200000 + value: {0: -0.472369, 1: 0.827286, 2: -0.000000, 3: 0.304082} + - time: 7.233333 + value: {0: -0.579917, 1: 0.769408, 2: 0.000000, 3: 0.267783} + - time: 7.266666 + value: {0: 0.687394, 1: -0.685418, 2: -0.000000, 3: -0.240191} + - time: 7.300000 + value: {0: 0.792899, 1: -0.568449, 2: 0.000000, 3: -0.219492} + - time: 7.333333 + value: {0: 0.888638, 1: -0.409992, 2: 0.000000, 3: -0.205495} + - time: 7.366667 + value: {0: 0.958117, 1: -0.205468, 2: -0.000000, 3: -0.199485} + - time: 7.400000 + value: {0: 0.978300, 1: 0.035581, 2: -0.000000, 3: -0.204117} + - time: 7.433333 + value: {0: 0.932586, 1: 0.283700, 2: -0.000000, 3: -0.223153} + - time: 7.466667 + value: {0: 0.827013, 1: 0.498136, 2: 0.000000, 3: -0.260597} + - time: 7.500000 + value: {0: 0.688183, 1: 0.651448, 2: 0.000000, 3: -0.319405} + - time: 7.533333 + value: {0: 0.544199, 1: 0.737921, 2: -0.000000, 3: -0.399149} + - time: 7.566667 + value: {0: 0.422688, 1: 0.766536, 2: -0.000000, 3: -0.483485} + - time: 7.600000 + value: {0: -0.333765, 1: -0.763548, 2: -0.000000, 3: 0.552807} + - time: 7.633333 + value: {0: -0.267528, 1: -0.748689, 2: 0.000000, 3: 0.606543} + - time: 7.666667 + value: {0: -0.215914, 1: -0.730299, 2: -0.000000, 3: 0.648109} + - time: 7.700000 + value: {0: -0.173588, 1: -0.711467, 2: 0.000000, 3: 0.680942} + - time: 7.733333 + value: {0: -0.136951, 1: -0.693055, 2: 0.000000, 3: 0.707757} + - time: 7.766666 + value: {0: -0.103623, 1: -0.675080, 2: 0.000000, 3: 0.730431} + - time: 7.800000 + value: {0: -0.071870, 1: -0.657194, 2: -0.000000, 3: 0.750287} + - time: 7.833333 + value: {0: -0.040286, 1: -0.638833, 2: -0.000000, 3: 0.768290} + - time: 7.866667 + value: {0: -0.007532, 1: -0.619189, 2: -0.000000, 3: 0.785206} + - time: 7.900000 + value: {0: 0.027756, 1: -0.597180, 2: 0.000000, 3: 0.801627} + - time: 7.933333 + value: {0: 0.067163, 1: -0.571197, 2: 0.000000, 3: 0.818061} + - time: 7.966667 + value: {0: 0.112557, 1: -0.538798, 2: 0.000000, 3: 0.834882} + - time: 8.000000 + value: {0: 0.166188, 1: -0.496049, 2: -0.000000, 3: 0.852242} + - time: 8.033334 + value: {0: 0.229275, 1: -0.437374, 2: -0.000000, 3: 0.869561} + - time: 8.066667 + value: {0: 0.290680, 1: -0.365117, 2: 0.000000, 3: 0.884418} + - time: 8.100000 + value: {0: 0.340602, 1: -0.287509, 2: 0.000000, 3: 0.895170} + - time: 8.133333 + value: {0: 0.376740, 1: -0.211463, 2: 0.000000, 3: 0.901859} + - time: 8.166667 + value: {0: 0.400053, 1: -0.141667, 2: -0.000000, 3: 0.905477} + - time: 8.200000 + value: {0: 0.413012, 1: -0.079881, 2: 0.000000, 3: 0.907215} + - time: 8.233334 + value: {0: 0.418091, 1: -0.025880, 2: -0.000000, 3: 0.908036} + - time: 8.266666 + value: {0: 0.417105, 1: 0.021360, 2: 0.000000, 3: 0.908607} + - time: 8.300000 + value: {0: 0.411254, 1: 0.063289, 2: -0.000000, 3: 0.909321} + - time: 8.333333 + value: {0: 0.401095, 1: 0.101222, 2: 0.000000, 3: 0.910427} + - time: 8.366667 + value: {0: 0.386663, 1: 0.136282, 2: -0.000000, 3: 0.912096} + - time: 8.400000 + value: {0: 0.367431, 1: 0.169456, 2: -0.000000, 3: 0.914483} + - time: 8.433333 + value: {0: 0.342666, 1: 0.201159, 2: -0.000000, 3: 0.917668} + - time: 8.466666 + value: {0: 0.311638, 1: 0.231623, 2: 0.000000, 3: 0.921538} + - time: 8.500000 + value: {0: 0.274162, 1: 0.260987, 2: 0.000000, 3: 0.925592} + - time: 8.533334 + value: {0: 0.235356, 1: 0.287923, 2: 0.000000, 3: 0.928282} + - time: 8.566667 + value: {0: 0.197126, 1: 0.311846, 2: 0.000000, 3: 0.929459} + - time: 8.600000 + value: {0: 0.160475, 1: 0.332548, 2: 0.000000, 3: 0.929333} + - time: 8.633333 + value: {0: 0.126069, 1: 0.350121, 2: -0.000000, 3: 0.928182} + - time: 8.666667 + value: {0: 0.094333, 1: 0.364806, 2: -0.000000, 3: 0.926292} + - time: 8.700000 + value: {0: 0.065492, 1: 0.376920, 2: -0.000000, 3: 0.923927} + - time: 8.733334 + value: {0: 0.039543, 1: 0.386830, 2: 0.000000, 3: 0.921303} + - time: 8.766666 + value: {0: 0.016471, 1: 0.394846, 2: -0.000000, 3: 0.918600} + - time: 8.800000 + value: {0: -0.003880, 1: 0.401273, 2: 0.000000, 3: 0.915950} + - time: 8.833333 + value: {0: -0.021791, 1: 0.406407, 2: -0.000000, 3: 0.913432} + - time: 8.866667 + value: {0: -0.037109, 1: 0.410338, 2: 0.000000, 3: 0.911178} + - time: 8.900000 + value: {0: -0.050209, 1: 0.413314, 2: -0.000000, 3: 0.909203} + - time: 8.933333 + value: {0: -0.060735, 1: 0.415296, 2: 0.000000, 3: 0.907656} + - time: 8.966666 + value: {0: -0.068655, 1: 0.416340, 2: -0.000000, 3: 0.906613} + - time: 9.000000 + value: {0: -0.073849, 1: 0.416433, 2: 0.000000, 3: 0.906162} + - time: 9.033334 + value: {0: -0.077327, 1: 0.415810, 2: 0.000000, 3: 0.906158} + - time: 9.066667 + value: {0: -0.080830, 1: 0.414869, 2: 0.000000, 3: 0.906284} + - time: 9.100000 + value: {0: -0.085059, 1: 0.413698, 2: -0.000000, 3: 0.906432} + - time: 9.133333 + value: {0: -0.090341, 1: 0.412213, 2: -0.000000, 3: 0.906597} + - time: 9.166667 + value: {0: -0.097100, 1: 0.410277, 2: -0.000000, 3: 0.906777} + - time: 9.200000 + value: {0: -0.105947, 1: 0.407676, 2: 0.000000, 3: 0.906959} + - time: 9.233334 + value: {0: -0.117601, 1: 0.404129, 2: -0.000000, 3: 0.907111} + - time: 9.266666 + value: {0: -0.132159, 1: 0.399487, 2: 0.000000, 3: 0.907162} + - time: 9.300000 + value: {0: -0.153084, 1: 0.392432, 2: -0.000000, 3: 0.906953} + - time: 9.333333 + value: {0: -0.176526, 1: 0.384058, 2: 0.000000, 3: 0.906277} + - time: 9.366667 + value: {0: -0.200668, 1: 0.374771, 2: -0.000000, 3: 0.905140} + - time: 9.400000 + value: {0: -0.229718, 1: 0.364173, 2: 0.000000, 3: 0.902556} + - time: 9.433333 + value: {0: -0.257446, 1: 0.353177, 2: 0.000000, 3: 0.899437} + - time: 9.466666 + value: {0: -0.300163, 1: 0.337164, 2: 0.000000, 3: 0.892313} + - time: 9.500000 + value: {0: -0.337679, 1: 0.320915, 2: 0.000000, 3: 0.884865} + - time: 9.533334 + value: {0: -0.383475, 1: 0.299888, 2: 0.000000, 3: 0.873507} + - time: 9.566667 + value: {0: -0.425881, 1: 0.277611, 2: 0.000000, 3: 0.861137} + - time: 9.600000 + value: {0: -0.460614, 1: 0.256804, 2: 0.000000, 3: 0.849639} + - time: 9.633333 + value: {0: -0.489161, 1: 0.238026, 2: -0.000000, 3: 0.839086} + - time: 9.666667 + value: {0: -0.513496, 1: 0.221006, 2: -0.000000, 3: 0.829143} + - time: 9.700000 + value: {0: -0.533658, 1: 0.205725, 2: 0.000000, 3: 0.820296} + - time: 9.733334 + value: {0: -0.550528, 1: 0.192027, 2: -0.000000, 3: 0.812431} + - time: 9.766666 + value: {0: -0.564984, 1: 0.179561, 2: 0.000000, 3: 0.805327} + - time: 9.800000 + value: {0: -0.577874, 1: 0.167823, 2: -0.000000, 3: 0.798685} + - time: 9.833333 + value: {0: -0.590005, 1: 0.156190, 2: -0.000000, 3: 0.792148} + - time: 9.866667 + value: {0: -0.602093, 1: 0.143980, 2: 0.000000, 3: 0.785337} + - time: 9.900000 + value: {0: -0.610949, 1: 0.134773, 2: 0.000000, 3: 0.780114} + - time: 9.933333 + value: {0: -0.620626, 1: 0.124286, 2: -0.000000, 3: 0.774194} + - time: 9.966666 + value: {0: -0.631665, 1: 0.111713, 2: -0.000000, 3: 0.767151} + - time: 10.000000 + value: {0: -0.644337, 1: 0.096386, 2: -0.000000, 3: 0.758643} + - time: 10.033334 + value: {0: -0.658772, 1: 0.077590, 2: -0.000000, 3: 0.748331} + - time: 10.066667 + value: {0: -0.671500, 1: 0.059634, 2: 0.000000, 3: 0.738601} + - time: 10.100000 + value: {0: -0.677030, 1: 0.051376, 2: 0.000000, 3: 0.734160} + - time: 10.133333 + value: {0: -0.681697, 1: 0.044161, 2: -0.000000, 3: 0.730300} + - time: 10.166667 + value: {0: -0.685686, 1: 0.037801, 2: 0.000000, 3: 0.726915} + - time: 10.200000 + value: {0: -0.689133, 1: 0.032154, 2: -0.000000, 3: 0.723921} + - time: 10.233334 + value: {0: -0.692130, 1: 0.027120, 2: -0.000000, 3: 0.721263} + - time: 10.266666 + value: {0: -0.694753, 1: 0.022617, 2: -0.000000, 3: 0.718893} + - time: 10.300000 + value: {0: -0.697056, 1: 0.018582, 2: 0.000000, 3: 0.716776} + - time: 10.333333 + value: {0: -0.698968, 1: 0.015173, 2: -0.000000, 3: 0.714992} + - time: 10.400000 + value: {0: -0.699978, 1: 0.013348, 2: 0.000000, 3: 0.714040} + - time: 10.500000 + value: {0: -0.701113, 1: 0.011280, 2: -0.000000, 3: 0.712961} + - time: 10.600000 + value: {0: -0.701898, 1: 0.009837, 2: 0.000000, 3: 0.712209} + - time: 10.733334 + value: {0: -0.702541, 1: 0.008648, 2: 0.000000, 3: 0.711591} + - time: 10.900000 + value: {0: -0.702884, 1: 0.008010, 2: 0.000000, 3: 0.711259} + - time: 14.000000 + value: {0: -0.702926, 1: 0.007933, 2: 0.000000, 3: 0.711219} + scale: + [] + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset.meta new file mode 100644 index 00000000..32e1da60 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 2.animationAsset.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + AnimationAsset: ! 7eba6aa9-4ba6-4792-9195-8471fd86103b + ImporterName: AnimationAssetImporter + PrimaryAsset: ! 7eba6aa9-4ba6-4792-9195-8471fd86103b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset new file mode 100644 index 00000000..6be34fd5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset @@ -0,0 +1,1062 @@ +- ! + PackagePath: "" + AnimationPropertiesLayers: + piece_0: + position: + - time: 0.000000 + value: {x: 0.000012, y: 4.089051, z: -0.064286} + - time: 0.033333 + value: {x: 0.000012, y: 4.089051, z: -0.064286} + - time: 0.066667 + value: {x: 0.000012, y: 4.104006, z: -0.064286} + - time: 0.100000 + value: {x: 0.000012, y: 4.124079, z: -0.064286} + - time: 0.133333 + value: {x: 0.000012, y: 4.148738, z: -0.064286} + - time: 0.166667 + value: {x: 0.000012, y: 4.177551, z: -0.064286} + - time: 0.200000 + value: {x: 0.000012, y: 4.210159, z: -0.064286} + - time: 0.233333 + value: {x: 0.000012, y: 4.246264, z: -0.064286} + - time: 0.266667 + value: {x: 0.000015, y: 4.285613, z: -0.064289} + - time: 0.300000 + value: {x: 0.000018, y: 4.327989, z: -0.064292} + - time: 0.333333 + value: {x: 0.000022, y: 4.373208, z: -0.064296} + - time: 0.366667 + value: {x: 0.000025, y: 4.421111, z: -0.064300} + - time: 0.400000 + value: {x: 0.000029, y: 4.471559, z: -0.064303} + - time: 0.433333 + value: {x: 0.000032, y: 4.524433, z: -0.064308} + - time: 0.466667 + value: {x: 0.000036, y: 4.579628, z: -0.064312} + - time: 0.500000 + value: {x: 0.000040, y: 4.637052, z: -0.064316} + - time: 0.533333 + value: {x: 0.000045, y: 4.696625, z: -0.064321} + - time: 0.566667 + value: {x: 0.000049, y: 4.758279, z: -0.064326} + - time: 0.600000 + value: {x: 0.000054, y: 4.821952, z: -0.064331} + - time: 0.633333 + value: {x: 0.000059, y: 4.887593, z: -0.064336} + - time: 0.666667 + value: {x: 0.000063, y: 4.955157, z: -0.064341} + - time: 0.700000 + value: {x: 0.000068, y: 5.024606, z: -0.064347} + - time: 0.733333 + value: {x: 0.000073, y: 5.095908, z: -0.064352} + - time: 0.766667 + value: {x: 0.000079, y: 5.169036, z: -0.064358} + - time: 0.800000 + value: {x: 0.000084, y: 5.243971, z: -0.064364} + - time: 0.833333 + value: {x: 0.000090, y: 5.320698, z: -0.064370} + - time: 0.866667 + value: {x: 0.000095, y: 5.399206, z: -0.064376} + - time: 0.900000 + value: {x: 0.000101, y: 5.479491, z: -0.064382} + - time: 0.933333 + value: {x: 0.000107, y: 5.561551, z: -0.064388} + - time: 0.966667 + value: {x: 0.000113, y: 5.645392, z: -0.064395} + - time: 1.000000 + value: {x: 0.000119, y: 5.731023, z: -0.064401} + - time: 1.033333 + value: {x: 0.000125, y: 5.818460, z: -0.064408} + - time: 1.066667 + value: {x: 0.000131, y: 5.907721, z: -0.064415} + - time: 1.100000 + value: {x: 0.000138, y: 5.998832, z: -0.064422} + - time: 1.133333 + value: {x: 0.000145, y: 6.091824, z: -0.064429} + - time: 1.166667 + value: {x: 0.000151, y: 6.186736, z: -0.064437} + - time: 1.200000 + value: {x: 0.000158, y: 6.283612, z: -0.064444} + - time: 1.233333 + value: {x: 0.000165, y: 6.382504, z: -0.064452} + - time: 1.266667 + value: {x: 0.000173, y: 6.483470, z: -0.064460} + - time: 1.300000 + value: {x: 0.000180, y: 6.586581, z: -0.064467} + - time: 1.333333 + value: {x: 0.000187, y: 6.691916, z: -0.064476} + - time: 1.366667 + value: {x: 0.000195, y: 6.799568, z: -0.064484} + - time: 1.400000 + value: {x: 0.000203, y: 6.909638, z: -0.064492} + - time: 1.433333 + value: {x: 0.000211, y: 7.022251, z: -0.064501} + - time: 1.466667 + value: {x: 0.000219, y: 7.137541, z: -0.064510} + - time: 1.500000 + value: {x: 0.000227, y: 7.255672, z: -0.064519} + - time: 1.533333 + value: {x: 0.000236, y: 7.376827, z: -0.064528} + - time: 1.566667 + value: {x: 0.000245, y: 7.501225, z: -0.064537} + - time: 1.600000 + value: {x: 0.000254, y: 7.629122, z: -0.064547} + - time: 1.633333 + value: {x: 0.000263, y: 7.760820, z: -0.064557} + - time: 1.666667 + value: {x: 0.000273, y: 7.896683, z: -0.064568} + - time: 1.700000 + value: {x: 0.000283, y: 8.037151, z: -0.064578} + - time: 1.733333 + value: {x: 0.000293, y: 8.182769, z: -0.064589} + - time: 1.766667 + value: {x: 0.000304, y: 8.334211, z: -0.064601} + - time: 1.800000 + value: {x: 0.000315, y: 8.492348, z: -0.064613} + - time: 1.833333 + value: {x: 0.000327, y: 8.658318, z: -0.064625} + - time: 1.866667 + value: {x: 0.000339, y: 8.833662, z: -0.064639} + - time: 1.900000 + value: {x: 0.000352, y: 9.020560, z: -0.064653} + - time: 1.933333 + value: {x: 0.005077, y: 9.222198, z: -0.066041} + - time: 1.966667 + value: {x: 0.011744, y: 9.443902, z: -0.067997} + - time: 2.000000 + value: {x: 0.019306, y: 9.695357, z: -0.070215} + - time: 2.033333 + value: {x: 0.028421, y: 9.998479, z: -0.072889} + - time: 2.066667 + value: {x: 0.038810, y: 10.343951, z: -0.075935} + - time: 2.100000 + value: {x: 0.049304, y: 10.692924, z: -0.079012} + - time: 2.133333 + value: {x: 0.059960, y: 11.047304, z: -0.082136} + - time: 2.166667 + value: {x: 0.070841, y: 11.409172, z: -0.085326} + - time: 2.200000 + value: {x: 0.082016, y: 11.780822, z: -0.088601} + - time: 2.233333 + value: {x: 0.093560, y: 12.164781, z: -0.091984} + - time: 2.266667 + value: {x: 0.105559, y: 12.563861, z: -0.095499} + - time: 2.300000 + value: {x: 0.118107, y: 12.981189, z: -0.099175} + - time: 2.333333 + value: {x: 0.131308, y: 13.420273, z: -0.103041} + - time: 2.366667 + value: {x: 0.145281, y: 13.885062, z: -0.107132} + - time: 2.400000 + value: {x: 0.176325, y: 14.378254, z: -0.116148} + - time: 2.433333 + value: {x: 0.218088, y: 14.905681, z: -0.128257} + - time: 2.466667 + value: {x: 0.263093, y: 15.474053, z: -0.141305} + - time: 2.500000 + value: {x: 0.311877, y: 16.090151, z: -0.155448} + - time: 2.533333 + value: {x: 0.365066, y: 16.761902, z: -0.170867} + - time: 2.566667 + value: {x: 0.423403, y: 17.498674, z: -0.187777} + - time: 2.600000 + value: {x: 0.487776, y: 18.311678, z: -0.206434} + - time: 2.633333 + value: {x: 0.563003, y: 19.213974, z: -0.228219} + - time: 2.666667 + value: {x: 0.660906, y: 20.220844, z: -0.256516} + - time: 2.700000 + value: {x: 0.771177, y: 21.354921, z: -0.288387} + - time: 2.733333 + value: {x: 0.896427, y: 22.643049, z: -0.324586} + - time: 2.766667 + value: {x: 1.041856, y: 24.122364, z: -0.366614} + - time: 2.800000 + value: {x: 1.226170, y: 25.855215, z: -0.419857} + - time: 2.833333 + value: {x: 1.443366, y: 27.897213, z: -0.482597} + - time: 2.866667 + value: {x: 1.712719, y: 30.330112, z: -0.560791} + - time: 2.900000 + value: {x: 2.053581, y: 33.320301, z: -0.660085} + - time: 2.933333 + value: {x: 2.543628, y: 37.218109, z: -0.807089} + - time: 2.966667 + value: {x: 3.318649, y: 42.715958, z: -1.047687} + - time: 3.000000 + value: {x: 4.474258, y: 49.535770, z: -1.424428} + - time: 3.033333 + value: {x: 5.917471, y: 56.393810, z: -1.917611} + - time: 3.066667 + value: {x: 7.688623, y: 63.270065, z: -2.544474} + - time: 3.100000 + value: {x: 9.968611, y: 70.082993, z: -3.380549} + - time: 3.133333 + value: {x: 12.792662, y: 76.766335, z: -4.441184} + - time: 3.166667 + value: {x: 16.465059, y: 83.057220, z: -5.854988} + - time: 3.200000 + value: {x: 21.010427, y: 88.748222, z: -7.661360} + - time: 3.233333 + value: {x: 26.448639, y: 93.477921, z: -10.056418} + - time: 3.266667 + value: {x: 32.405819, y: 97.308090, z: -13.053039} + - time: 3.300000 + value: {x: 38.611820, y: 100.031891, z: -16.869007} + - time: 3.333333 + value: {x: 44.737331, y: 101.898407, z: -21.432995} + - time: 3.366667 + value: {x: 50.472141, y: 102.902634, z: -26.838575} + - time: 3.400000 + value: {x: 55.588619, y: 103.229469, z: -32.997986} + - time: 3.433333 + value: {x: 59.976452, y: 103.025810, z: -39.809147} + - time: 3.466667 + value: {x: 63.544468, y: 102.366798, z: -47.149933} + - time: 3.500000 + value: {x: 66.450592, y: 101.387207, z: -54.821808} + - time: 3.533333 + value: {x: 68.701225, y: 100.129501, z: -62.738865} + - time: 3.566667 + value: {x: 70.260536, y: 98.619400, z: -70.851280} + - time: 3.600000 + value: {x: 71.157837, y: 96.915169, z: -79.094452} + - time: 3.633333 + value: {x: 71.355484, y: 95.065750, z: -87.414841} + - time: 3.666667 + value: {x: 70.748711, y: 93.087830, z: -95.742302} + - time: 3.700000 + value: {x: 69.314720, y: 90.988159, z: -104.001015} + - time: 3.733333 + value: {x: 66.969536, y: 88.774330, z: -112.077110} + - time: 3.766667 + value: {x: 63.692688, y: 86.468056, z: -119.861565} + - time: 3.800000 + value: {x: 59.453598, y: 84.095512, z: -127.212334} + - time: 3.833333 + value: {x: 54.342731, y: 81.687981, z: -134.040817} + - time: 3.866667 + value: {x: 48.383121, y: 79.273323, z: -140.214523} + - time: 3.900000 + value: {x: 41.598412, y: 76.885063, z: -145.565292} + - time: 3.933333 + value: {x: 34.007324, y: 74.572510, z: -149.832550} + - time: 3.966667 + value: {x: 25.697515, y: 72.405045, z: -152.674393} + - time: 4.000000 + value: {x: 16.908716, y: 70.416862, z: -153.898575} + - time: 4.033333 + value: {x: 7.964176, y: 68.619987, z: -153.421219} + - time: 4.066667 + value: {x: -0.824107, y: 66.997093, z: -151.304184} + - time: 4.100000 + value: {x: -9.195930, y: 65.511192, z: -147.709244} + - time: 4.133333 + value: {x: -16.967457, y: 64.114243, z: -142.827744} + - time: 4.166667 + value: {x: -24.008486, y: 62.759727, z: -136.864426} + - time: 4.200000 + value: {x: -30.331629, y: 61.412704, z: -130.097610} + - time: 4.233333 + value: {x: -35.962708, y: 60.040394, z: -122.698639} + - time: 4.266666 + value: {x: -40.903255, y: 58.608139, z: -114.788147} + - time: 4.300000 + value: {x: -45.123024, y: 57.075111, z: -106.450745} + - time: 4.333333 + value: {x: -48.542747, y: 55.389164, z: -97.754204} + - time: 4.366667 + value: {x: -51.012444, y: 53.478882, z: -88.754051} + - time: 4.400000 + value: {x: -52.300652, y: 51.290081, z: -79.540955} + - time: 4.433333 + value: {x: -52.119469, y: 48.804546, z: -70.295578} + - time: 4.466667 + value: {x: -50.142529, y: 46.027283, z: -61.325401} + - time: 4.500000 + value: {x: -46.120041, y: 43.023106, z: -53.121464} + - time: 4.533333 + value: {x: -40.135132, y: 39.946125, z: -46.223793} + - time: 4.566667 + value: {x: -32.652683, y: 37.038231, z: -40.853451} + - time: 4.600000 + value: {x: -24.198242, y: 34.483234, z: -36.853657} + - time: 4.633333 + value: {x: -15.162588, y: 32.367413, z: -33.980694} + - time: 4.666667 + value: {x: -5.761771, y: 30.712507, z: -31.998499} + - time: 4.700000 + value: {x: 3.849427, y: 29.523478, z: -30.729267} + - time: 4.733333 + value: {x: 13.575757, y: 28.780012, z: -30.034037} + - time: 4.766666 + value: {x: 23.361984, y: 28.449009, z: -29.813143} + - time: 4.800000 + value: {x: 33.168854, y: 28.515778, z: -30.003477} + - time: 4.833333 + value: {x: 42.965736, y: 28.983528, z: -30.566597} + - time: 4.866667 + value: {x: 52.720173, y: 29.871473, z: -31.481611} + - time: 4.900000 + value: {x: 62.393959, y: 31.215239, z: -32.741505} + - time: 4.933333 + value: {x: 71.937737, y: 33.066608, z: -34.351791} + - time: 4.966667 + value: {x: 81.297203, y: 35.453747, z: -36.333462} + - time: 5.000000 + value: {x: 90.419357, y: 38.359844, z: -38.721920} + - time: 5.033333 + value: {x: 99.241035, y: 41.761963, z: -41.562218} + - time: 5.066667 + value: {x: 107.684044, y: 45.634617, z: -44.911400} + - time: 5.100000 + value: {x: 115.645874, y: 49.946552, z: -48.841824} + - time: 5.133333 + value: {x: 122.999199, y: 54.664192, z: -53.454891} + - time: 5.166667 + value: {x: 129.501022, y: 59.723034, z: -58.883492} + - time: 5.200000 + value: {x: 134.777084, y: 65.022942, z: -65.300652} + - time: 5.233333 + value: {x: 138.401474, y: 70.348778, z: -72.744324} + - time: 5.266666 + value: {x: 140.113831, y: 75.406731, z: -81.004395} + - time: 5.300000 + value: {x: 139.981491, y: 79.988708, z: -89.738388} + - time: 5.333333 + value: {x: 138.323532, y: 84.015915, z: -98.602234} + - time: 5.366667 + value: {x: 135.546112, y: 87.551842, z: -107.385979} + - time: 5.400000 + value: {x: 131.907074, y: 90.674828, z: -115.998482} + - time: 5.433333 + value: {x: 127.541519, y: 93.435806, z: -124.386093} + - time: 5.466667 + value: {x: 122.515732, y: 95.859329, z: -132.496490} + - time: 5.500000 + value: {x: 116.855949, y: 97.946953, z: -140.260635} + - time: 5.533333 + value: {x: 110.558197, y: 99.679672, z: -147.584442} + - time: 5.566667 + value: {x: 103.612595, y: 101.023125, z: -154.356003} + - time: 5.600000 + value: {x: 96.075111, y: 101.962593, z: -160.514572} + - time: 5.633333 + value: {x: 88.023064, y: 102.487648, z: -166.006195} + - time: 5.666667 + value: {x: 79.538437, y: 102.592552, z: -170.786652} + - time: 5.700000 + value: {x: 70.704155, y: 102.274467, z: -174.819290} + - time: 5.733333 + value: {x: 61.603752, y: 101.531517, z: -178.070694} + - time: 5.766666 + value: {x: 52.323391, y: 100.361221, z: -180.506851} + - time: 5.800000 + value: {x: 42.949280, y: 98.751091, z: -182.089493} + - time: 5.833333 + value: {x: 33.586987, y: 96.675842, z: -182.769608} + - time: 5.866667 + value: {x: 24.361071, y: 94.106407, z: -182.490265} + - time: 5.900000 + value: {x: 15.424416, y: 91.015297, z: -181.190582} + - time: 5.933333 + value: {x: 6.964213, y: 87.383667, z: -178.815338} + - time: 5.966667 + value: {x: -0.799541, y: 83.212456, z: -175.334763} + - time: 6.000000 + value: {x: -7.652493, y: 78.532257, z: -170.834381} + - time: 6.033333 + value: {x: -13.475179, y: 73.362755, z: -165.554367} + - time: 6.066667 + value: {x: -18.213093, y: 67.726677, z: -159.769135} + - time: 6.100000 + value: {x: -21.876713, y: 61.646873, z: -153.727631} + - time: 6.133333 + value: {x: -24.470098, y: 55.140121, z: -147.643631} + - time: 6.166667 + value: {x: -26.007505, y: 48.236115, z: -141.711151} + - time: 6.200000 + value: {x: -26.556374, y: 41.055382, z: -136.015106} + - time: 6.233333 + value: {x: -26.260592, y: 33.833786, z: -130.431656} + - time: 6.266666 + value: {x: -25.226288, y: 26.798321, z: -124.786278} + - time: 6.300000 + value: {x: -23.549072, y: 20.179167, z: -118.895676} + - time: 6.333333 + value: {x: -21.318146, y: 14.226229, z: -112.598579} + - time: 6.366667 + value: {x: -18.613615, y: 9.260552, z: -105.758522} + - time: 6.400000 + value: {x: -15.558074, y: 5.622147, z: -98.336571} + - time: 6.433333 + value: {x: -12.323532, y: 3.389633, z: -90.511765} + - time: 6.466667 + value: {x: -9.075833, y: 2.224191, z: -82.535431} + - time: 6.500000 + value: {x: -5.915982, y: 1.840284, z: -74.520287} + - time: 6.533333 + value: {x: -2.943851, y: 2.018458, z: -66.561676} + - time: 6.566667 + value: {x: -0.436833, y: 2.537893, z: -59.096859} + - time: 6.600000 + value: {x: 1.561101, y: 3.111038, z: -52.103775} + - time: 6.633333 + value: {x: 2.856448, y: 3.622274, z: -45.508957} + - time: 6.666667 + value: {x: 3.492330, y: 4.139158, z: -39.315647} + - time: 6.700000 + value: {x: 3.509354, y: 4.788281, z: -33.555916} + - time: 6.733333 + value: {x: 3.114469, y: 5.718385, z: -28.265196} + - time: 6.766666 + value: {x: 2.645032, y: 6.995295, z: -23.458534} + - time: 6.800000 + value: {x: 2.256499, y: 8.519595, z: -19.111933} + - time: 6.833333 + value: {x: 1.931365, y: 10.169502, z: -15.199798} + - time: 6.866667 + value: {x: 1.648064, y: 11.873976, z: -11.705459} + - time: 6.900000 + value: {x: 1.393000, y: 13.582806, z: -8.619253} + - time: 6.933333 + value: {x: 1.156651, y: 15.308303, z: -5.967256} + - time: 6.966667 + value: {x: 0.916063, y: 17.152588, z: -3.896782} + - time: 7.000000 + value: {x: 0.694924, y: 18.877766, z: -2.214656} + - time: 7.033333 + value: {x: 0.520210, y: 20.664938, z: -1.384071} + - time: 7.066667 + value: {x: 0.384314, y: 22.210175, z: -0.922020} + - time: 7.100000 + value: {x: 0.284829, y: 23.340134, z: -0.583503} + - time: 7.133333 + value: {x: 0.217835, y: 24.246994, z: -0.372072} + - time: 7.166667 + value: {x: 0.186284, y: 25.155918, z: -0.327460} + - time: 7.200000 + value: {x: 0.156074, y: 26.025686, z: -0.284737} + - time: 7.233333 + value: {x: 0.127193, y: 26.856701, z: -0.243884} + - time: 7.266666 + value: {x: 0.099639, y: 27.649036, z: -0.204898} + - time: 7.300000 + value: {x: 0.073409, y: 28.402866, z: -0.167773} + - time: 7.333333 + value: {x: 0.051938, y: 29.118870, z: -0.137375} + - time: 7.366667 + value: {x: 0.045101, y: 29.798626, z: -0.127704} + - time: 7.400000 + value: {x: 0.038650, y: 30.439987, z: -0.118579} + - time: 7.433333 + value: {x: 0.032585, y: 31.042879, z: -0.110000} + - time: 7.466667 + value: {x: 0.026906, y: 31.607296, z: -0.101968} + - time: 7.500000 + value: {x: 0.021615, y: 32.133095, z: -0.094485} + - time: 7.533333 + value: {x: 0.016713, y: 32.620190, z: -0.087552} + - time: 7.566667 + value: {x: 0.012202, y: 33.068356, z: -0.081173} + - time: 7.600000 + value: {x: 0.008084, y: 33.477516, z: -0.075349} + - time: 7.633333 + value: {x: 0.004362, y: 33.847218, z: -0.070085} + - time: 7.666667 + value: {x: 0.002979, y: 34.176777, z: -0.068144} + - time: 7.700000 + value: {x: 0.002798, y: 34.466072, z: -0.067907} + - time: 7.733333 + value: {x: 0.002642, y: 34.715080, z: -0.067704} + - time: 7.766666 + value: {x: 0.002512, y: 34.923199, z: -0.067534} + - time: 7.800000 + value: {x: 0.002396, y: 35.108284, z: -0.067383} + - time: 7.833333 + value: {x: 0.002284, y: 35.288658, z: -0.067236} + - time: 7.866667 + value: {x: 0.002174, y: 35.464550, z: -0.067092} + - time: 7.900000 + value: {x: 0.002066, y: 35.636181, z: -0.066952} + - time: 7.933333 + value: {x: 0.001961, y: 35.803478, z: -0.066815} + - time: 7.966667 + value: {x: 0.001859, y: 35.966751, z: -0.066682} + - time: 8.000000 + value: {x: 0.001760, y: 36.125614, z: -0.066552} + - time: 8.033334 + value: {x: 0.001663, y: 36.280376, z: -0.066425} + - time: 8.066667 + value: {x: 0.001569, y: 36.430645, z: -0.066303} + - time: 8.100000 + value: {x: 0.001478, y: 36.576508, z: -0.066183} + - time: 8.133333 + value: {x: 0.001389, y: 36.717663, z: -0.066068} + - time: 8.166667 + value: {x: 0.001304, y: 36.854103, z: -0.065957} + - time: 8.200000 + value: {x: 0.001222, y: 36.985371, z: -0.065849} + - time: 8.233334 + value: {x: 0.001143, y: 37.111549, z: -0.065746} + - time: 8.266666 + value: {x: 0.001067, y: 37.232101, z: -0.065648} + - time: 8.300000 + value: {x: 0.000995, y: 37.346878, z: -0.065554} + - time: 8.333333 + value: {x: 0.000928, y: 37.455421, z: -0.065465} + - time: 8.366667 + value: {x: 0.000864, y: 37.557430, z: -0.065382} + - time: 8.400000 + value: {x: 0.000804, y: 37.628780, z: -0.065304} + - time: 8.433333 + value: {x: 0.000750, y: 37.685989, z: -0.065233} + - time: 8.466666 + value: {x: 0.000700, y: 37.728191, z: -0.065168} + - time: 8.500000 + value: {x: 0.000656, y: 37.754261, z: -0.065111} + - time: 8.533334 + value: {x: 0.000618, y: 37.762760, z: -0.065062} + - time: 8.566667 + value: {x: 0.000587, y: 37.752430, z: -0.065021} + - time: 8.600000 + value: {x: 0.000564, y: 37.721703, z: -0.064991} + - time: 8.633333 + value: {x: 0.000549, y: 37.668350, z: -0.064971} + - time: 8.666667 + value: {x: 0.000544, y: 37.590183, z: -0.064964} + - time: 8.700000 + value: {x: 0.000544, y: 37.493500, z: -0.064964} + - time: 8.733334 + value: {x: 0.000544, y: 37.386219, z: -0.064964} + - time: 8.766666 + value: {x: 0.000544, y: 37.267708, z: -0.064964} + - time: 8.800000 + value: {x: 0.000544, y: 37.137276, z: -0.064964} + - time: 8.833333 + value: {x: 0.000544, y: 36.994190, z: -0.064964} + - time: 8.866667 + value: {x: 0.000544, y: 36.837654, z: -0.064964} + - time: 8.900000 + value: {x: 0.000544, y: 36.666824, z: -0.064964} + - time: 8.933333 + value: {x: 0.000544, y: 36.480766, z: -0.064964} + - time: 8.966666 + value: {x: 0.000544, y: 36.278519, z: -0.064964} + - time: 9.000000 + value: {x: 0.000544, y: 36.059025, z: -0.064964} + - time: 9.033334 + value: {x: 0.000544, y: 35.821175, z: -0.064964} + - time: 9.066667 + value: {x: 0.000544, y: 35.563805, z: -0.064964} + - time: 9.100000 + value: {x: 0.000544, y: 35.285667, z: -0.064964} + - time: 9.133333 + value: {x: 0.000544, y: 34.985497, z: -0.064964} + - time: 9.166667 + value: {x: 0.000544, y: 34.661964, z: -0.064964} + - time: 9.200000 + value: {x: 0.000544, y: 34.313774, z: -0.064964} + - time: 9.233334 + value: {x: 0.000544, y: 33.939598, z: -0.064964} + - time: 9.266666 + value: {x: 0.000544, y: 33.538239, z: -0.064964} + - time: 9.300000 + value: {x: 0.000544, y: 33.108547, z: -0.064964} + - time: 9.333333 + value: {x: 0.000544, y: 32.649643, z: -0.064964} + - time: 9.366667 + value: {x: 0.000544, y: 32.160839, z: -0.064964} + - time: 9.400000 + value: {x: 0.000544, y: 31.641882, z: -0.064964} + - time: 9.433333 + value: {x: 0.000544, y: 31.092916, z: -0.064964} + - time: 9.466666 + value: {x: 0.000544, y: 30.514690, z: -0.064964} + - time: 9.500000 + value: {x: 0.000544, y: 29.908516, z: -0.064964} + - time: 9.533334 + value: {x: 0.000544, y: 29.276407, z: -0.064964} + - time: 9.566667 + value: {x: 0.000544, y: 28.621044, z: -0.064964} + - time: 9.600000 + value: {x: 0.000544, y: 27.945633, z: -0.064964} + - time: 9.633333 + value: {x: 0.000544, y: 27.253939, z: -0.064964} + - time: 9.666667 + value: {x: 0.000544, y: 26.549974, z: -0.064964} + - time: 9.700000 + value: {x: 0.000544, y: 25.837944, z: -0.064964} + - time: 9.766666 + value: {x: 0.000544, y: 24.405857, z: -0.064964} + - time: 9.800000 + value: {x: 0.000544, y: 23.693211, z: -0.064964} + - time: 9.833333 + value: {x: 0.000544, y: 22.987106, z: -0.064964} + - time: 9.866667 + value: {x: 0.000544, y: 22.290085, z: -0.064964} + - time: 9.900000 + value: {x: 0.000544, y: 21.604277, z: -0.064964} + - time: 9.933333 + value: {x: 0.000544, y: 20.931261, z: -0.064964} + - time: 9.966666 + value: {x: 0.000544, y: 20.272276, z: -0.064964} + - time: 10.000000 + value: {x: 0.000544, y: 19.628105, z: -0.064964} + - time: 10.033334 + value: {x: 0.000544, y: 18.999287, z: -0.064964} + - time: 10.066667 + value: {x: 0.000544, y: 18.386103, z: -0.064964} + - time: 10.100000 + value: {x: 0.000544, y: 17.788574, z: -0.064964} + - time: 10.133333 + value: {x: 0.000544, y: 17.206638, z: -0.064964} + - time: 10.166667 + value: {x: 0.000544, y: 16.640039, z: -0.064964} + - time: 10.200000 + value: {x: 0.000544, y: 16.088503, z: -0.064964} + - time: 10.233334 + value: {x: 0.000544, y: 15.551620, z: -0.064964} + - time: 10.266666 + value: {x: 0.000544, y: 15.029004, z: -0.064964} + - time: 10.300000 + value: {x: 0.000544, y: 14.520180, z: -0.064964} + - time: 10.333333 + value: {x: 0.000544, y: 14.024714, z: -0.064964} + - time: 10.366667 + value: {x: 0.000544, y: 13.542109, z: -0.064964} + - time: 10.400000 + value: {x: 0.000544, y: 13.071931, z: -0.064964} + - time: 10.433333 + value: {x: 0.000544, y: 12.613684, z: -0.064964} + - time: 10.466666 + value: {x: 0.000544, y: 12.166949, z: -0.064964} + - time: 10.500000 + value: {x: 0.000544, y: 11.731261, z: -0.064964} + - time: 10.533334 + value: {x: 0.000544, y: 11.306211, z: -0.064964} + - time: 10.566667 + value: {x: 0.000544, y: 10.891401, z: -0.064964} + - time: 10.600000 + value: {x: 0.000544, y: 10.486418, z: -0.064964} + - time: 10.633333 + value: {x: 0.000544, y: 10.090907, z: -0.064964} + - time: 10.666667 + value: {x: 0.000544, y: 9.704492, z: -0.064964} + - time: 10.700000 + value: {x: 0.000544, y: 9.327706, z: -0.064964} + - time: 10.733334 + value: {x: 0.000544, y: 8.961796, z: -0.064964} + - time: 10.766666 + value: {x: 0.000544, y: 8.607550, z: -0.064964} + - time: 10.800000 + value: {x: 0.000544, y: 8.265702, z: -0.064964} + - time: 10.833333 + value: {x: 0.000544, y: 7.937001, z: -0.064964} + - time: 10.866667 + value: {x: 0.000544, y: 7.622099, z: -0.064964} + - time: 10.900000 + value: {x: 0.000544, y: 7.321625, z: -0.064964} + - time: 10.933333 + value: {x: 0.000544, y: 7.036086, z: -0.064964} + - time: 10.966666 + value: {x: 0.000544, y: 6.765916, z: -0.064964} + - time: 11.000000 + value: {x: 0.000544, y: 6.511403, z: -0.064964} + - time: 11.033334 + value: {x: 0.000544, y: 6.272728, z: -0.064964} + - time: 11.066667 + value: {x: 0.000544, y: 6.049938, z: -0.064964} + - time: 11.100000 + value: {x: 0.000544, y: 5.842915, z: -0.064964} + - time: 11.133333 + value: {x: 0.000544, y: 5.651447, z: -0.064964} + - time: 11.166667 + value: {x: 0.000544, y: 5.475156, z: -0.064964} + - time: 11.200000 + value: {x: 0.000544, y: 5.313587, z: -0.064964} + - time: 11.233334 + value: {x: 0.000544, y: 5.166155, z: -0.064964} + - time: 11.266666 + value: {x: 0.000544, y: 5.032223, z: -0.064964} + - time: 11.300000 + value: {x: 0.000544, y: 4.911067, z: -0.064964} + - time: 11.333333 + value: {x: 0.000544, y: 4.801945, z: -0.064964} + - time: 11.366667 + value: {x: 0.000544, y: 4.704070, z: -0.064964} + - time: 11.400000 + value: {x: 0.000544, y: 4.616657, z: -0.064964} + - time: 11.433333 + value: {x: 0.000544, y: 4.538924, z: -0.064964} + - time: 11.466666 + value: {x: 0.000544, y: 4.470100, z: -0.064964} + - time: 11.500000 + value: {x: 0.000544, y: 4.409442, z: -0.064964} + - time: 11.533334 + value: {x: 0.000544, y: 4.356238, z: -0.064964} + - time: 11.566667 + value: {x: 0.000544, y: 4.309821, z: -0.064964} + - time: 11.600000 + value: {x: 0.000544, y: 4.269545, z: -0.064964} + - time: 11.633333 + value: {x: 0.000544, y: 4.234824, z: -0.064964} + - time: 11.666667 + value: {x: 0.000544, y: 4.205100, z: -0.064964} + - time: 11.700000 + value: {x: 0.000544, y: 4.179866, z: -0.064964} + - time: 11.733334 + value: {x: 0.000544, y: 4.158648, z: -0.064964} + - time: 11.766666 + value: {x: 0.000544, y: 4.141017, z: -0.064964} + - time: 11.800000 + value: {x: 0.000544, y: 4.126571, z: -0.064964} + - time: 11.833333 + value: {x: 0.000544, y: 4.114947, z: -0.064964} + - time: 11.866667 + value: {x: 0.000544, y: 4.105819, z: -0.064964} + - time: 11.900000 + value: {x: 0.000544, y: 4.098880, z: -0.064964} + - time: 11.933333 + value: {x: 0.000544, y: 4.093860, z: -0.064964} + - time: 11.966666 + value: {x: 0.000544, y: 4.090510, z: -0.064964} + - time: 12.000000 + value: {x: 0.000544, y: 4.088603, z: -0.064964} + rotation: + - time: 0.000000 + value: {0: -0.707113, 1: 0.000037, 2: -0.000000, 3: 0.707101} + - time: 0.300000 + value: {0: -0.707186, 1: 0.000544, 2: 0.000000, 3: 0.707028} + - time: 0.766667 + value: {0: -0.707440, 1: 0.002330, 2: 0.000000, 3: 0.706770} + - time: 1.266667 + value: {0: -0.707827, 1: 0.005123, 2: -0.000000, 3: 0.706367} + - time: 1.666667 + value: {0: -0.708231, 1: 0.008129, 2: 0.000000, 3: 0.705934} + - time: 1.900000 + value: {0: -0.708543, 1: 0.010522, 2: 0.000000, 3: 0.705589} + - time: 1.933333 + value: {0: -0.708668, 1: 0.011499, 2: 0.000000, 3: 0.705448} + - time: 2.000000 + value: {0: -0.709001, 1: 0.014161, 2: -0.000000, 3: 0.705065} + - time: 2.033333 + value: {0: -0.709209, 1: 0.015867, 2: -0.000000, 3: 0.704820} + - time: 2.200000 + value: {0: -0.710347, 1: 0.025924, 2: -0.000000, 3: 0.703374} + - time: 2.300000 + value: {0: -0.711030, 1: 0.032717, 2: 0.000000, 3: 0.702400} + - time: 2.433333 + value: {0: -0.711929, 1: 0.042923, 2: 0.000000, 3: 0.700938} + - time: 2.500000 + value: {0: -0.712368, 1: 0.048672, 2: -0.000000, 3: 0.700116} + - time: 2.533333 + value: {0: -0.712596, 1: 0.051937, 2: -0.000000, 3: 0.699650} + - time: 2.566667 + value: {0: -0.712827, 1: 0.055522, 2: -0.000000, 3: 0.699138} + - time: 2.633333 + value: {0: -0.713264, 1: 0.063273, 2: 0.000000, 3: 0.698033} + - time: 2.666667 + value: {0: -0.713362, 1: 0.065260, 2: -0.000000, 3: 0.697750} + - time: 2.700000 + value: {0: -0.713466, 1: 0.067500, 2: -0.000000, 3: 0.697431} + - time: 2.733333 + value: {0: -0.713574, 1: 0.070046, 2: -0.000000, 3: 0.697069} + - time: 2.766667 + value: {0: -0.713684, 1: 0.072837, 2: 0.000000, 3: 0.696671} + - time: 2.800000 + value: {0: -0.713773, 1: 0.074921, 2: 0.000000, 3: 0.696358} + - time: 2.833333 + value: {0: -0.713870, 1: 0.077379, 2: 0.000000, 3: 0.695990} + - time: 2.866667 + value: {0: -0.714048, 1: 0.080787, 2: 0.000000, 3: 0.695420} + - time: 2.900000 + value: {0: -0.714309, 1: 0.085426, 2: 0.000000, 3: 0.694597} + - time: 2.933333 + value: {0: -0.714824, 1: 0.094165, 2: -0.000000, 3: 0.692935} + - time: 2.966667 + value: {0: -0.715536, 1: 0.109811, 2: -0.000000, 3: 0.689891} + - time: 3.000000 + value: {0: -0.715983, 1: 0.134883, 2: 0.000000, 3: 0.684963} + - time: 3.033333 + value: {0: -0.715210, 1: 0.167319, 2: -0.000000, 3: 0.678586} + - time: 3.066667 + value: {0: -0.711986, 1: 0.208418, 2: 0.000000, 3: 0.670551} + - time: 3.100000 + value: {0: -0.703486, 1: 0.264323, 2: -0.000000, 3: 0.659728} + - time: 3.133333 + value: {0: -0.684759, 1: 0.337904, 2: -0.000000, 3: 0.645698} + - time: 3.166667 + value: {0: -0.644076, 1: 0.439155, 2: -0.000000, 3: 0.626346} + - time: 3.200000 + value: {0: -0.576643, 1: 0.552982, 2: -0.000000, 3: 0.601409} + - time: 3.233333 + value: {0: -0.493431, 1: 0.658151, 2: -0.000000, 3: 0.568651} + - time: 3.266667 + value: {0: -0.399943, 1: 0.748171, 2: -0.000000, 3: 0.529421} + - time: 3.300000 + value: {0: -0.306215, 1: 0.820781, 2: 0.000000, 3: 0.482236} + - time: 3.333333 + value: {0: -0.209557, 1: 0.878574, 2: -0.000000, 3: 0.429177} + - time: 3.366667 + value: {0: -0.112425, 1: 0.921912, 2: 0.000000, 3: 0.370727} + - time: 3.400000 + value: {0: -0.009617, 1: 0.950677, 2: -0.000000, 3: 0.310034} + - time: 3.433333 + value: {0: 0.106140, 1: 0.961609, 2: -0.000000, 3: 0.253068} + - time: 3.466667 + value: {0: 0.236786, 1: 0.949158, 2: 0.000000, 3: 0.207441} + - time: 3.500000 + value: {0: 0.391639, 1: 0.904165, 2: 0.000000, 3: 0.170602} + - time: 3.533333 + value: {0: 0.573940, 1: 0.806592, 2: 0.000000, 3: 0.141426} + - time: 3.566667 + value: {0: 0.774488, 1: 0.621062, 2: 0.000000, 3: 0.120209} + - time: 3.600000 + value: {0: 0.943426, 1: 0.312960, 2: -0.000000, 3: 0.109562} + - time: 3.633333 + value: {0: 0.990782, 1: -0.074271, 2: 0.000000, 3: 0.113292} + - time: 3.666667 + value: {0: 0.899197, 1: -0.416755, 2: 0.000000, 3: 0.133268} + - time: 3.700000 + value: {0: 0.748824, 1: -0.641043, 2: 0.000000, 3: 0.168306} + - time: 3.733333 + value: {0: -0.614017, 1: 0.760044, 2: -0.000000, 3: -0.212876} + - time: 3.766667 + value: {0: -0.512406, 1: 0.817997, 2: -0.000000, 3: -0.261382} + - time: 3.800000 + value: {0: -0.435021, 1: 0.844621, 2: 0.000000, 3: -0.312046} + - time: 3.833333 + value: {0: -0.373053, 1: 0.853100, 2: 0.000000, 3: -0.364762} + - time: 3.866667 + value: {0: -0.320504, 1: 0.848860, 2: -0.000000, 3: -0.420375} + - time: 3.900000 + value: {0: -0.273167, 1: 0.833372, 2: 0.000000, 3: -0.480490} + - time: 3.933333 + value: {0: 0.227772, 1: -0.805166, 2: 0.000000, 3: 0.547565} + - time: 3.966667 + value: {0: 0.185379, 1: -0.762018, 2: 0.000000, 3: 0.620454} + - time: 4.000000 + value: {0: 0.150359, 1: -0.706442, 2: 0.000000, 3: 0.691616} + - time: 4.033333 + value: {0: 0.123362, 1: -0.643111, 2: 0.000000, 3: 0.755771} + - time: 4.066667 + value: {0: 0.103837, 1: -0.576845, 2: 0.000000, 3: 0.810227} + - time: 4.100000 + value: {0: 0.090716, 1: -0.511192, 2: -0.000000, 3: 0.854666} + - time: 4.133333 + value: {0: 0.082775, 1: -0.448075, 2: 0.000000, 3: 0.890156} + - time: 4.166667 + value: {0: 0.078639, 1: -0.390769, 2: 0.000000, 3: 0.917123} + - time: 4.200000 + value: {0: 0.077120, 1: -0.340691, 2: -0.000000, 3: 0.937007} + - time: 4.233333 + value: {0: 0.077901, 1: -0.295319, 2: 0.000000, 3: 0.952218} + - time: 4.266666 + value: {0: 0.080973, 1: -0.251942, 2: -0.000000, 3: 0.964349} + - time: 4.300000 + value: {0: 0.086649, 1: -0.207720, 2: -0.000000, 3: 0.974343} + - time: 4.333333 + value: {0: 0.095671, 1: -0.159074, 2: 0.000000, 3: 0.982620} + - time: 4.366667 + value: {0: 0.108380, 1: -0.101421, 2: 0.000000, 3: 0.988922} + - time: 4.400000 + value: {0: 0.123092, 1: -0.031252, 2: -0.000000, 3: 0.991903} + - time: 4.433333 + value: {0: 0.138982, 1: 0.054596, 2: -0.000000, 3: 0.988789} + - time: 4.466667 + value: {0: 0.154867, 1: 0.157954, 2: 0.000000, 3: 0.975226} + - time: 4.500000 + value: {0: 0.168126, 1: 0.274578, 2: 0.000000, 3: 0.946753} + - time: 4.533333 + value: {0: 0.173312, 1: 0.388503, 2: -0.000000, 3: 0.905002} + - time: 4.566667 + value: {0: 0.165123, 1: 0.480714, 2: 0.000000, 3: 0.861190} + - time: 4.600000 + value: {0: 0.147007, 1: 0.549685, 2: -0.000000, 3: 0.822336} + - time: 4.633333 + value: {0: 0.123069, 1: 0.600648, 2: -0.000000, 3: 0.789985} + - time: 4.666667 + value: {0: 0.095730, 1: 0.638774, 2: -0.000000, 3: 0.763415} + - time: 4.700000 + value: {0: 0.066661, 1: 0.667574, 2: 0.000000, 3: 0.741553} + - time: 4.733333 + value: {0: 0.037997, 1: 0.689421, 2: -0.000000, 3: 0.723363} + - time: 4.766666 + value: {0: 0.009726, 1: 0.706487, 2: -0.000000, 3: 0.707660} + - time: 4.800000 + value: {0: -0.019287, 1: 0.720209, 2: 0.000000, 3: 0.693489} + - time: 4.833333 + value: {0: -0.050199, 1: 0.731341, 2: -0.000000, 3: 0.680162} + - time: 4.866667 + value: {0: -0.084308, 1: 0.740157, 2: 0.000000, 3: 0.667129} + - time: 4.900000 + value: {0: -0.123234, 1: 0.746488, 2: 0.000000, 3: 0.653888} + - time: 4.933333 + value: {0: -0.167811, 1: 0.749932, 2: -0.000000, 3: 0.639877} + - time: 4.966667 + value: {0: -0.214892, 1: 0.750971, 2: 0.000000, 3: 0.624390} + - time: 5.000000 + value: {0: -0.263397, 1: 0.749901, 2: 0.000000, 3: 0.606853} + - time: 5.033333 + value: {0: -0.314214, 1: 0.746434, 2: 0.000000, 3: 0.586606} + - time: 5.066667 + value: {0: -0.368699, 1: 0.739880, 2: 0.000000, 3: 0.562707} + - time: 5.100000 + value: {0: -0.428912, 1: 0.728767, 2: 0.000000, 3: 0.533792} + - time: 5.133333 + value: {0: -0.498850, 1: 0.709711, 2: 0.000000, 3: 0.497452} + - time: 5.166667 + value: {0: -0.588580, 1: 0.672550, 2: 0.000000, 3: 0.448609} + - time: 5.200000 + value: {0: 0.706680, 1: -0.593389, 2: 0.000000, 3: -0.385347} + - time: 5.233333 + value: {0: 0.845613, 1: -0.430497, 2: 0.000000, 3: -0.315613} + - time: 5.266666 + value: {0: 0.955224, 1: -0.144932, 2: -0.000000, 3: -0.257957} + - time: 5.300000 + value: {0: 0.949154, 1: 0.216116, 2: -0.000000, 3: -0.228910} + - time: 5.333333 + value: {0: 0.832708, 1: 0.504667, 2: -0.000000, 3: -0.227834} + - time: 5.366667 + value: {0: 0.693919, 1: 0.678443, 2: -0.000000, 3: -0.241230} + - time: 5.400000 + value: {0: 0.569148, 1: 0.779814, 2: 0.000000, 3: -0.260690} + - time: 5.433333 + value: {0: 0.462317, 1: 0.840154, 2: 0.000000, 3: -0.283557} + - time: 5.466667 + value: {0: 0.369643, 1: 0.876129, 2: 0.000000, 3: -0.309454} + - time: 5.500000 + value: {0: 0.286807, 1: 0.895993, 2: -0.000000, 3: -0.339026} + - time: 5.533333 + value: {0: 0.210581, 1: 0.903458, 2: 0.000000, 3: -0.373389} + - time: 5.566667 + value: {0: 0.142605, 1: 0.900560, 2: -0.000000, 3: -0.410676} + - time: 5.600000 + value: {0: 0.084197, 1: 0.889942, 2: 0.000000, 3: -0.448234} + - time: 5.633333 + value: {0: 0.033838, 1: 0.873592, 2: 0.000000, 3: -0.485481} + - time: 5.666667 + value: {0: 0.009954, 1: -0.852808, 2: 0.000000, 3: 0.522130} + - time: 5.700000 + value: {0: 0.048461, 1: -0.828355, 2: -0.000000, 3: 0.558103} + - time: 5.733333 + value: {0: 0.082758, 1: -0.800580, 2: 0.000000, 3: 0.593483} + - time: 5.766666 + value: {0: 0.113909, 1: -0.769427, 2: 0.000000, 3: 0.628495} + - time: 5.800000 + value: {0: 0.143532, 1: -0.734246, 2: 0.000000, 3: 0.663537} + - time: 5.833333 + value: {0: 0.172448, 1: -0.694028, 2: -0.000000, 3: 0.698990} + - time: 5.866667 + value: {0: 0.200777, 1: -0.647555, 2: 0.000000, 3: 0.735093} + - time: 5.900000 + value: {0: 0.228263, 1: -0.593454, 2: -0.000000, 3: 0.771821} + - time: 5.933333 + value: {0: 0.254165, 1: -0.530519, 2: -0.000000, 3: 0.808671} + - time: 5.966667 + value: {0: 0.277534, 1: -0.459186, 2: -0.000000, 3: 0.843874} + - time: 6.000000 + value: {0: 0.299613, 1: -0.386233, 2: -0.000000, 3: 0.872385} + - time: 6.033333 + value: {0: 0.322316, 1: -0.316511, 2: 0.000000, 3: 0.892151} + - time: 6.066667 + value: {0: 0.346291, 1: -0.250099, 2: 0.000000, 3: 0.904175} + - time: 6.100000 + value: {0: 0.371755, 1: -0.186078, 2: -0.000000, 3: 0.909491} + - time: 6.133333 + value: {0: 0.398713, 1: -0.123484, 2: -0.000000, 3: 0.908724} + - time: 6.166667 + value: {0: 0.424923, 1: -0.062300, 2: -0.000000, 3: 0.903083} + - time: 6.200000 + value: {0: 0.439423, 1: -0.006632, 2: -0.000000, 3: 0.898256} + - time: 6.233333 + value: {0: 0.437259, 1: 0.041276, 2: -0.000000, 3: 0.898388} + - time: 6.266666 + value: {0: 0.419403, 1: 0.082596, 2: -0.000000, 3: 0.904035} + - time: 6.300000 + value: {0: 0.385057, 1: 0.118466, 2: -0.000000, 3: 0.915258} + - time: 6.333333 + value: {0: 0.331885, 1: 0.148941, 2: -0.000000, 3: 0.931487} + - time: 6.366667 + value: {0: 0.257323, 1: 0.172400, 2: 0.000000, 3: 0.950822} + - time: 6.400000 + value: {0: 0.171125, 1: 0.186273, 2: -0.000000, 3: 0.967481} + - time: 6.433333 + value: {0: 0.099244, 1: 0.190927, 2: -0.000000, 3: 0.976574} + - time: 6.466667 + value: {0: 0.044737, 1: 0.189195, 2: 0.000000, 3: 0.980920} + - time: 6.500000 + value: {0: 0.004342, 1: 0.182449, 2: 0.000000, 3: 0.983206} + - time: 6.533333 + value: {0: -0.023781, 1: 0.170474, 2: 0.000000, 3: 0.985075} + - time: 6.566667 + value: {0: -0.037255, 1: 0.150262, 2: -0.000000, 3: 0.987944} + - time: 6.600000 + value: {0: -0.039132, 1: 0.119271, 2: -0.000000, 3: 0.992090} + - time: 6.633333 + value: {0: -0.039402, 1: 0.075099, 2: 0.000000, 3: 0.996397} + - time: 6.666667 + value: {0: -0.048584, 1: 0.025153, 2: -0.000000, 3: 0.998502} + - time: 6.700000 + value: {0: -0.071756, 1: -0.019479, 2: 0.000000, 3: 0.997232} + - time: 6.733333 + value: {0: -0.108354, 1: -0.043010, 2: -0.000000, 3: 0.993182} + - time: 6.766666 + value: {0: -0.147837, 1: -0.045065, 2: -0.000000, 3: 0.987984} + - time: 6.800000 + value: {0: -0.181280, 1: -0.041020, 2: 0.000000, 3: 0.982576} + - time: 6.833333 + value: {0: -0.210141, 1: -0.038339, 2: 0.000000, 3: 0.976919} + - time: 6.866667 + value: {0: -0.239157, 1: -0.037620, 2: 0.000000, 3: 0.970252} + - time: 6.900000 + value: {0: -0.273587, 1: -0.038936, 2: -0.000000, 3: 0.961059} + - time: 6.933333 + value: {0: -0.321033, 1: -0.043061, 2: -0.000000, 3: 0.946089} + - time: 6.966667 + value: {0: -0.396420, 1: -0.047523, 2: -0.000000, 3: 0.916838} + - time: 7.000000 + value: {0: -0.473635, 1: -0.051127, 2: -0.000000, 3: 0.879236} + - time: 7.033333 + value: {0: -0.536952, 1: -0.049042, 2: 0.000000, 3: 0.842186} + - time: 7.066667 + value: {0: -0.587063, 1: -0.044948, 2: -0.000000, 3: 0.808293} + - time: 7.100000 + value: {0: -0.622146, 1: -0.041416, 2: 0.000000, 3: 0.781805} + - time: 7.133333 + value: {0: -0.644589, 1: -0.038081, 2: 0.000000, 3: 0.763580} + - time: 7.166667 + value: {0: -0.654572, 1: -0.034017, 2: -0.000000, 3: 0.755234} + - time: 7.200000 + value: {0: -0.664022, 1: -0.030017, 2: 0.000000, 3: 0.747111} + - time: 7.233333 + value: {0: -0.672941, 1: -0.026095, 2: -0.000000, 3: 0.739236} + - time: 7.266666 + value: {0: -0.681333, 1: -0.022267, 2: 0.000000, 3: 0.731635} + - time: 7.300000 + value: {0: -0.689206, 1: -0.018547, 2: -0.000000, 3: 0.724328} + - time: 7.333333 + value: {0: -0.695409, 1: -0.015325, 2: -0.000000, 3: 0.718450} + - time: 7.433333 + value: {0: -0.698985, 1: -0.010786, 2: 0.000000, 3: 0.715055} + - time: 7.533333 + value: {0: -0.701882, 1: -0.007031, 2: -0.000000, 3: 0.712259} + - time: 7.633333 + value: {0: -0.704114, 1: -0.004090, 2: -0.000000, 3: 0.710075} + - time: 7.666667 + value: {0: -0.704440, 1: -0.003653, 2: 0.000000, 3: 0.709754} + - time: 8.000000 + value: {0: -0.705397, 1: -0.002350, 2: 0.000000, 3: 0.708809} + - time: 8.500000 + value: {0: -0.706259, 1: -0.001168, 2: -0.000000, 3: 0.707952} + - time: 12.000000 + value: {0: -0.706347, 1: -0.001047, 2: -0.000000, 3: 0.707865} + scale: + [] + vertexCache: + [] + visibilityAnimation: + [] + blendShapes: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset.meta new file mode 100644 index 00000000..6ae035b6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Animations/Base Layer Rocket 3.animationAsset.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + AnimationAsset: ! af080ccb-4a5a-400a-aa23-a9f0d85ad3e1 + ImporterName: AnimationAssetImporter + PrimaryAsset: ! af080ccb-4a5a-400a-aa23-a9f0d85ad3e1 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh new file mode 100644 index 00000000..eea077d6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae4c64909c061a4a29908d46efae3ddcc69aafd036b0391c24b1418103af9cc +size 8127 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh.meta new file mode 100644 index 00000000..bf999ae8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Rocket_sparks.mesh.meta @@ -0,0 +1,21 @@ +- ! + ImportedAssetIds: + FileMesh: ! 3e3dc67e-f8de-4502-b790-51fa5c73c19b + ImporterName: FileMeshImporter + PrimaryAsset: ! 3e3dc67e-f8de-4502-b790-51fa5c73c19b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + color: UNorm Byte + position: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat new file mode 100644 index 00000000..cb12c85e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat @@ -0,0 +1,133 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 3428837e-1a88-494b-a4ac-abeea509b069 +- ! + CachedProperties: + [] + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Front + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Center_N032: + typeIdx: 3 + value: {x: 0.500000, y: 0.500000} + Port_Direction_N037: + typeIdx: 3 + value: {x: 1.000000, y: 1.000000} + Port_Input0_N000: + typeIdx: 1 + value: 0.100000 + Port_Input0_N003: + typeIdx: 1 + value: 1.000000 + Port_Input0_N014: + typeIdx: 1 + value: 0.100000 + Port_Input0_N045: + typeIdx: 1 + value: 0.200000 + Port_Input1_N000: + typeIdx: 1 + value: 0.000000 + Port_Input1_N003: + typeIdx: 1 + value: 0.200000 + Port_Input1_N013: + typeIdx: 1 + value: 0.500000 + Port_Input1_N014: + typeIdx: 1 + value: 0.200000 + Port_Input1_N034: + typeIdx: 1 + value: 1.000000 + Port_Input1_N041: + typeIdx: 1 + value: 12.000000 + Port_Input1_N043: + typeIdx: 1 + value: 1.000000 + Port_Input1_N045: + typeIdx: 1 + value: 0.500000 + Port_Input1_N046: + typeIdx: 1 + value: -1.000000 + Port_Input1_N047: + typeIdx: 1 + value: 0.000000 + Port_Multiplier_N039: + typeIdx: 1 + value: 1.000000 + Port_Position1_N038: + typeIdx: 1 + value: 0.250000 + Port_Scale_N032: + typeIdx: 3 + value: {x: 0.050000, y: 0.000000} + Port_Value0_N038: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Port_Value1_N038: + typeIdx: 5 + value: {x: 1.000000, y: 0.439109, z: 0.000000, w: 1.000000} + Port_Value2_N038: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + PreviewNodeID: + typeIdx: 0 + value: 0 + Tweak_N44: + typeIdx: 1 + value: 0.510000 + black_height: + typeIdx: 1 + value: 1.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + texture_map: + typeIdx: 9 + value: + id: 1c126145-7185-4ac9-b2fe-926ada7a96fc + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + texture_mapBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + texture_mapDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + texture_mapTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + texture_mapUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Pass: ! 7da3011e-c379-47db-87d5-63ebc4c9454b diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat.meta new file mode 100644 index 00000000..5050bdee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! ee5a38f8-6b3c-425a-90e8-babde063e515 + ImporterName: MaterialImporter + PrimaryAsset: ! ee5a38f8-6b3c-425a-90e8-babde063e515 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph new file mode 100644 index 00000000..fbb96c74 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b681660d64159cd6c19addaf0f0044633f21bcd3dee643f6b4f211c8bb94f07 +size 254058 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph.meta new file mode 100644 index 00000000..7c3e84df --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/Top_Rocket_Trail.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 7da3011e-c379-47db-87d5-63ebc4c9454b + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 7da3011e-c379-47db-87d5-63ebc4c9454b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png new file mode 100644 index 00000000..fb8e078d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:824194d8107c87d74577c3a9b675ab9874075f76feafd1572f050e1e0e2015b5 +size 1945 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png.meta new file mode 100644 index 00000000..e66ecc0a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/RocketWorkshop/VFX/Rocket Sparks/stripe_noise 2.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 1c126145-7185-4ac9-b2fe-926ada7a96fc + ImporterName: FileTextureImporter + PrimaryAsset: ! 1c126145-7185-4ac9-b2fe-926ada7a96fc + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab new file mode 100644 index 00000000..d1f05f7a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab @@ -0,0 +1,10663 @@ +- ! + PackagePath: "" + objects: + - ! 2c79d8f8-6e19-4bc1-8c7e-eeb7b9172be5 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! ffb9811f-92b4-4514-ac28-2aa421dc9dfe + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: false + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + Axis: Z + Length: 1.900000 + Radius: 2.100000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: piece_0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 5.097826, z: -0.064316} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 20d2fbd5-6bf0-4241-9c0d-8258178f6789 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fd61450e-fa46-40aa-a6c1-21c78d870ba2 + - ! abfbbe54-80b3-4a90-a9a0-808dc3ff5e8d +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4bb77992-0e3e-4b1c-8d3b-c245e47391ca + - ! e9bbe9da-6b36-4e99-a4cd-1fe2d28d823d +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! d6404b8a-628b-42e8-86d6-74a1d1136133 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 077b8c55-6fe3-42b4-a99e-46f92cb22835 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: GridContentCreator + Enabled: true + ScriptAsset: ! ad83ff54-844d-49a8-9102-f568a9d291c3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + itemPrefab: ! 642b5216-980f-4be9-9593-16aa50bc54ca + itemsCount: ! 30.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! ae5f399d-f412-42b2-915e-5c7de7787711 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8f1be4e1-ff3e-47a5-a761-b6ed0d466561 + - ! f1eaf93c-70f9-43fe-8fe2-a41582142f06 +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7d07885e-d3be-41f0-b24d-2f61c10779fa + Components: + - ! 8105b0c7-f201-4c2a-aedd-7e2b4d4b0af1 + - ! ca21cb84-c838-436d-9705-24c3cbd196e1 +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7a8db928-d205-4f3f-9d59-a7a13759da73 + - ! ceb35dbc-0c60-4f87-81a9-31f047f53fb7 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: Billboard + Enabled: true + ScriptAsset: ! b5593251-a0da-4491-8561-2e0dccd715bc + ScriptInputsDefault: + _xAxisEnabled: true + _yAxisEnabled: true + _zAxisEnabled: true + _axisBufferDegrees: true + _axisEasing: true + duration: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _xAxisEnabled: false + _yAxisEnabled: true + _zAxisEnabled: false + _axisBufferDegrees: ! {x: 0.000000, y: 0.000000, z: 0.000000} + _axisEasing: ! {x: 1.000000, y: 1.000000, z: 1.000000} + duration: 0.033000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Platform + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -30.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.000000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 81ac99fe-bb9c-4203-88a5-149ff24f4d8f +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c647f5e5-a48d-4552-99c7-630bcb3fc5af + - ! 3bd20dac-a943-4d7e-a08d-6b529725b690 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + Toggle Off + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! dc6b7e84-4d7f-4754-b5ef-7a8e8995a9cc + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! dae05fcb-ff13-4f9c-9e8c-92679490f805 + - ! 1fcdc7cc-c2fa-4a12-95f4-caeffa79295e + - ! 61451a97-d498-4319-850a-db26407772aa + - ! 8f271eef-bc6f-44ca-8498-4d71eb993dc0 + - ! 35b271f1-4ef6-431e-bd13-f995681ed278 + Components: + - ! cd4cac9b-7761-4921-b9cc-f78b074bab79 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Convex: false + Skin: ! 00000000-0000-0000-0000-000000000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! 2a0176da-4f12-41be-ae32-8ca018680f8b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! ffb9811f-92b4-4514-ac28-2aa421dc9dfe + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 8f5afc96-f8af-49e6-8c59-93f62d72c98c + _offIcon: ! 1b94b845-f11f-4781-8362-c5cb1bef17fa + _isToggledOn: true + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! 62b8a451-7989-45b5-a6c7-ab02c30f30de + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 5c84b816-a8dd-4475-8337-964ddf2aceea + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + showFollowButton: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 31.000000, y: 40.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: false + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9129b095-809f-453f-ad22-f9ac86c7ab8c + - ! a61b2db4-6c4d-4e28-960b-3876a0d4054c +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c0a16006-a72e-46ea-b037-6f6055a8037e + - ! f7d350e1-f928-42ff-9a3c-3460594bfa00 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 073b79f8-7222-4585-86f6-8acd58335931 + useGlowMesh: true + glowRenderMeshVisual: ! 80935988-d850-43b0-8489-fdfb937b76e4 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Flight Speed + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 88acf2e5-9240-47f4-8a6f-82805925f710 + sliderMax: ! 8862e579-091b-498f-b65a-9ade1608fdb7 + _sliderKnob: ! ef252a02-e448-44b9-9e43-6cba7ea7c0f4 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: root + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 04ff2d6a-03de-4b0a-bedc-a4b282d7efc5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Categories + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dd029e31-8ad4-48dc-a2bc-5fa83ab2622f + - ! f4669faa-525a-4926-bfdf-e7b1b07813b7 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! f580b6f0-2a1a-48d8-9796-674a7b0ecd46 + useGlowMesh: true + glowRenderMeshVisual: ! f57a3e91-93ed-467a-a0c0-deecbed6cd45 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Rocket + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.064316, z: -5.097826} + rotation: {x: 90.000008, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bd9c7a12-8208-473d-b8d7-540d137af7a6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! aafb526f-a2ed-4dc7-acd9-7245b143dbb4 + - ! 09db777e-2a46-487f-8d0e-89061d39cbce +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + Mesh: ! 2a58608b-008d-40f8-9627-d339311f2e1d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch Horizontal: 0.000000 + Pinch Vertical: 0.000000 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f57a3e91-93ed-467a-a0c0-deecbed6cd45 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 18acdc7e-459f-4219-bcd5-8614cb2776ef + - ! af39b2ca-39f9-4be3-883f-3e60844b18d7 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 2d43b9d7-cdc4-4727-8b79-f643982ea695 + useGlowMesh: true + glowRenderMeshVisual: ! 702c7723-1685-4104-adfb-d00ae5caf8b0 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketLaunchControls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -35.000000, z: -30.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c903e1ce-abf1-4253-84ca-85d5e3999a67 + - ! 4f9c951b-cdcd-4f27-a21a-c791f2f6855e + - ! a77c1eb1-9593-4438-87b1-ae63ecf14f5d + - ! 6c6cb8b7-3a98-4d0b-aacc-d52cbec6726a + - ! 4448e178-da1e-466c-832d-cb35015a7100 + - ! db4b404e-9f10-4f88-b107-2e38bd2b1afc + - ! 9cd18e63-f258-47f2-8eac-80b575acda0d + - ! a2df5570-1a26-46c8-9692-745f51555629 + - ! 50ecda44-3290-4cec-9805-7b911c17c3a3 + - ! 4eef3acd-6894-43d4-b6e6-bba4bc729457 + Components: + - ! 2b3b3079-d010-4f80-b3de-b51fcb3d4f57 + - ! ebeaae85-cb2b-41e4-a902-44286f2258be +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 6e910f1c-f33c-4497-8c7d-ce77b8f7b885 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! ad481c2d-f6bf-4d74-9d13-17ca74924223 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 8d858ff6-aa23-4863-b2df-a5af56b736da + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 15.000000, y: 23.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: true + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SIK Examples + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c0f104b8-b66f-4cc2-9a40-911d8b08fc7c + - ! 734fd77c-cf92-4677-a635-faefb258d109 + - ! 675942d7-d7d1-48fc-abd8-5a6bff7f56cd + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: HeadlockExample + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6b154d00-05e6-4008-8c8d-ff3c38dc97c1 + - ! fd5b3964-1eab-4124-91f5-e57195abbe20 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 2752b65d-df97-4c03-9eef-c5f00796c1c7 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.500000 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch! + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 76a4091e-15c1-4831-87d8-b69dbee3f873 + - ! c7e7d299-e828-4a21-bdfc-cafd6c557c4b +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Right + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! a4ee76b0-f83d-4264-8f35-6f65e6deef32 + - ! 7af80f84-dca4-4828-a01e-1e2c83301467 + - ! 1b5518c4-e625-4eb2-ab98-ef3675396855 + Components: + - ! 5773cc04-5773-434e-9985-2dd4200f1a77 + - ! 35ab393e-a4e7-4608-a60a-b9e0a5683dc9 + - ! 1efadfe5-29ad-4190-a473-1ce818b39230 + - ! 4982a4bd-8004-4ced-a93f-8c22fa227369 + - ! 08ef5629-3d1d-4e26-8a1d-b0b7ae25f515 + - ! 51a93b09-9f90-4d9d-924c-ca920dd25aae + - ! 56885160-9bf6-4d66-9330-0a8001c1ffd5 + - ! 4f1beab4-2c8a-4f63-a05f-357008991456 + - ! 9852472b-586e-40df-be99-0ea695ce4dac +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: -7.000000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 40.000000, y: 40.000000, z: 40.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 98c2d544-25c1-43a6-a6f8-d396385399b1 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Center + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 5857ba63-8e4c-4afa-9413-3ef6d3184e32 + - ! 8f5afc96-f8af-49e6-8c59-93f62d72c98c + - ! 1b94b845-f11f-4781-8362-c5cb1bef17fa + Components: + - ! 6bf51efb-c165-480c-834e-cd9e1573372e + - ! ae4ba4ca-d378-448a-a6bc-a0633b4a3211 + - ! 1da1ae14-3e7a-4cfa-b353-e425319a3572 + - ! 1894539e-bf0c-4d34-bc92-d5eca75e7589 + - ! 0a9143d8-a5e8-4bc5-90dd-98075fe95d19 + - ! cf20aefe-5abc-4ebb-8336-b7e1e0c9a094 + - ! ff19197c-9428-4f08-9a91-3b0aa6da372a + - ! 87ea7e7c-debc-47fd-9c33-4015328482c2 + - ! e63bf552-2edd-44f6-817b-8467a4db70e1 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Launch Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3375b270-5d27-4f31-b4e9-9b12bc85c58f +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 15 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 00000000-0000-0000-0000-000000000000 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! 008299c5-f728-4311-b3c6-21cbf5660edf + _boundingHeightOffset: ! -1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! e3c97abf-6ee9-42b3-bc7e-1876cca70142 + _offIcon: ! 5236bf74-2c01-4cfa-8ac3-71def1454ab5 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 5c84b816-a8dd-4475-8337-964ddf2aceea + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 6f2f7e56-ab07-4f8b-935a-c0150d74e9f6 + sliderMax: ! 6ca8c494-08e6-480c-a6c0-b3dce62bd692 + _sliderKnob: ! e73b1f1d-7c11-4099-9632-edabe94166a8 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! d1d15b9a-f9f8-45f7-b124-de8885fbcb5d + knobObject: ! a0bee32f-a528-40cc-8704-9dd39691c1a4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Skin + Enabled: true + skinBones: + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Toggle On + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Path Option C + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ad481c2d-f6bf-4d74-9d13-17ca74924223 + - ! eaf4b260-3a9d-465a-8b21-86d130203721 + - ! 8e63e8fd-3b3a-4713-8173-b4ef651ec203 + - ! 3a75d733-5107-4a4a-a6de-0204e4089a00 + - ! aa952deb-b054-4e99-aa60-600cf2678371 + - ! 2af4ec65-1023-4f81-873e-950d998a65f2 +- ! + PrefabRemaps: + [] + Name: RocketGridContentCreator + Enabled: true + ScriptAsset: ! 01cb4976-7110-49ff-ae27-dbb77153e547 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocketConfigurator: ! a97c37a8-109a-4866-9e37-56d6c8a9c1f8 + objectPrefabs: ! + - ! 8104e815-4316-48be-ad1a-2021666f989f + - ! b9b3aff4-658d-4c76-ab3d-b479d4a722c8 + - ! e56db565-cd60-4e54-9dc1-b211e729b73b + - ! e7254ab7-df28-44a9-9252-05d53fbdc7da + - ! 242abbc5-63eb-448b-9a60-c5f5eae6725c + - ! 76789411-9f7c-4352-84bb-6a762a706580 + - ! 68a19954-e237-4b18-827d-db13073a38d6 + - ! 32671acc-9b4d-4487-ac10-3af976d942d7 + - ! 5c321a82-1be9-40b7-a482-f37464b708db + - ! dbb1f943-cd3e-4b20-89e5-0ce41c98a705 + - ! bbe206c8-38e1-4245-9550-2a019fe7e078 + - ! f2f3ca41-1bd5-4136-a5db-f3edb882b464 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Objects + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ebe15137-3734-487c-a0d7-b498f241e8c1 + - ! e7b1b809-065c-4da1-8d3a-4c59dc598329 + - ! 10ef1717-a0b6-4e65-a7d9-44f91b6017cd + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 046ad65b-f330-4692-9807-fbd95f8061f2 + - ! 7476680a-1828-4517-8b6d-a38bee74bd03 +- ! + PrefabRemaps: + [] + Name: ScrollButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: -90.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2572bdd9-c2de-4adb-be7a-d53217cf7db4 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 80935988-d850-43b0-8489-fdfb937b76e4 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 995378a9-0c60-444f-95ea-9a77adf164d6 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 765da78a-e794-4604-a38a-33a1c38d7406 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 7af80f84-dca4-4828-a01e-1e2c83301467 + _offIcon: ! 1b5518c4-e625-4eb2-ab98-ef3675396855 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d1d15b9a-f9f8-45f7-b124-de8885fbcb5d + - ! f14127e0-d9ae-44ec-8230-3851a3639162 +- ! + PrefabRemaps: + [] + Name: Animation Player + Enabled: true + Autoplay: false + ClipRangeType: Frames + AnimationClips: + - ! + AnimationAsset: ! 8811a6ee-076e-4144-a4e2-0cdc9e2fe3c2 + Name: Base Layer Rocket 1 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 400.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! 7eba6aa9-4ba6-4792-9195-8471fd86103b + Name: Base Layer Rocket 2 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 420.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! af080ccb-4a5a-400a-aa23-a9f0d85ad3e1 + Name: Base Layer Rocket 3 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 360.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 88acf2e5-9240-47f4-8a6f-82805925f710 + - ! 8862e579-091b-498f-b65a-9ade1608fdb7 + Components: + - ! 09f0b7d0-42b3-4eaf-9c54-fef40b29a0dd +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Sphere" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -22.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7ce79967-b6f4-41de-a181-7d05dadb9224 + - ! bcc84955-f911-4c35-ba6b-2c77998f9f4d + - ! ad378ea5-7cc1-4152-a022-3f3563680405 + - ! e08f8232-5976-4c1c-8716-e28147a6ce64 + - ! e1f8bc07-848c-411f-8468-e593250bd389 + - ! 1146c9ab-b553-4255-9954-52ffe8f621f5 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Launch PinchButtonCapsule + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -10.850000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 37b4795a-0ce0-4e29-b3cc-79aa3cb81fbe + Components: + - ! d5ef0869-3c0f-4768-88e8-8eebbc747a17 + - ! 96a77374-8d65-4258-afa8-56fa7dd9a353 + - ! 70a5b7c3-549e-4a03-ba4a-127df073805d + - ! 7eb68798-e720-4b5b-bab0-13835772bcee + - ! da181ff2-8374-4cc6-96f4-a40ed3d7e14c + - ! 7b3b0ace-4c9f-4d8d-a869-af9439d938e7 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 077b8c55-6fe3-42b4-a99e-46f92cb22835 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Flight Path + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 7.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d2e60671-ae1e-419a-ac5e-3759a34df741 +- ! + PrefabRemaps: + [] + Name: ShowPlatformToggleButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.850000, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.150000, y: 1.150000, z: 1.150000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6777d912-e79d-4f3d-8a23-f24d7acdd522 + - ! 49d3c420-96cd-485d-9a64-bb7d2c52204f + - ! 7b503393-b7d7-4fee-bebc-2e0a0a158c3e + - ! a3a2626d-dc87-4c90-bb2f-4ef4cb8271c6 + - ! 37b759b8-1f4e-4f26-b5ee-57c90bc21a73 + - ! e6e4c36b-32c2-4083-b6b2-0defb0f50b4d +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + _boundingHeightOffset: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! 1353aaef-a78a-4f70-80ef-f2c9fe717ac5 + _boundingHeightOffset: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f24b3095-782f-4fbe-a900-138727112c90 + - ! ebcabaf7-993b-47f4-9ff6-1b867297f822 +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a97c37a8-109a-4866-9e37-56d6c8a9c1f8 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 995378a9-0c60-444f-95ea-9a77adf164d6 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! c8ebd78d-8835-4c00-8308-6da560d95db7 + - ! 774e1493-bd36-454c-b478-ec0cebda666a + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 1353aaef-a78a-4f70-80ef-f2c9fe717ac5 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 34db47f7-8795-4800-940f-3381c9bc70fe + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 13 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4d35bac2-e858-4d9c-afa4-6f02ae7d5065 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ae5f399d-f412-42b2-915e-5c7de7787711 + - ! aa4e29d0-66d3-49ee-b482-4a2a4c447d88 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 3abc2130-bd88-4fb0-9f9b-2637a20f2c13 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollBarFeedback + Enabled: true + ScriptAsset: ! 37bf0d33-fcd6-4d18-8150-19002357972e + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + scrollbarObject: ! d07d1906-eaea-4b71-92d2-bea1f8736f92 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! cb2f009e-3cf2-4187-bf1e-aafac6787521 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 47.675831, y: 19.865082, z: 33.071331} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7a4a44a4-8a66-4320-a3cb-c5fc4a55bb4b + - ! ee4c641a-c79a-436e-a89e-1e8ffe9cd3bc + - ! b47a1db7-5e4a-4f06-9a2e-7251e54d0a66 + - ! a2dc5a63-c1df-41a5-90b2-e740f12bbf63 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 22a58330-8626-4c4a-8423-4ef292fd378e + Components: + - ! d918b75d-d600-45fb-8d41-0c40a86951f9 + - ! 2272c271-7b6c-48cc-ae08-d7d30dde682e +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e7a1b64d-9ae1-430a-a584-51a434e45381 + - ! 44cc41b9-1913-4614-aa74-d6adf8658156 +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple UI" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8c43891d-652c-4699-90e9-d7d2c4dd0a29 + - ! bc68a313-97f1-497f-8510-ad525c2932be + - ! 765da78a-e794-4604-a38a-33a1c38d7406 + - ! c32fdec6-4ed8-4c87-8521-950db919ede2 + - ! ed7615db-bf66-4ceb-9b6d-94585dfba275 + - ! b48985e2-11a7-40a4-b8df-1e8b4854aa1a + - ! fd8de8fc-3999-4e0a-b9a9-745c28d186c2 + - ! 30bf6d19-885c-42fe-8195-3e71e8c3918b + - ! f62fbb0d-eab9-4ce3-ac4f-197c49d50ad0 + - ! b5fef323-29cd-48d3-a043-4dc937b28241 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 2752b65d-df97-4c03-9eef-c5f00796c1c7 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -8.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 16.000000, y: 16.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8197be4b-6667-4511-90ec-3764aaf7097e +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: -6.500000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ace5dc90-9121-482e-bc77-338e3f17c25f + - ! 5d4a954b-d8cc-4290-917f-fc4284b79c3e +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.000000, y: 2.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f5ea9cd5-c350-473d-b0cc-9117263fd777 + Components: + - ! 2dc056c9-08ab-4593-a8d7-e2e7ad71861b +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! b487fcf3-002e-4822-9625-f02956fbb781 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text3D + Enabled: true + RenderOrder: 14 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e6189357-b3eb-4ed5-8a07-593c3328fc24 + Text: HeadlockExample + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + ExtrusionDepth: 0.500000 + ExtrudeDirection: Both + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + ShadowMode: None +- ! + PrefabRemaps: + [] + Name: Rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a5eaad25-8b90-4fca-9706-422e02f5c643 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Path Option B + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2e9e3044-964b-4715-bfd8-238f810af6ee + - ! e33700d5-863c-4eb6-b422-2b6c26477e2c + - ! 9bc07bdc-0bed-42c5-997f-7eaa4a937221 + - ! 866bd418-abd8-4061-a6ff-2f4e36e2cbf5 + - ! c3469410-615c-48b7-b277-fdbb7fe01425 + - ! e0de0477-b7d3-4d25-a608-c298b58b3860 +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 113ef412-c8f7-4b7e-a3ab-e59df2135943 + Components: + - ! 802c2599-cd73-47a3-9a39-9fef13d5fff5 + - ! 7c53858f-523a-451c-9ada-9112151d87df +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 88f531cc-523c-47b1-9231-7c166961c7a1 + _offIcon: ! 8fd43d53-4707-4755-ae21-281babc4a8a5 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: RocketPartSelector + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -35.000000, y: -1.927469, z: -100.000000} + rotation: {x: 0.000000, y: 10.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6a863191-faea-4432-b7f4-41bc539cc8e7 + Components: + - ! 1b490eb7-9528-4f6f-a0c1-50a388b944b3 +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Box" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -6.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ebbecedd-4b69-462f-8155-8784cc752bb0 + - ! c7b5e2c4-ed9e-4fc9-a0ac-ae5ab3522ca9 + - ! 2a40ff1f-4494-4db1-8e8b-1560f5ae0b45 + - ! 2a0176da-4f12-41be-ae32-8ca018680f8b + - ! 15c8ff47-7aaf-4ed8-8983-1539f0f073c4 + - ! f740487d-923c-4156-bad2-f1deb9c49131 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c8325863-b981-4ca5-a5b4-bc6192e4bf5c + Components: + - ! 77141b36-1afa-4580-a4e7-77b46a7e7144 + - ! 0724cc1a-aac8-4dc7-b552-c63aadfb2934 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.672431 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 995378a9-0c60-444f-95ea-9a77adf164d6 + - ! 85db361a-2725-4fdc-b752-1e0403bc821c +- ! + PrefabRemaps: + [] + Name: Controls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 805d8e27-4c57-4ffb-a156-c006b14f8ebc + - ! 34db47f7-8795-4800-940f-3381c9bc70fe + - ! 36d23b92-f05c-4013-8bf2-28e6662dedae + - ! d6404b8a-628b-42e8-86d6-74a1d1136133 + - ! e6fe490c-8c1d-4b7b-a558-bf9a71e1e536 + - ! 687dfae2-c079-4fd4-9143-8a8a419910b9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple Interaction" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e03dda15-5806-44af-97cb-f144db36e8f9 + - ! 6e910f1c-f33c-4497-8c7d-ce77b8f7b885 + - ! 4d8e42f2-86df-4cf7-a61d-d8e6870abac5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! bc68a313-97f1-497f-8510-ad525c2932be + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 71ca0806-008a-45ac-9173-d186754e53bc + - ! df969d23-af5a-4743-bd64-da3f32af946c + - ! 26c35729-b4dd-45aa-a373-b7d47dc657e0 + Components: + - ! 4d93040b-0877-4dc1-a0c2-a495016de83b + - ! 7d0ec120-acb2-4b27-99cb-bda87b3f26a0 + - ! dba0a409-027d-4f2d-b4eb-cf1c204c780d + - ! d2ceb182-c8a1-43bc-9aea-ff239f340c22 + - ! 491ecefb-13cd-4356-a5d9-73f442a5e381 + - ! 014e6143-34a3-4ea5-9f68-9048c596274a + - ! 497f7188-a34d-4c52-9285-6ef486ad684b + - ! 53ef3073-ecda-40c9-a16c-83797dbdb78e + - ! 68719226-e7e0-4113-bdab-6aec4a1b4375 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7f82b210-b438-4633-853e-6f804c2638bb + Mesh: ! 7ba378bf-39c6-4345-acbf-9e09fff8deaa + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 18828ccb-4865-4bf5-b7c5-fdec9ae7650e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Container Frame + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 74 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8fdab901-ff35-4223-8a72-2b6426756517 + - ! 24a7cc7c-689a-411c-b7d5-1f41b94b856e +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6f2f7e56-ab07-4f8b-935a-c0150d74e9f6 + - ! 6ca8c494-08e6-480c-a6c0-b3dce62bd692 + Components: + - ! ab173257-917c-4083-96cf-db6a82c6ae1b +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! d5ef0869-3c0f-4768-88e8-8eebbc747a17 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 271b74cf-8459-4dd1-83a4-91af22fc6f5f + meshHoverMaterial: ! 74679e29-9817-463b-9427-ffff4cccb602 + meshPinchedMaterial: ! 43cbc95f-b089-4e59-a639-ca3950ebd1b5 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _onIcon: true + _offIcon: true + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 00000000-0000-0000-0000-000000000000 + _offIcon: ! 00000000-0000-0000-0000-000000000000 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 47f40157-724c-4a3d-b60c-1553311e79b9 + Components: + - ! 073b79f8-7222-4585-86f6-8acd58335931 +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 40fe63a3-fad2-482f-afb7-5f08fbf540d9 + - ! 2a386676-8605-4331-86a5-5368d51335e6 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2752b65d-df97-4c03-9eef-c5f00796c1c7 + - ! ccc7cd7b-286e-43c8-8e4d-7b14c01d4978 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 14.000000, z: 1.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7ad2c4a8-399e-455b-8a94-7810c8cbaa96 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Radius: 1.300000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 1766b243-ecbd-49ab-99a0-0a126bf505c7 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 13 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ab483a45-8677-4f11-8cd0-5c5d4a239a94 + Mesh: ! e7bb3308-12a7-4fa8-93b1-14b414b79f5a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Rocket Parts + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 120 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 899dedd2-598a-4baa-aa9f-81952216526d + sliderMax: ! 0ba73682-6bae-4b81-ba12-1b46f58c06cf + _sliderKnob: ! a0bee32f-a528-40cc-8704-9dd39691c1a4 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.050000 + meshVisuals: ! + - ! 7a4a44a4-8a66-4320-a3cb-c5fc4a55bb4b + - ! ee4c641a-c79a-436e-a89e-1e8ffe9cd3bc + - ! b47a1db7-5e4a-4f06-9a2e-7251e54d0a66 + - ! a2dc5a63-c1df-41a5-90b2-e740f12bbf63 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! ae5f399d-f412-42b2-915e-5c7de7787711 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d39d54db-1af5-4c4c-bb64-507cff2a8752 + Components: + - ! 6e2ea6db-9160-4b38-8e13-085bdfb056d1 + - ! c12b6591-caa8-4433-b420-c3efc693593a +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0b1f59da-99c6-4369-8496-d54668056c4e + Components: + - ! ffc41b55-0d52-4a88-b1f5-63556851cb51 + - ! ab7d3ee8-38ad-45b1-aceb-d465c18049f5 +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 150163dd-7d0d-4bbe-a4dd-9ed2e0eabb11 + - ! 4089dc9c-5adb-4bf9-b957-8abc839b0d58 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0c16c050-86ed-4ecc-b1c0-08f7ba5fa8d2 + Components: + - ! 8394cdc8-b72c-44c6-9b2e-30b2c9ef6d1a + - ! e46651b3-78b0-4aee-a12c-995553ce0c50 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 4.600000, y: 2.000000, z: 2.200000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 1.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! d04392b1-1178-4d5d-8f86-2e55b24e2cd1 + - ! 069fbe97-6520-486c-996f-8c2558d0aa97 + - ! e73b1f1d-7c11-4099-9632-edabe94166a8 + - ! 7af8f4d0-cd1d-4d0e-b395-028e41c9b290 + Components: + - ! 3f78fad9-18dc-4951-9bc5-2e61aad419ef + - ! 3e004573-ea7d-407f-a8e8-b3fe94fd4f4d + - ! a9072322-9cbe-460e-a04b-91bd9fdd7e21 + - ! 8f396bfa-9149-4d15-ba96-dd5c7a1633e9 +- ! + PrefabRemaps: + [] + Name: CapsuleMeshCustomizer + Enabled: true + ScriptAsset: ! 34ec9e1d-4d86-425e-9b7a-b6f2c130e4be + ScriptInputsDefault: + radianStepCount: true + cylinderStepCount: true + endXStepCount: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + meshVisual: ! 3abc2130-bd88-4fb0-9f9b-2637a20f2c13 + capsuleLength: ! 8.000000 + radius: 1.200000 + radianStepCount: 16 + cylinderStepCount: 16 + endXStepCount: 32 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1353aaef-a78a-4f70-80ef-f2c9fe717ac5 + - ! 19e101b8-5c98-4d5f-bfd6-0e2fb86581e0 + - ! 51eb6c8b-6a73-40be-85ee-eaf700c954fb + - ! 56774434-9c3b-455d-931a-2b3f3bf7ddfc + - ! 749d5e61-5dec-4bb6-bb92-94dda1f3604a +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 61324e68-e226-4eb2-a96a-63a07ecc0e98 + - ! eaa2615e-3c3c-4ff7-b453-dd5ef940fc6a +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cc34a58c-8336-4b3f-a590-769d4309fa6a + - ! 130c2cde-83a4-4a70-8b03-eeaf75ef4d9e +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 2572bdd9-c2de-4adb-be7a-d53217cf7db4 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + meshHoverMaterial: ! 386f728b-6a31-4633-b176-f92cd5bc60ce + meshPinchedMaterial: ! 92c09c9d-bf66-4313-9fbd-9c191887a5d4 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! c32fdec6-4ed8-4c87-8521-950db919ede2 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5c84b816-a8dd-4475-8337-964ddf2aceea + - ! 4742a657-5125-4825-994f-e0bcfa100021 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 182db9f2-4d62-49ff-8cfe-55c29488a2e8 + Mesh: ! 45bdf724-f7f0-4a8b-b6c9-191da2777f09 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 899dedd2-598a-4baa-aa9f-81952216526d + - ! 0ba73682-6bae-4b81-ba12-1b46f58c06cf + Components: + - ! 36e41376-51bd-4477-ba07-b652c0aa82a4 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -2.750000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 07cce6c8-f5d7-400e-b3bb-70cfa0e5881c + - ! 4aa8ed58-dcab-4256-a793-20c208772ea7 + - ! a0bee32f-a528-40cc-8704-9dd39691c1a4 + - ! 9b74a8b5-6dd0-4448-a505-5148f6ecaf5c + Components: + - ! 00cec48f-5242-404e-a5fd-78f05c69d591 + - ! 83fdf92e-7285-4864-b7f7-b56573f0e2e8 + - ! a466be5b-8036-4d74-a1b3-a50a6492ed86 + - ! 3e6c30f9-5b68-4524-a6e7-a566e22f5fa1 +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! af14efee-8102-4865-83d2-d4fbc64ef07c + Components: + - ! 308b6179-4063-45e1-9381-521859148bd0 + - ! 5a0defe9-efc0-420d-b36b-b9f29375fb51 + - ! ed8e7a3b-6207-4015-9c5c-6a264dfd191a + - ! b0ec31f4-bb56-429d-9647-d6bb45861c8c + - ! 2935496b-ff1c-4806-9ab9-ea54eb8f259d +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! f62fbb0d-eab9-4ce3-ac4f-197c49d50ad0 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 09db06bf-3b9e-41dd-b6a0-a7da122ffade + Mesh: ! 41ed7fd3-6772-4318-9758-7be2e92a7d59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Show Platform + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b76315cc-03e3-415e-a637-41a465bcf947 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! e03dda15-5806-44af-97cb-f144db36e8f9 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 077b8c55-6fe3-42b4-a99e-46f92cb22835 + - ! 3e035bce-415d-45d0-bb92-d77e1bfe0950 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ee5a38f8-6b3c-425a-90e8-babde063e515 + Mesh: ! 3e3dc67e-f8de-4502-b790-51fa5c73c19b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 121.091568, y: -23.471666, z: -5.285858} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! dc6b7e84-4d7f-4754-b5ef-7a8e8995a9cc +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Path Option A + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 785ab6ec-0c8c-46e8-b96d-80269823118d + - ! 6cabe18a-f69d-4a3e-95c1-073d6070fbc9 + - ! 37ff6fd2-8e27-4f86-95a5-fca66569fa01 + - ! e6f55aef-bba6-401f-8442-4101f628acdf + - ! 4d50842c-3e9c-47c1-94e9-9117bc3bb7df + - ! b7a16c0f-84f2-4590-85b8-8bfa507e89d2 +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! fd61450e-fa46-40aa-a6c1-21c78d870ba2 + knobObject: ! e73b1f1d-7c11-4099-9632-edabe94166a8 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + ScriptAsset: ! 85cb5de9-5fbb-4fbd-9775-2ac32bd619fe + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocket: ! 20d2fbd5-6bf0-4241-9c0d-8258178f6789 + allRocketParts: ! + - ! 390ee0cb-1e60-4d19-8b40-1268800c64bc + - ! a9931968-3294-457d-b5f4-67213a87aec0 + - ! f1f20f41-b943-4d16-9ec2-8b3047cfe6fc + - ! f8c6c126-d1c9-46e6-965f-f185cb98ee55 + - ! 79343b52-0148-40f3-b5ee-59276ae43e7c + - ! 90f56253-e16e-40b6-9a7b-207dc3b162e7 + - ! 11174f6e-5467-4bf7-a4ec-be4b4e11d888 + - ! 255bac26-326b-4045-8f1e-04c78eabb8b4 + - ! 9bb44e42-24ca-4d39-87d2-41596d8f05a4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6582d0d3-dcc0-4a82-ab92-bda59d4ae4d3 + Components: + - ! ab13ce74-b5bf-4771-ae1e-22e99dd33e6a + - ! 3a082b68-8c10-478b-bdc1-012debddbfb9 +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 17.000000, z: -100.000000} + rotation: {x: -41.182346, y: -19.682274, z: 2.537930} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + - ! d6bcb589-b766-430d-aed9-b1cd72971db5 + Components: + - ! 04b7c790-5f7c-40a1-b286-b68c8346665d + - ! e060c4b9-46ff-4a98-9a66-4e01c9d363d3 + - ! c99b7b55-01f0-46b1-9335-3978e896fca0 + - ! 55620f11-ba29-4773-ae0d-040e31ce992f + - ! 33323e07-f29c-4fa9-9bc2-a55327ead908 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 400016ba-897b-4f06-8668-db883d28f9a9 + Mesh: ! e773364b-808e-4165-96b2-285eb99a10bb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Size: 0.660000 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 4d8e42f2-86df-4cf7-a61d-d8e6870abac5 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fe38f062-25cd-4668-9e51-42235170a549 + Components: + - ! 2d43b9d7-cdc4-4727-8b79-f643982ea695 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 26126d53-f439-4c11-a332-516f25d8cef9 + Components: + - ! f580b6f0-2a1a-48d8-9796-674a7b0ecd46 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 5d1d6397-ae85-4e5f-ab2c-6cce45791d26 + Mesh: ! d5389096-6ff6-4687-a39d-88838ca6ce61 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -18.000000, z: -100.000000} + rotation: {x: -118.520844, y: -7.233747, z: -22.973654} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! a7132f3e-b959-4445-8c33-d83de440a0c9 + Components: + - ! 80e2e116-8840-484d-be53-471cdb4a8275 + - ! a13e9ccd-85a2-499c-b743-a73945646374 + - ! 6b10defb-e495-4de9-8e7f-87ff83364433 + - ! 138717b7-e5a9-4398-bf7a-4411ba0af469 + - ! 5f54672e-81d5-4d1f-bfcd-349615a988b2 +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -40.000000, y: 0.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 15046028-d913-4fb0-8a5a-463b11599a95 + Components: + - ! 0c399b22-7b3e-40e0-8b5e-2905497a3229 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ContainerFrameUI + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 55.000000, y: -5.000000, z: -65.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 722655c4-7fce-41bf-b7e1-e46c8987282a + Components: + - ! d3a91d49-4352-4b77-8235-8d2d19bc7d82 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Platform + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 785ab6ec-0c8c-46e8-b96d-80269823118d + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 962fe96e-aa8d-4ea3-8a35-09c60ce3f4dc + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 7f6239f2-26e6-48db-8e49-57e348234bfa + - ! 88f531cc-523c-47b1-9231-7c166961c7a1 + - ! 8fd43d53-4707-4755-ae21-281babc4a8a5 + Components: + - ! 7893756e-c8a5-4329-8b06-67ff294f05ad + - ! f28b8cf7-a028-4cba-8eb2-7e6fc16ca5fc + - ! 7da90f4e-81a7-473d-899f-301ae7076b02 + - ! 6df7408e-475e-4290-b64a-6265f1d4f92e + - ! 68265c8d-084e-4f2d-9358-355e46cab9b5 + - ! 45df5018-4c58-44a4-a17a-af1b1cb86c97 + - ! 74d601a3-8d97-441a-af78-5ec2a963651e + - ! 31d5d1f8-ab79-49d8-a722-f663eda27502 + - ! 093fe896-cad0-4c59-9e5d-8c596a8b5f77 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 5.731080, z: -2.724091} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.500000, y: 0.500000, z: 0.500000} + hasSegmentScaleCompensation: false + Children: + - ! 6b8948bf-e1c5-4626-9164-fb0631b13322 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: false + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 008299c5-f728-4311-b3c6-21cbf5660edf + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[EXAMPLE] Rocket Workshop" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 452961b7-9236-48e9-b535-1e628e00b8bf + - ! 527ee95c-27ab-41a1-9b9f-3c15e512454c + - ! 6e56c65c-de07-4946-8e5f-49a71f90c0a0 + - ! 295cbbb9-33c7-487b-84e6-d554de447334 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 96bd6fd3-2b4f-4872-9cea-6570d04b737e + Components: + - ! 1edd2162-cecf-4e50-a261-9a28f7437ae3 + - ! be79e43e-3607-42f5-93e6-051525a200e0 + - ! 8b609d83-09a7-40a8-8b77-0ae7dcf1077a + - ! ec316b3b-a56b-477c-96e9-a0567890c9c5 + - ! 9568cfe8-b1ac-46f0-b30e-9b99a150b655 + - ! 3d9571e4-4397-4319-9187-0d1f83c516db + - ! 34a80196-25d7-4d71-a961-d47be0cefef3 + - ! 6d036508-bb0c-4eeb-921a-e1c468dc27b9 + - ! 1a3fd670-c1c7-4069-9b59-df845362a260 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! cb2f009e-3cf2-4187-bf1e-aafac6787521 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 147eda9e-e69e-4729-9347-923da3806a94 + - ! b5d8cd4e-83c2-40d0-9e87-5f19ef7c71d3 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b4b364af-ee41-4c86-a1ba-a055da762816 + Mesh: ! eb9c4a4a-8795-4ce9-9f28-3fa5870debeb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e41c5417-fdd3-419a-9ef4-41a88bf0660d +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! abf278a6-03d8-4b2b-910d-181a46b9fb60 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! fd38210a-8026-44e9-9cee-4d1b1e58ce02 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 31f296a4-9650-4bda-8d4a-2c5237911dac + - ! 81d98ccb-8c72-4fa2-81f7-20f82941c51d +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5d0a5812-4c6d-46e6-a03a-09b60ae5de48 + - ! ec8cd9e3-7dc8-4ecb-96d7-b06b67802261 +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + - ! 46e04b21-2fef-46ad-8f8d-a2385e2bb2b6 + Components: + - ! 008299c5-f728-4311-b3c6-21cbf5660edf + - ! 40d69b9f-db3c-4e61-90e6-1bea61a6f409 + - ! 3bfe7b5b-6278-469c-b93c-63a04f1d5b02 + - ! bf4529eb-f205-484f-8da8-77cf3ca78879 + - ! e2bc3d8a-f84e-4176-8b08-bbb6c90dd5d7 + - ! 9534ce89-22a4-46e9-8884-3d08d4c2c179 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! df969d23-af5a-4743-bd64-da3f32af946c + _offIcon: ! 26c35729-b4dd-45aa-a373-b7d47dc657e0 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Flight Path : A" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 558e82e4-7a36-4097-a16b-3b20d9d0f94b + - ! 42fa7251-c134-40b6-ae21-9e0cba42bcb4 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + allowScaling: true + autoScaleContent: true + isContentInteractable: true + allowTranslation: true + xAlways: true + yAlways: true + worldSnapping: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 16.000000, y: 32.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: true + autoScaleContent: true + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 8.000000, y: 8.000000} + maximumSize: ! {x: 200.000000, y: 200.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: true + itemSnapping: true + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 27665dcf-a50f-4925-b8cd-994e028b53ee + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Left + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! fb715abc-a6ec-48ee-96b3-1d300b6f2562 + - ! e3c97abf-6ee9-42b3-bc7e-1876cca70142 + - ! 5236bf74-2c01-4cfa-8ac3-71def1454ab5 + Components: + - ! b143eab2-4afd-4fd9-ae30-48e2f75b53e0 + - ! c3b90554-5964-4b67-accf-60fbb2d7b79f + - ! a0cf2921-1212-43f4-a56b-59e3efd1efc0 + - ! 3d616bb9-24c1-4adf-98db-b952a6c24a59 + - ! c7f768bc-3c72-4081-9c99-c40b0d7c90b6 + - ! dac6b2b7-1406-4985-8845-ad76d0070ec6 + - ! 07f1854c-abc2-491b-b8bc-a3501222feb3 + - ! 5d5387af-074a-4c33-8685-b78f1dd4946a + - ! a73f6dac-8037-468f-8acc-3b6bd9e770d5 +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 65.821396, y: 27.248711, z: 25.771273} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c8ebd78d-8835-4c00-8308-6da560d95db7 + - ! 774e1493-bd36-454c-b478-ec0cebda666a +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! ed7615db-bf66-4ceb-9b6d-94585dfba275 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 719c49c1-7076-4ea4-8d23-f7c1ad81e9e1 + - ! dda21d7e-d8c9-4a0c-9917-d73df68d6f29 +- ! + PrefabRemaps: + [] + Name: Flight Speed + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 0.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1ddd3d02-2a53-4389-87ed-3851ec1a22f1 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 57e56f6b-0632-4d36-829e-5265b4e158ec + Mesh: ! 9ab42643-fa56-4906-8dc6-c9cb4b53034f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.930451 + bottom: 0.520907 + right: 1.000000 + top: 0.672431 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Scroll View + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 100 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d7a4041c-a405-456a-abc8-fb551d8b3b00 + - ! c5214645-e492-4c75-9778-3acb61503472 +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Mesh" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 10.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7ccb99d7-f247-40cd-a69a-cebd151fb182 + - ! 15457eea-afed-4200-b815-e2aef7d0ae2d + - ! a4c763e7-2e1b-400b-bd95-8f3bb728f824 + - ! 62b8a451-7989-45b5-a6c7-ab02c30f30de + - ! 192195e0-0a93-443d-8f00-e0289ab40167 + - ! 98945bf4-a4c1-4e54-8dc0-3f743d184bbf +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 2e9e3044-964b-4715-bfd8-238f810af6ee + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 16323e0b-43a3-431f-b1f0-60029ae56ca5 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! e08f8232-5976-4c1c-8716-e28147a6ce64 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e561681f-2b18-4185-97c1-cc7eb1d9c312 + - ! f40445f0-9b9c-4ceb-a25e-3a52e31a2a60 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Controls + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 1 + renderMeshVisual: ! 6777d912-e79d-4f3d-8a23-f24d7acdd522 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 6b4d1ad8-50d3-4889-9613-534d1419b60b + meshToggledHoverMaterial: ! bfb514bb-32ed-4bf6-8838-1d4b52a8878e + meshToggledIdleMaterial: ! 51d47a79-fa9a-457f-a979-7b3c7756d6be + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 93ccce6d-acaf-463c-a766-245dfa12e12c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: SliderExample Mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 34a68439-22cf-4285-b2f3-249a4aea3de8 + - ! 46a75696-6bb4-47d5-bc0c-903f6a797471 + - ! ef252a02-e448-44b9-9e43-6cba7ea7c0f4 + - ! 4c032802-37e9-4902-aaf9-665af40ac96d + Components: + - ! 3e465dbc-1232-4f56-b1ca-07c71159540f + - ! 1e6e0c1a-8056-45a4-9f38-bfe26b3e43ba + - ! f0c19a19-fb2a-4151-a1a8-9fee620e28b2 + - ! ac621d0d-1025-411f-81cc-831e5e3dd00b +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7cf0f5b2-75b8-4fac-ad13-712007347647 + Components: + - ! 3e7c8539-ac4b-4c16-90f7-0ba5cfaf9039 + - ! 57a0a9bd-d681-49fa-80c2-d0495e522a5f + - ! 96965a44-9849-496b-b1be-38299b203558 + - ! 8be8a529-4d9e-4e24-b655-37d8b5bb7527 + - ! 1bc2d2b6-d80d-496a-b99c-ca9c78f7d72e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Rocket Holder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1f6fb280-f4da-4a40-8668-dab2d0ffece2 + Components: + - ! 3f4b2619-d506-476a-99d6-4261cb8173bc + - ! 4b15a9f7-2cc8-41c8-ba9e-c6c69e562721 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Manipulation Examples + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! abf278a6-03d8-4b2b-910d-181a46b9fb60 + - ! fd38210a-8026-44e9-9cee-4d1b1e58ce02 + - ! b487fcf3-002e-4822-9625-f02956fbb781 + Components: + [] +- ! + PrefabRemaps: + [] + Name: RocketLaunchControl + Enabled: true + ScriptAsset: ! c0c12ffb-ecd8-43f8-8d68-f490810b1be0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + slider: ! 83fdf92e-7285-4864-b7f7-b56573f0e2e8 + animationAButton: ! a77c1eb1-9593-4438-87b1-ae63ecf14f5d + animationBButton: ! 6c6cb8b7-3a98-4d0b-aacc-d52cbec6726a + animationCButton: ! 4448e178-da1e-466c-832d-cb35015a7100 + launchButton: ! 4eef3acd-6894-43d4-b6e6-bba4bc729457 + rocketConf: ! a97c37a8-109a-4866-9e37-56d6c8a9c1f8 + launchSparks: ! 6b8948bf-e1c5-4626-9164-fb0631b13322 + rocketAnimationPlayer: ! 4b15a9f7-2cc8-41c8-ba9e-c6c69e562721 + flightPathText: ! d2e60671-ae1e-419a-ac5e-3759a34df741 + launchPlatformToggleButton: ! 7b503393-b7d7-4fee-bebc-2e0a0a158c3e + launchPlatform: ! 10ef1717-a0b6-4e65-a7d9-44f91b6017cd + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: PinchButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! f529cf51-4d88-432a-b6e5-ad66743c842a + Components: + - ! ec0281d7-e1b5-4e83-8b50-235ecc55df4e + - ! b15a8977-a4d7-4f88-9377-4f12a2485f82 + - ! 2a648635-29d4-4da9-a0f3-487a1ed5149b + - ! 135c6c93-94ae-40eb-9436-9d5c7d4c1b76 + - ! d7dd6d05-6624-4493-851c-85aac0ab3ad0 + - ! 003e260b-935f-42ae-8dab-6f258ac7d789 + - ! d904c42b-301a-4dae-81f5-1c8d5d888d3f + - ! fc907ca1-b2f4-4ae3-b49c-9f8448ca0be8 + - ! 167de8eb-9f40-4d6f-8d89-3beba468e431 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! dfb8556d-a943-41b2-a69f-1a525c358172 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! afc5e3b1-eccd-4f59-a2f8-53a0a63bd646 + Components: + - ! 181b1c2b-67d6-43d2-8fbc-91f5fa73afd4 + - ! 2db42466-df60-43ff-b942-b0eedd705abe + - ! 95bad5d6-34df-4c97-aaf5-d087a1ff442c + - ! d8bdabcb-8617-4d4e-a10f-8cdd5d4e441e + - ! 200c5a89-e479-42ed-8295-8c590be8fe67 +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 046ad65b-f330-4692-9807-fbd95f8061f2 + knobObject: ! ef252a02-e448-44b9-9e43-6cba7ea7c0f4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Recents + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ffb9811f-92b4-4514-ac28-2aa421dc9dfe + - ! 5af59c8c-af51-4d43-86dc-b441125fe967 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cd286a5c-5e95-4cb0-8680-5a238eebc33a + - ! abccdf94-337b-49f8-abf3-6b04e29d0ff4 + - ! d07d1906-eaea-4b71-92d2-bea1f8736f92 + - ! 69b71a12-2618-41f9-b62f-91ddaabb2c47 + Components: + - ! 7c8ea070-1726-4ee0-9f1e-aae5c2570841 +- ! + PrefabRemaps: + [] + Name: ExtendableCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -17.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2fcf0bf7-bd26-4474-b860-5a6c02503cde + - ! a151c0ee-4b33-43aa-b9f4-25bf06a0adeb + - ! 5a790996-2d06-4b8d-9852-7165ac56527e + - ! c0e12f13-2832-412e-a65a-e58f29950dc6 + - ! 3abc2130-bd88-4fb0-9f9b-2637a20f2c13 + - ! 8de418d3-b497-4ee3-aef5-c35c7c478a08 + - ! d80f0595-4e1d-448e-afef-e21fcc80f521 + - ! 7eb53a6f-c678-4769-86c8-ffa9d6a29bc8 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cb2f009e-3cf2-4187-bf1e-aafac6787521 + - ! 8679a711-e9c7-462f-bc36-bd5b8153194a +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 0.000000, z: -100.000000} + rotation: {x: -65.090828, y: -16.609848, z: 40.221401} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! 5f9a3157-9983-428f-93e6-951c5b5c929f + Components: + - ! 89a48c4f-a109-4b28-ae6a-9f30cf6965a2 + - ! 70220405-5a89-42d6-97bf-e1cc16af5e4a + - ! cc753256-5251-4a2a-82fc-52cff4435a21 + - ! 87327542-7e05-4d3a-89e5-294fe706fce6 + - ! c96dd1f8-ec5d-493d-a625-9b2970317b56 +- ! + PrefabRemaps: + [] + Name: Headlock + Enabled: true + ScriptAsset: ! 37c21f9a-dd95-4665-ac5c-60c72e00954d + ScriptInputsDefault: + _distance: true + _xzEnabled: true + _xzEasing: true + _yEnabled: true + _yEasing: true + _translationBuffer: true + _lockedPitch: true + _pitchEasing: true + _pitchOffsetDegrees: true + _pitchBufferDegrees: true + _lockedYaw: true + _yawEasing: true + _yawOffsetDegrees: true + _yawBufferDegrees: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _distance: ! 50.000000 + _xzEnabled: true + _xzEasing: ! 1.000000 + _yEnabled: true + _yEasing: ! 1.000000 + _translationBuffer: ! 0.000000 + _lockedPitch: true + _pitchEasing: ! 1.000000 + _pitchOffsetDegrees: ! 0.000000 + _pitchBufferDegrees: ! 0.000000 + _lockedYaw: true + _yawEasing: ! 1.000000 + _yawOffsetDegrees: ! 0.000000 + _yawBufferDegrees: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: BillboardExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 56d3fd6e-f907-4278-b5a6-0018fe1b0c8c + - ! 106da489-c9ac-43c5-a0d6-fb0b298dafa5 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 702c7723-1685-4104-adfb-d00ae5caf8b0 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 36d23b92-f05c-4013-8bf2-28e6662dedae + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab.meta new file mode 100644 index 00000000..d0b8f4b9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Examples/SIK Examples.prefab.meta @@ -0,0 +1,11098 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! fd1bc086-aa02-4e60-a264-3d7710070b7f + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! fd1bc086-aa02-4e60-a264-3d7710070b7f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! 7b84dd37-b48b-4715-b5da-cfdd381e906f + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketLaunchControls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -35.000000, z: -30.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 98569155-7715-495c-9b96-2ba85403c63a + - ! 65dece1d-d9d4-4987-947a-8989ed8c7904 + - ! bf9ec558-adb7-4b56-9b86-f3af03dd7d3d + - ! cd03d3c5-a16f-46ed-8a51-1f377d8f3a92 + - ! 268d83d8-6f2e-443f-ba85-15477ea4c95c + - ! b18902a1-dd9b-495c-afb7-338b78e8472e + - ! fc7ee13d-1b3a-4dc5-90d9-74846b86725a + - ! 471244bb-2341-42cb-898b-c31df1cbbd6d + - ! ee12b99f-3f19-4974-ac22-a3b10edd222a + - ! e00e14e8-dc62-4125-8226-d9548ccd872f + Components: + - ! b899bb31-024b-4638-9c5a-54c2a71fb0d1 + - ! 54bd2b86-8e51-48fb-8099-7f0b702cb041 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + showFollowButton: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 31.000000, y: 40.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: false + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! e1c24e6d-6811-41de-a1d2-9c04e5cd21c1 + knobObject: ! 4ad86e01-dbe5-4c10-9a56-6ba3e17a1a58 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.050000 + meshVisuals: ! + - ! 0fba4b93-4ed1-4ad0-9e9a-7abd2ea2040e + - ! 3b7b90e8-b154-4678-aec6-b4644aad37a4 + - ! 43e187b9-6cfe-4f55-9c0d-da5aef53b9ab + - ! 4e312a81-ccf8-4ca9-8d22-3e4f8e3bc25e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 33bcfd9d-61f2-4979-8393-543036ba439c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Scroll View + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 100 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 284edbad-69b8-45dd-9357-c81c7294d80b + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 271b74cf-8459-4dd1-83a4-91af22fc6f5f + meshHoverMaterial: ! 74679e29-9817-463b-9427-ffff4cccb602 + meshPinchedMaterial: ! 43cbc95f-b089-4e59-a639-ca3950ebd1b5 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: BillboardExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 51304556-9d24-4779-9eeb-8c187004353f + - ! 44753bb4-5497-4535-9fca-619d2b472e58 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 65.821396, y: 27.248711, z: 25.771273} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fda33b4c-8b79-4283-b700-15eaf6ad21c0 + - ! f0d95b32-82b6-47a7-9172-0524d4afc53b +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch! + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text3D + Enabled: true + RenderOrder: 14 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! e6189357-b3eb-4ed5-8a07-593c3328fc24 + Text: HeadlockExample + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + ExtrusionDepth: 0.500000 + ExtrudeDirection: Both + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + ShadowMode: None +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f30b1cbf-55cb-4854-918a-d6f5b68ff302 + Mesh: ! 18828ccb-4865-4bf5-b7c5-fdec9ae7650e + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 5d3dce7b-0dc3-4ab8-a283-fa730d3ff3b2 + - ! 963efe2d-6a9c-4ac8-a191-5b09acdea953 + - ! 9d31774c-1b26-42a4-8819-3e7746b7436f + Components: + - ! 84c92320-773d-4a98-9185-ef096ebabe5d + - ! c832fc4c-5a59-4811-bd70-55548a2543cd + - ! c8905894-9b42-4b0d-9e44-6ecb3e33ea36 + - ! 8ac49ea1-ed38-47a0-89ed-23d1ce668176 + - ! 3f034f8e-14bc-4288-bf09-650dff1666d2 + - ! 987d94d8-c8b2-4b5f-a2dc-098e130c7443 + - ! 736c95ff-b5c8-48ce-998e-267301c3b5e9 + - ! e9388cb2-e5c9-4d72-a2f7-e721ad987ece + - ! c16fe00f-777c-4105-b43d-8f5417845f0a +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 448c56cf-332f-4b67-9f3e-30e8c9cf50c9 + Components: + - ! 7205d878-4bf3-4090-be15-cb6fd7616ba7 + - ! 2e2f85ff-86f2-44a6-9282-5a47a6c9e9d2 + - ! 1b159012-a3e8-4980-837b-f2afc877ec2f + - ! 19a1c053-73d8-48ba-b212-eb44ca4cac6b + - ! 34485431-89f8-4f98-a385-2eadf4893e18 +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 121.091568, y: -23.471666, z: -5.285858} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7fbf0963-2f6c-483f-b7eb-6442552159a3 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: SIK Examples + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c5cc7e41-6ff8-48d3-8ae5-298def82f8bd + - ! 22105929-9790-4715-b5b9-a1a3e171eb23 + - ! ace18319-5e08-4aa2-a0e7-c8b5ca7861ee + Components: + [] +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Box" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -6.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4b2f1f33-b501-48c0-a2aa-adb63c510232 + - ! 610c072b-c01f-4a77-92bf-12b81c5af335 + - ! 24477947-3247-4c63-b5dc-1a142c148393 + - ! b452849c-342a-48c8-ae4f-6f9f0af79f77 + - ! 2e05a4bf-082f-4c6b-88ca-3536ba47bf15 + - ! 60f55125-b0af-46db-8f79-00a6a8e98856 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + allowScaling: true + autoScaleContent: true + isContentInteractable: true + allowTranslation: true + xAlways: true + yAlways: true + worldSnapping: true + isFollowing: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 16.000000, y: 32.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: true + autoScaleContent: true + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 8.000000, y: 8.000000} + maximumSize: ! {x: 200.000000, y: 200.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: true + itemSnapping: true + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: false + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! 5bea567e-d091-4432-a0cd-f4e27f84743a + knobObject: ! 128e164f-ec19-4305-abf0-2467aee894d6 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! d2d00557-3420-44fe-be7f-ea7863ad591a + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 962fe96e-aa8d-4ea3-8a35-09c60ce3f4dc + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Sphere" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -22.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b3c63f17-7988-4a99-9e05-3395570423d4 + - ! 68c1b242-6b55-403e-a02a-648ec0c3dc2a + - ! 76093a5a-0062-4982-a83d-5a45e071aaa2 + - ! dccfc25b-d760-4889-b488-67a6b4823d04 + - ! 31243a47-1f88-4b17-8bea-2e5994c9f7e0 + - ! 7c8f3134-2a44-4041-aa46-2007e4990ade +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.930451 + bottom: 0.520907 + right: 1.000000 + top: 0.672431 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScrollBarFeedback + Enabled: true + ScriptAsset: ! 37bf0d33-fcd6-4d18-8150-19002357972e + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + scrollbarObject: ! 76cb4f35-031b-4a4a-a99a-a484672cd586 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e1c24e6d-6811-41de-a1d2-9c04e5cd21c1 + - ! af8a6f90-8e75-41fb-a485-d09e39baca84 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _onIcon: true + _offIcon: true + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 00000000-0000-0000-0000-000000000000 + _offIcon: ! 00000000-0000-0000-0000-000000000000 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: -90.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! aad54900-794a-41ae-adbc-4d8e74af4626 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Meteor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: -18.000000, z: -100.000000} + rotation: {x: -118.520844, y: -7.233747, z: -22.973654} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! 134763a3-7c99-4957-86c0-4903180533a8 + Components: + - ! 6ef0380d-8354-417d-8843-b4fdc495488a + - ! 815233cc-f9b3-4b65-bb71-5920232efcc7 + - ! 7327effc-f997-4cf9-969a-16305130820c + - ! 2851c00a-6ea4-44ba-a09d-2bb3c64b1fd1 + - ! a867dbaf-7978-4f52-861e-8d000a4cd232 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! b4d267b3-32be-411d-ab20-fe7c056f6b3e + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d7c52113-ff98-4df8-8095-c1e3beb17f02 + - ! 55e72539-f87e-4da6-ae9d-697e297631fc +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple Interaction" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3ef8fb01-59e9-422a-9ef6-1c49ba13bca5 + - ! 15647a3f-1dc9-4c29-b2b6-e6f9b0e55cde + - ! 1a219ac7-b0bc-4f1e-a9eb-d17ec7aab94f + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 15647a3f-1dc9-4c29-b2b6-e6f9b0e55cde + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Path Option C + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6e567238-4aff-45a4-9424-1dd73eb27d36 + - ! 5c9b03c9-7dd2-4cf4-b4b2-38558c664aeb + - ! 59fb95f6-9367-4ac9-8ad9-3aba1014b5b8 + - ! ef21dadf-ac3e-413f-a6f4-125d9092917a + - ! b399869b-ec00-43db-9eb5-69efbd75ab0e + - ! 71b68656-1364-4473-afae-1e63195e3feb +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5e3a9338-b250-4734-b249-d6488faa5387 + - ! b59fc08b-0919-4078-af95-859bf1324d2c +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f3aabf66-de47-466a-9242-e8e6df3aa5e7 + - ! b1c2cb8b-0da5-4508-89ba-e53376517b76 + Components: + - ! a1f69f30-ac04-4abc-90b2-407898a44115 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 27665dcf-a50f-4925-b8cd-994e028b53ee + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! 7fbf0963-2f6c-483f-b7eb-6442552159a3 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -5.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 80e5a349-1c64-4b7c-869d-612771709af1 + - ! 908039ca-7d66-4fad-8e47-a7c3e419324a + - ! 5ebdc306-6d8f-4dba-a275-295bbb3e5e74 + Components: + - ! 910ba6a0-7ad6-4873-b8bb-b063dfd20907 + - ! 25038d3c-8f24-46aa-916c-25fadac45637 + - ! 90d69fa4-0ff3-4ccb-b1eb-b2cb2ecd9c8a + - ! ac44a234-b2c7-40bc-b165-14d49f6c7bdd + - ! cb7dfd36-1fcb-47a9-b875-88d19a0449c0 + - ! f0c7eadc-7e5a-4349-bd41-fc87c22bab55 + - ! 5531fd70-cb54-49a1-858a-21d2fde36388 + - ! 71cdd623-c1c1-406b-8763-25063c7086da + - ! 4dc0d48c-440f-4f8e-94b8-86e7294f83d2 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! fcd13b59-7324-440e-a032-b9fd0b8b7c8e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! acb0e3c0-808b-4dc5-94e6-ef2eb014797d + - ! 8701d1b0-4ea7-42b7-bb76-38623bbd1d94 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! a61a9f44-749a-4bca-b2e0-acd3db5fd701 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 344dc46f-f5a7-499f-9f38-40743c27710e + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 16323e0b-43a3-431f-b1f0-60029ae56ca5 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 943996f2-d5c5-4546-8fc7-35ba7e25aafc + - ! 919a0c9f-3887-4f56-a354-6a97a4701ad8 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -0.320000 + right: 1.000000 + top: -0.320000 + Offset: + left: 0.000000 + bottom: -16.000000 + right: 0.000000 + top: 16.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! b452849c-342a-48c8-ae4f-6f9f0af79f77 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f19bb22d-47a7-4b02-9340-8295bca0de78 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: SliderExample Mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! f5286577-cc5d-42af-8aed-9f68c4479224 + - ! f63c5971-e0d6-4942-95b0-5b67162adffd + - ! 128e164f-ec19-4305-abf0-2467aee894d6 + - ! 2747806d-ff8b-4fce-ac20-c931c122dfb5 + Components: + - ! 1e32ed97-e3c3-4185-8e3d-e237cf490ee5 + - ! 33a50a0f-82b6-43a9-bcc6-b64611af165a + - ! 18f7410b-0c8f-4ac3-9d62-b44d0602835c + - ! 728d7444-a285-43c2-9e47-64208917cf90 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.025000 + meshVisuals: ! + - ! dccfc25b-d760-4889-b488-67a6b4823d04 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! f3aabf66-de47-466a-9242-e8e6df3aa5e7 + sliderMax: ! b1c2cb8b-0da5-4508-89ba-e53376517b76 + _sliderKnob: ! 128e164f-ec19-4305-abf0-2467aee894d6 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 72a0faae-ee70-43db-94a5-b6eefc73eebb + useGlowMesh: true + glowRenderMeshVisual: ! 29383fa0-4093-4e63-884b-0fb2052eae1a + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! d7ccef9e-ae51-4e26-9634-922fadb15639 + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: 0.075000 + meshVisuals: ! + - ! fda33b4c-8b79-4283-b700-15eaf6ad21c0 + - ! f0d95b32-82b6-47a7-9172-0524d4afc53b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 7893e248-8c53-4dff-a565-26b5f8ec60f2 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 1766b243-ecbd-49ab-99a0-0a126bf505c7 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! eadfad91-c278-4805-877a-e6881f77844b + - ! 4337a78c-8014-46be-ac98-67797c1edf10 + - ! cb7a9788-8b86-48d1-9c62-ad54d785c2e9 + - ! 9cabd166-02ec-49f7-b29c-5bf242f69758 + - ! 91eaf3f9-a9eb-4b59-be67-2dd6d2dd4d0a + Components: + - ! 6918f245-9d0b-4dd8-999b-b7e875199104 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7630d75e-c089-474f-917b-7571a900f1e2 + Mesh: ! dfb8556d-a943-41b2-a69f-1a525c358172 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -40.000000, y: 0.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3b729ec8-102c-40bb-8224-d1fb557393e8 + Components: + - ! f7898e65-e5a5-407c-878a-037830626f13 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 917c4645-20fc-4578-b743-0e62cec94cb3 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! f3197aee-abdb-4673-8278-929017e3caa1 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "[Manipulate Example] Mesh" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 10.000000, z: -70.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bd216985-981f-4df5-a5cb-94ffed60abfb + - ! b5a66652-d80a-4f04-8ec6-13f5f8fa3020 + - ! 954bd88a-8001-4d82-96e5-d818c6e4f7ba + - ! fcd13b59-7324-440e-a032-b9fd0b8b7c8e + - ! 29f85aa3-3335-4d0f-96e3-4dd59e80db24 + - ! df699017-3086-4026-b95e-c787215c811f +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 7b48f510-7cfb-4b62-b3ad-2db8eb879a10 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 5 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: Categories + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1abc710b-fc37-46ec-9a8c-f68fb6996f94 + - ! a85530b4-a696-4e00-8710-703d96fd4b5d +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! f373af33-29fc-4ac4-a507-514a4d13fd0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 5d1d6397-ae85-4e5f-ab2c-6cce45791d26 + Mesh: ! d5389096-6ff6-4687-a39d-88838ca6ce61 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Flight Speed + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Rocket + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -0.064316, z: -5.097826} + rotation: {x: 90.000008, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8ed6703a-e1c0-4513-8b18-d617dcfbec6a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Billboard + Enabled: true + ScriptAsset: ! b5593251-a0da-4491-8561-2e0dccd715bc + ScriptInputsDefault: + _xAxisEnabled: true + _yAxisEnabled: true + _zAxisEnabled: true + _axisBufferDegrees: true + _axisEasing: true + duration: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _xAxisEnabled: false + _yAxisEnabled: true + _zAxisEnabled: false + _axisBufferDegrees: ! {x: 0.000000, y: 0.000000, z: 0.000000} + _axisEasing: ! {x: 1.000000, y: 1.000000, z: 1.000000} + duration: 0.033000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 714e02cf-585a-4270-816e-5bbc2e08fe6a + Components: + - ! 72a0faae-ee70-43db-94a5-b6eefc73eebb +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Controls + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 70 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Show Platform + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9426cda8-901b-4467-9e13-d1096e2fdd21 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 33bcfd9d-61f2-4979-8393-543036ba439c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 90c081b2-59c0-435a-9af5-db45937168e4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6bdf8c65-b25c-441b-a35c-71646b78cb61 + Components: + - ! edd30ada-8a85-44ce-a4fd-ad51935de939 + - ! d09d6b08-4155-47fe-b6ca-96e9c8d20b04 + - ! 9dc22f59-7633-489f-b339-b84f19ba548c + - ! 569a0ae4-90ed-44d6-9de4-99fbba0223de + - ! 5a23cf7b-0d90-45cf-bbdf-912ddea4c5c9 +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 941e28cc-de87-4b59-b202-a39797d1271f + - ! 6dc88105-5ee5-475a-9557-5101c0c43b9f + Components: + - ! 4fabe891-3f97-4036-ade4-b073e5f4b174 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! abf0e718-466a-44e0-a7f0-664d4eb50d5c + - ! 68d20d9e-3506-4565-9361-612edb5246e0 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 216f7c8e-9e81-4522-8fba-2c2ec37b196d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 15edb898-3bb4-41a8-82f3-3c6b0a3dea3f + - ! b0f7d78d-3c97-4a8b-956e-d3d40a937aa4 +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 09db06bf-3b9e-41dd-b6a0-a7da122ffade + Mesh: ! 41ed7fd3-6772-4318-9758-7be2e92a7d59 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 14.000000, z: 1.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eb2b94ae-75b2-4852-a980-6093135093b0 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 13 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4d35bac2-e858-4d9c-afa4-6f02ae7d5065 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 95091fa6-0b55-4ba0-8794-738888ee725f + _offIcon: ! 71319c82-a204-4c51-9164-92c4938f210d + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Rocket Parts + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 120 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Planet + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 17.000000, z: -100.000000} + rotation: {x: -41.182346, y: -19.682274, z: 2.537930} + scale: {x: 5.000000, y: 5.000000, z: 5.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0c2fe073-11d3-4994-a5a4-28552c28b3b1 + Components: + - ! 80f510ce-c947-46e5-8df8-1037ba35dac1 + - ! 081cf0f7-d8d2-47ae-bf4b-f6d949476320 + - ! e4d20e1c-1bd5-446a-8a2f-ef748527ad5b + - ! 357055f3-eabd-40ef-840c-60151bb5b93d + - ! af5c7285-6452-4dd3-86f8-a8e7ca80fcb7 +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cd9f6a7c-995e-4787-ad13-9b0cb9054b6f + - ! 83aa7f02-08b3-4cf0-af5c-1da4746baf4e +- ! + PrefabRemaps: + [] + Name: Content + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 586740af-5848-4db3-934e-ac1b355c3954 + - ! 8d6f3798-2b45-4f78-8472-bdbb6a18498a + - ! 76cb4f35-031b-4a4a-a99a-a484672cd586 + - ! 75c714f6-fafc-499f-9823-44b94aa49dca + Components: + - ! a19f6ffc-b546-463d-8d56-00de2b49d9e1 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketLaunchControl + Enabled: true + ScriptAsset: ! c0c12ffb-ecd8-43f8-8d68-f490810b1be0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + slider: ! c5e4e2f6-6a4c-4c04-bfea-f04b7efc0e39 + animationAButton: ! bf9ec558-adb7-4b56-9b86-f3af03dd7d3d + animationBButton: ! cd03d3c5-a16f-46ed-8a51-1f377d8f3a92 + animationCButton: ! 268d83d8-6f2e-443f-ba85-15477ea4c95c + launchButton: ! e00e14e8-dc62-4125-8226-d9548ccd872f + rocketConf: ! ce2fde66-cadc-4d86-97a4-9c45b257d536 + launchSparks: ! 6015cc18-9414-4f3b-9aa4-4283771ed4d7 + rocketAnimationPlayer: ! 55406b2c-4d46-4d85-ba95-0c9e50a1493f + flightPathText: ! e5dd6f7d-966d-4ed8-bfeb-f37db6b48658 + launchPlatformToggleButton: ! 1bf0d431-ce81-4485-891a-20241a415173 + launchPlatform: ! b3172fd7-fb4c-4a27-b922-7deb73d24d68 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Headlock + Enabled: true + ScriptAsset: ! 37c21f9a-dd95-4665-ac5c-60c72e00954d + ScriptInputsDefault: + _distance: true + _xzEnabled: true + _xzEasing: true + _yEnabled: true + _yEasing: true + _translationBuffer: true + _lockedPitch: true + _pitchEasing: true + _pitchOffsetDegrees: true + _pitchBufferDegrees: true + _lockedYaw: true + _yawEasing: true + _yawOffsetDegrees: true + _yawBufferDegrees: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _distance: ! 50.000000 + _xzEnabled: true + _xzEasing: ! 1.000000 + _yEnabled: true + _yEasing: ! 1.000000 + _translationBuffer: ! 0.000000 + _lockedPitch: true + _pitchEasing: ! 1.000000 + _pitchOffsetDegrees: ! 0.000000 + _pitchBufferDegrees: ! 0.000000 + _lockedYaw: true + _yawEasing: ! 1.000000 + _yawOffsetDegrees: ! 0.000000 + _yawBufferDegrees: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 29ab70e8-85d8-4339-a569-1c3cba5b4f85 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Animation Player + Enabled: true + Autoplay: false + ClipRangeType: Frames + AnimationClips: + - ! + AnimationAsset: ! 8811a6ee-076e-4144-a4e2-0cdc9e2fe3c2 + Name: Base Layer Rocket 1 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 400.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! 7eba6aa9-4ba6-4792-9195-8471fd86103b + Name: Base Layer Rocket 2 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 420.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single + - ! + AnimationAsset: ! af080ccb-4a5a-400a-aa23-a9f0d85ad3e1 + Name: Base Layer Rocket 3 + Weight: 1.000000 + PlaybackSpeed: 1.000000 + Begin: 0.000000 + End: 360.000000 + Reversed: false + Disabled: false + BlendMode: Default + ScaleMode: Multiply + PlaybackMode: Single +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! fa309a02-3377-4258-82b7-39992499c9ef +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a00c1f61-5ac9-4de7-a50b-9d79f8752275 + - ! 51e6f8a7-8f2f-41d7-ba23-cec56ddae92a +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 2d1d201d-5916-4b8c-9734-61870a09a3b0 + useGlowMesh: true + glowRenderMeshVisual: ! f19bb22d-47a7-4b02-9340-8295bca0de78 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 72813d4c-5965-40fc-b436-27385ed100d2 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ee5a38f8-6b3c-425a-90e8-babde063e515 + Mesh: ! 3e3dc67e-f8de-4502-b790-51fa5c73c19b + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 7b48f510-7cfb-4b62-b3ad-2db8eb879a10 + - ! 4a853a86-5206-439c-8488-f968c7ff182d +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2b77e527-3ff0-46bc-8e03-aa0ccea0c75e + - ! 678e13aa-9d64-43d5-879e-570070b57cc3 +- ! + PrefabRemaps: + [] + Name: Rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5d00a934-7f01-4903-9d46-1c911be02391 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! f7d5c2ac-40e4-44a4-a513-d410ac0ec371 + _offIcon: ! 83813777-6075-43f1-82bd-dd9fa1bdb948 + _isToggledOn: true + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 13 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ab483a45-8677-4f11-8cd0-5c5d4a239a94 + Mesh: ! e7bb3308-12a7-4fa8-93b1-14b414b79f5a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Flight Path + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 7.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e5dd6f7d-966d-4ed8-bfeb-f37db6b48658 +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! a18286e9-69b4-476e-b31e-df7c4f96e8b2 + useGlowMesh: true + glowRenderMeshVisual: ! fa309a02-3377-4258-82b7-39992499c9ef + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + meshHoverMaterial: ! 033d682e-f69d-49e1-800b-29ad4331fe72 + meshPinchedMaterial: ! 66dc6856-da5a-49e3-a0d3-efbc987b4e4c + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ce2fde66-cadc-4d86-97a4-9c45b257d536 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 7 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: | + Toggle Off + + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 0.984314, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: true + Radius: 6.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! acb0e3c0-808b-4dc5-94e6-ef2eb014797d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 72813d4c-5965-40fc-b436-27385ed100d2 + - ! 7c5dcebb-0900-4243-a758-3da5579bcaef +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3068e301-a3cd-465f-9013-b5984590f9e0 + Components: + - ! 2d1d201d-5916-4b8c-9734-61870a09a3b0 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: SliderFeedback + Enabled: true + ScriptAsset: ! a2c5daa0-6760-44b1-a1ce-0ff015888b17 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + renderMeshVisual: ! cd9f6a7c-995e-4787-ad13-9b0cb9054b6f + knobObject: ! 8b0858fb-58dc-4815-8a17-d136339fd301 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9fec5151-3627-4955-a017-f5b60c13c936 + Components: + - ! d242dcea-d618-4533-aa8b-555cb4d91b76 + - ! c843ac64-eed4-4b12-9a66-59afe41554f5 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Radius: 1.300000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9ca6e110-f3e5-4bd9-8bdc-1c4761f1723a + - ! d61b0c61-1140-4617-8dc5-b7acabd3a548 +- ! + PrefabRemaps: + [] + Name: Round Button Glow + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 29383fa0-4093-4e63-884b-0fb2052eae1a +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! 6e567238-4aff-45a4-9424-1dd73eb27d36 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 8d858ff6-aa23-4863-b2df-a5af56b736da + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 42028df6-f4bf-4e31-8e15-8ee907ae2e84 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -5.000000 + bottom: -1.050000 + right: 5.000000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 1f00b8fd-a622-451a-9934-9901a8a16763 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! 11710e50-1a5c-470e-9548-5e93183560ed + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 216f7c8e-9e81-4522-8fba-2c2ec37b196d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2bf55a32-de54-4aaa-84a1-27e8b92e6fb9 + Components: + - ! 864f7adf-80ee-437e-bfe2-afcd38d0d7b2 + - ! 17809aac-2637-408f-b206-8f752cbdec7b +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: -6.500000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a1c729d4-081c-4efa-8ffb-5a942c982101 + - ! 1b0e2dd1-230d-47c7-a241-f8bb0631aa36 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 1a219ac7-b0bc-4f1e-a9eb-d17ec7aab94f + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 17.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + - ! 1ee897fc-a725-4210-b806-17bc2b44575f + Components: + - ! c16ed259-fa21-43a0-8b74-0e327d8ac125 + - ! 771291be-35a7-484d-92fa-13c0ed1826f9 + - ! 8b488e5b-6ee6-4eba-a7c2-a95d036c44cf + - ! 888fff1b-1424-450e-bba4-bde2441faaeb + - ! aec4c38f-121d-43e0-8c8a-f35eccf56aee + - ! ff072225-c032-4741-8447-f74cf2ac6568 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 182db9f2-4d62-49ff-8cfe-55c29488a2e8 + Mesh: ! 45bdf724-f7f0-4a8b-b6c9-191da2777f09 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Center + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! 6a3a050d-2b41-4258-b2a9-f1d6f4badefd + - ! f7d5c2ac-40e4-44a4-a513-d410ac0ec371 + - ! 83813777-6075-43f1-82bd-dd9fa1bdb948 + Components: + - ! c6716f04-8f6c-4655-a49b-dbde0a9e0a47 + - ! cec3c0b8-d104-4f1d-a034-f307673fabda + - ! 3f6dfbd0-cf57-48eb-80ef-ae49ecf44237 + - ! 61bd6ad4-2e9e-4a54-95ca-6a12e8df750b + - ! f9831512-5025-4582-a780-9a8e7a1dee81 + - ! 8abd0fe8-dc7d-457b-93c4-97be80c52cbe + - ! 3755b435-cbf0-44cb-ba7e-9e18ba2c2d27 + - ! 5bafc35a-792b-4965-a9c6-fe3e3dc76c45 + - ! 5ca9483c-fea1-49c6-8118-40390cf35d89 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + SourceRemaps: + - 003e260b-935f-42ae-8dab-6f258ac7d789: 082bd327-fd12-4e4b-951a-5daa2cd50a57 + - 008299c5-f728-4311-b3c6-21cbf5660edf: c16ed259-fa21-43a0-8b74-0e327d8ac125 + - 00cec48f-5242-404e-a5fd-78f05c69d591: 72abb230-9be4-415d-b507-59d1bcb25c1b + - 014e6143-34a3-4ea5-9f68-9048c596274a: 987d94d8-c8b2-4b5f-a2dc-098e130c7443 + - 046ad65b-f330-4692-9807-fbd95f8061f2: 5bea567e-d091-4432-a0cd-f4e27f84743a + - 04b7c790-5f7c-40a1-b286-b68c8346665d: 80f510ce-c947-46e5-8df8-1037ba35dac1 + - 04ff2d6a-03de-4b0a-bedc-a4b282d7efc5: ea663ae3-6aea-4488-939e-a2791f10e5ac + - 069fbe97-6520-486c-996f-8c2558d0aa97: 539b74ef-f7d2-4dd6-9805-e1b9dabb5555 + - 0724cc1a-aac8-4dc7-b552-c63aadfb2934: 7ef7df1c-9c06-4bb5-bf2a-61c117fe01dc + - 073b79f8-7222-4585-86f6-8acd58335931: a18286e9-69b4-476e-b31e-df7c4f96e8b2 + - 077b8c55-6fe3-42b4-a99e-46f92cb22835: 90c081b2-59c0-435a-9af5-db45937168e4 + - 07cce6c8-f5d7-400e-b3bb-70cfa0e5881c: f282803d-4936-45a6-aeb9-14b960645fc0 + - 07f1854c-abc2-491b-b8bc-a3501222feb3: fd64c6f0-f2e4-40ec-b4d2-52bfc6e7e3c2 + - 08ef5629-3d1d-4e26-8a1d-b0b7ae25f515: 80c25d73-8dcb-450a-b4ea-4876884a8f18 + - 093fe896-cad0-4c59-9e5d-8c596a8b5f77: 4dc0d48c-440f-4f8e-94b8-86e7294f83d2 + - 09db777e-2a46-487f-8d0e-89061d39cbce: c86d6989-0949-4715-8b3d-23f041ce77bc + - 09f0b7d0-42b3-4eaf-9c54-fef40b29a0dd: a1f69f30-ac04-4abc-90b2-407898a44115 + - 0a9143d8-a5e8-4bc5-90dd-98075fe95d19: f9831512-5025-4582-a780-9a8e7a1dee81 + - 0b1f59da-99c6-4369-8496-d54668056c4e: a8e1633c-034f-4321-ae13-3127dc221fc6 + - 0ba73682-6bae-4b81-ba12-1b46f58c06cf: 9d694d20-0970-4b25-a6c9-381e45313571 + - 0c16c050-86ed-4ecc-b1c0-08f7ba5fa8d2: 2bf55a32-de54-4aaa-84a1-27e8b92e6fb9 + - 0c399b22-7b3e-40e0-8b5e-2905497a3229: f7898e65-e5a5-407c-878a-037830626f13 + - 106da489-c9ac-43c5-a0d6-fb0b298dafa5: 44753bb4-5497-4535-9fca-619d2b472e58 + - 10ef1717-a0b6-4e65-a7d9-44f91b6017cd: b3172fd7-fb4c-4a27-b922-7deb73d24d68 + - 113ef412-c8f7-4b7e-a3ab-e59df2135943: 9fec5151-3627-4955-a017-f5b60c13c936 + - 1146c9ab-b553-4255-9954-52ffe8f621f5: 7c8f3134-2a44-4041-aa46-2007e4990ade + - 130c2cde-83a4-4a70-8b03-eeaf75ef4d9e: 678e13aa-9d64-43d5-879e-570070b57cc3 + - 1353aaef-a78a-4f70-80ef-f2c9fe717ac5: 2334f12f-471a-423d-a5e9-7171d9ea387e + - 135c6c93-94ae-40eb-9436-9d5c7d4c1b76: 9d87900d-f378-43eb-b430-8a6606d39af2 + - 138717b7-e5a9-4398-bf7a-4411ba0af469: 2851c00a-6ea4-44ba-a09d-2bb3c64b1fd1 + - 147eda9e-e69e-4729-9347-923da3806a94: d7c52113-ff98-4df8-8095-c1e3beb17f02 + - 150163dd-7d0d-4bbe-a4dd-9ed2e0eabb11: 8a5120d8-5a5d-4ffe-a0af-641af7954d6a + - 15046028-d913-4fb0-8a5a-463b11599a95: 3b729ec8-102c-40bb-8224-d1fb557393e8 + - 15457eea-afed-4200-b815-e2aef7d0ae2d: b5a66652-d80a-4f04-8ec6-13f5f8fa3020 + - 15c8ff47-7aaf-4ed8-8983-1539f0f073c4: 2e05a4bf-082f-4c6b-88ca-3536ba47bf15 + - 167de8eb-9f40-4d6f-8d89-3beba468e431: 498f4954-0bc1-4a9c-be4e-cb173b35131e + - 181b1c2b-67d6-43d2-8fbc-91f5fa73afd4: 7205d878-4bf3-4090-be15-cb6fd7616ba7 + - 1894539e-bf0c-4d34-bc92-d5eca75e7589: 61bd6ad4-2e9e-4a54-95ca-6a12e8df750b + - 18acdc7e-459f-4219-bcd5-8614cb2776ef: c25f198f-56c5-4453-95af-0b8c3df6651d + - 192195e0-0a93-443d-8f00-e0289ab40167: 29f85aa3-3335-4d0f-96e3-4dd59e80db24 + - 19e101b8-5c98-4d5f-bfd6-0e2fb86581e0: f0fe346e-fe60-4826-9001-2b474a8630a7 + - 1a3fd670-c1c7-4069-9b59-df845362a260: 69531856-b84e-40a0-8b63-9cdfb4979aca + - 1b490eb7-9528-4f6f-a0c1-50a388b944b3: 03de1672-8771-436d-ad08-860688095af9 + - 1b5518c4-e625-4eb2-ab98-ef3675396855: 4cc16ea5-a57f-4b78-aea8-b1d8a6575258 + - 1b94b845-f11f-4781-8362-c5cb1bef17fa: 83813777-6075-43f1-82bd-dd9fa1bdb948 + - 1bc2d2b6-d80d-496a-b99c-ca9c78f7d72e: 6654f2bd-3907-4d2d-9bad-9fe2bd6da379 + - 1da1ae14-3e7a-4cfa-b353-e425319a3572: 3f6dfbd0-cf57-48eb-80ef-ae49ecf44237 + - 1ddd3d02-2a53-4389-87ed-3851ec1a22f1: 4415928d-c047-4d8b-8474-a0cdf8bc1326 + - 1e6e0c1a-8056-45a4-9f38-bfe26b3e43ba: 33a50a0f-82b6-43a9-bcc6-b64611af165a + - 1edd2162-cecf-4e50-a261-9a28f7437ae3: de0ddca8-d98a-4b59-9382-fe4b7ba6af33 + - 1efadfe5-29ad-4190-a473-1ce818b39230: 9bf42b2b-6ad0-4f72-979e-462c4e6bf2a8 + - 1f6fb280-f4da-4a40-8668-dab2d0ffece2: e6b9e770-e836-451c-8cc9-f030aef2ba6e + - 1fcdc7cc-c2fa-4a12-95f4-caeffa79295e: 4337a78c-8014-46be-ac98-67797c1edf10 + - 200c5a89-e479-42ed-8295-8c590be8fe67: 34485431-89f8-4f98-a385-2eadf4893e18 + - 20d2fbd5-6bf0-4241-9c0d-8258178f6789: 44295d20-c33c-4c89-85e3-bd064d17a272 + - 2272c271-7b6c-48cc-ae08-d7d30dde682e: 31e3869e-2431-4395-8081-790a5f4dceb6 + - 22a58330-8626-4c4a-8423-4ef292fd378e: c4e490a8-e430-452e-ac26-b91b93059a8e + - 24a7cc7c-689a-411c-b7d5-1f41b94b856e: 6d4c5f96-7762-46ee-a133-04ec4558681a + - 2572bdd9-c2de-4adb-be7a-d53217cf7db4: aad54900-794a-41ae-adbc-4d8e74af4626 + - 26126d53-f439-4c11-a332-516f25d8cef9: 714e02cf-585a-4270-816e-5bbc2e08fe6a + - 26c35729-b4dd-45aa-a373-b7d47dc657e0: 9d31774c-1b26-42a4-8819-3e7746b7436f + - 2752b65d-df97-4c03-9eef-c5f00796c1c7: 42028df6-f4bf-4e31-8e15-8ee907ae2e84 + - 2935496b-ff1c-4806-9ab9-ea54eb8f259d: 5a23cf7b-0d90-45cf-bbdf-912ddea4c5c9 + - 295cbbb9-33c7-487b-84e6-d554de447334: 0264e12e-a524-40d4-a4a3-4fb93570a886 + - 2a0176da-4f12-41be-ae32-8ca018680f8b: b452849c-342a-48c8-ae4f-6f9f0af79f77 + - 2a386676-8605-4331-86a5-5368d51335e6: b0f7d78d-3c97-4a8b-956e-d3d40a937aa4 + - 2a40ff1f-4494-4db1-8e8b-1560f5ae0b45: 24477947-3247-4c63-b5dc-1a142c148393 + - 2a648635-29d4-4da9-a0f3-487a1ed5149b: 8ee64266-9084-4b9d-9e89-8c25c7f06196 + - 2af4ec65-1023-4f81-873e-950d998a65f2: 71b68656-1364-4473-afae-1e63195e3feb + - 2b3b3079-d010-4f80-b3de-b51fcb3d4f57: b899bb31-024b-4638-9c5a-54c2a71fb0d1 + - 2c79d8f8-6e19-4bc1-8c7e-eeb7b9172be5: 13aa01e6-7f7e-4e2f-a696-14e09d57cb48 + - 2d43b9d7-cdc4-4727-8b79-f643982ea695: 2d1d201d-5916-4b8c-9734-61870a09a3b0 + - 2db42466-df60-43ff-b942-b0eedd705abe: 2e2f85ff-86f2-44a6-9282-5a47a6c9e9d2 + - 2dc056c9-08ab-4593-a8d7-e2e7ad71861b: d59cddc5-b7d2-4f2f-8728-0df149f2fc3f + - 2e9e3044-964b-4715-bfd8-238f810af6ee: 344dc46f-f5a7-499f-9f38-40743c27710e + - 2fcf0bf7-bd26-4474-b860-5a6c02503cde: 4de9e5d2-cf1d-492f-8077-a8730c9c8ea7 + - 308b6179-4063-45e1-9381-521859148bd0: edd30ada-8a85-44ce-a4fd-ad51935de939 + - 30bf6d19-885c-42fe-8195-3e71e8c3918b: ad3378fd-b0a2-43b7-aa03-513f9630a512 + - 31d5d1f8-ab79-49d8-a722-f663eda27502: 71cdd623-c1c1-406b-8763-25063c7086da + - 31f296a4-9650-4bda-8d4a-2c5237911dac: a00c1f61-5ac9-4de7-a50b-9d79f8752275 + - 33323e07-f29c-4fa9-9bc2-a55327ead908: af5c7285-6452-4dd3-86f8-a8e7ca80fcb7 + - 3375b270-5d27-4f31-b4e9-9b12bc85c58f: 0ecb30c4-9050-4e95-83bd-866ec8aecc20 + - 34a68439-22cf-4285-b2f3-249a4aea3de8: f5286577-cc5d-42af-8aed-9f68c4479224 + - 34a80196-25d7-4d71-a961-d47be0cefef3: 1ece7c6f-3b6c-4169-8336-b887a8614937 + - 34db47f7-8795-4800-940f-3381c9bc70fe: f3197aee-abdb-4673-8278-929017e3caa1 + - 35ab393e-a4e7-4608-a60a-b9e0a5683dc9: b45458ed-16e0-4676-9a61-c95e97dbecbe + - 35b271f1-4ef6-431e-bd13-f995681ed278: 91eaf3f9-a9eb-4b59-be67-2dd6d2dd4d0a + - 36d23b92-f05c-4013-8bf2-28e6662dedae: 7893e248-8c53-4dff-a565-26b5f8ec60f2 + - 36e41376-51bd-4477-ba07-b652c0aa82a4: 49d9be37-e6ed-42f3-9364-6cc046b1b6f3 + - 37b4795a-0ce0-4e29-b3cc-79aa3cb81fbe: b84e5a5f-5aaa-4cb3-bef5-fcd29490a267 + - 37b759b8-1f4e-4f26-b5ee-57c90bc21a73: 33c17ba3-4fa4-4800-b90b-2e137397ed6c + - 37ff6fd2-8e27-4f86-95a5-fca66569fa01: 54c164b2-ed1b-4e3a-8768-e3bb9277b95f + - 3a082b68-8c10-478b-bdc1-012debddbfb9: eebe28b9-7f3b-47e3-9b42-e3152f3907b3 + - 3a75d733-5107-4a4a-a6de-0204e4089a00: ef21dadf-ac3e-413f-a6f4-125d9092917a + - 3abc2130-bd88-4fb0-9f9b-2637a20f2c13: f373af33-29fc-4ac4-a507-514a4d13fd0b + - 3bd20dac-a943-4d7e-a08d-6b529725b690: 05b51f1b-00cb-453d-ab7c-dd2dfb762c8f + - 3bfe7b5b-6278-469c-b93c-63a04f1d5b02: 8b488e5b-6ee6-4eba-a7c2-a95d036c44cf + - 3d616bb9-24c1-4adf-98db-b952a6c24a59: 517781cb-d022-45e1-8836-69a14ac377d0 + - 3d9571e4-4397-4319-9187-0d1f83c516db: c6902925-7e2d-4745-81ba-94cda9c4385a + - 3e004573-ea7d-407f-a8e8-b3fe94fd4f4d: c46721fe-f21f-4a7e-bf00-dead24747a8d + - 3e035bce-415d-45d0-bb92-d77e1bfe0950: d4268d97-7fa5-4bda-a070-0338b938738e + - 3e465dbc-1232-4f56-b1ca-07c71159540f: 1e32ed97-e3c3-4185-8e3d-e237cf490ee5 + - 3e6c30f9-5b68-4524-a6e7-a566e22f5fa1: 051cecd2-baa5-478d-b025-7ec93d56ceba + - 3e7c8539-ac4b-4c16-90f7-0ba5cfaf9039: a81d8b72-cf22-4367-8ee2-c30c24aa433e + - 3f4b2619-d506-476a-99d6-4261cb8173bc: 8f430177-8b9f-4b38-9b5a-324180ccc6bc + - 3f78fad9-18dc-4951-9bc5-2e61aad419ef: 42bc501a-ce13-4614-9e9f-5e63020ac686 + - 4089dc9c-5adb-4bf9-b957-8abc839b0d58: 8c527ba7-efd7-4bbc-9bb5-88aa3586ec6d + - 40d69b9f-db3c-4e61-90e6-1bea61a6f409: 771291be-35a7-484d-92fa-13c0ed1826f9 + - 40fe63a3-fad2-482f-afb7-5f08fbf540d9: 15edb898-3bb4-41a8-82f3-3c6b0a3dea3f + - 42fa7251-c134-40b6-ae21-9e0cba42bcb4: 7e322891-6563-46da-89ed-201eef2c40fc + - 4448e178-da1e-466c-832d-cb35015a7100: 268d83d8-6f2e-443f-ba85-15477ea4c95c + - 44cc41b9-1913-4614-aa74-d6adf8658156: b59fc08b-0919-4078-af95-859bf1324d2c + - 452961b7-9236-48e9-b535-1e628e00b8bf: b7ffae81-3872-40b1-8985-417e5b7ee93e + - 45df5018-4c58-44a4-a17a-af1b1cb86c97: f0c7eadc-7e5a-4349-bd41-fc87c22bab55 + - 46a75696-6bb4-47d5-bc0c-903f6a797471: f63c5971-e0d6-4942-95b0-5b67162adffd + - 46e04b21-2fef-46ad-8f8d-a2385e2bb2b6: 1ee897fc-a725-4210-b806-17bc2b44575f + - 4742a657-5125-4825-994f-e0bcfa100021: 8701d1b0-4ea7-42b7-bb76-38623bbd1d94 + - 47f40157-724c-4a3d-b60c-1553311e79b9: 566655f7-3dec-46f2-85d3-0dd859b02c5d + - 491ecefb-13cd-4356-a5d9-73f442a5e381: 3f034f8e-14bc-4288-bf09-650dff1666d2 + - 497f7188-a34d-4c52-9285-6ef486ad684b: 736c95ff-b5c8-48ce-998e-267301c3b5e9 + - 4982a4bd-8004-4ced-a93f-8c22fa227369: a7faad0d-e773-40af-8b1c-7c1f6db8641d + - 49d3c420-96cd-485d-9a64-bb7d2c52204f: ce3cbfd7-71d6-484d-8f35-3c75c58cf0ed + - 4aa8ed58-dcab-4256-a793-20c208772ea7: 1bba24ec-27b6-4fbc-a60d-6f067f323d12 + - 4b15a9f7-2cc8-41c8-ba9e-c6c69e562721: 55406b2c-4d46-4d85-ba95-0c9e50a1493f + - 4bb77992-0e3e-4b1c-8d3b-c245e47391ca: b1410ec4-1d45-43b9-8dc9-9027901a3bd5 + - 4c032802-37e9-4902-aaf9-665af40ac96d: 2747806d-ff8b-4fce-ac20-c931c122dfb5 + - 4d50842c-3e9c-47c1-94e9-9117bc3bb7df: 81be64bf-ac1e-419d-bcea-a163e6d1f47a + - 4d8e42f2-86df-4cf7-a61d-d8e6870abac5: 1a219ac7-b0bc-4f1e-a9eb-d17ec7aab94f + - 4d93040b-0877-4dc1-a0c2-a495016de83b: 84c92320-773d-4a98-9185-ef096ebabe5d + - 4eef3acd-6894-43d4-b6e6-bba4bc729457: e00e14e8-dc62-4125-8226-d9548ccd872f + - 4f1beab4-2c8a-4f63-a05f-357008991456: 4aa50c1c-12d3-4209-8c41-cb8e10a4e21a + - 4f9c951b-cdcd-4f27-a21a-c791f2f6855e: 65dece1d-d9d4-4987-947a-8989ed8c7904 + - 50ecda44-3290-4cec-9805-7b911c17c3a3: ee12b99f-3f19-4974-ac22-a3b10edd222a + - 51a93b09-9f90-4d9d-924c-ca920dd25aae: f58d51ba-2ebf-4b6d-8212-d489883774b5 + - 51eb6c8b-6a73-40be-85ee-eaf700c954fb: d46a7dbf-ea5e-4e5b-97b8-e3dd2e809ffa + - 5236bf74-2c01-4cfa-8ac3-71def1454ab5: 71319c82-a204-4c51-9164-92c4938f210d + - 527ee95c-27ab-41a1-9b9f-3c15e512454c: 66f7cd45-c536-41aa-8822-1805ee2e3b6a + - 53ef3073-ecda-40c9-a16c-83797dbdb78e: e9388cb2-e5c9-4d72-a2f7-e721ad987ece + - 55620f11-ba29-4773-ae0d-040e31ce992f: 357055f3-eabd-40ef-840c-60151bb5b93d + - 558e82e4-7a36-4097-a16b-3b20d9d0f94b: f3384425-666a-4766-a620-aa6672fcca3d + - 56774434-9c3b-455d-931a-2b3f3bf7ddfc: e2da4c90-15e7-4bda-8d89-83ebce005c20 + - 56885160-9bf6-4d66-9330-0a8001c1ffd5: 3ebadc52-4e51-426c-9207-d316088eed91 + - 56d3fd6e-f907-4278-b5a6-0018fe1b0c8c: 51304556-9d24-4779-9eeb-8c187004353f + - 5773cc04-5773-434e-9985-2dd4200f1a77: 8471a6fe-c53f-44a1-8594-e59723f7f791 + - 57a0a9bd-d681-49fa-80c2-d0495e522a5f: ead4c584-9e0f-41d6-8ab3-c0130e6442e7 + - 5857ba63-8e4c-4afa-9413-3ef6d3184e32: 6a3a050d-2b41-4258-b2a9-f1d6f4badefd + - 5a0defe9-efc0-420d-b36b-b9f29375fb51: d09d6b08-4155-47fe-b6ca-96e9c8d20b04 + - 5a790996-2d06-4b8d-9852-7165ac56527e: 436eccd9-9a65-4e60-9f53-8acb0a5d0c2d + - 5af59c8c-af51-4d43-86dc-b441125fe967: c3ab7030-1abb-429a-8dc2-921adf124b7c + - 5c84b816-a8dd-4475-8337-964ddf2aceea: acb0e3c0-808b-4dc5-94e6-ef2eb014797d + - 5d0a5812-4c6d-46e6-a03a-09b60ae5de48: c6f10311-98a6-43ed-9283-246fb934cdb2 + - 5d4a954b-d8cc-4290-917f-fc4284b79c3e: 1b0e2dd1-230d-47c7-a241-f8bb0631aa36 + - 5d5387af-074a-4c33-8685-b78f1dd4946a: 4d3b81c3-44c7-46b2-bdbb-b8315b216a54 + - 5f54672e-81d5-4d1f-bfcd-349615a988b2: a867dbaf-7978-4f52-861e-8d000a4cd232 + - 5f9a3157-9983-428f-93e6-951c5b5c929f: f8a74290-7650-4c6b-a850-3d5b21c462ae + - 61324e68-e226-4eb2-a96a-63a07ecc0e98: 11fc4951-34f8-4c41-842a-127c6450b3f9 + - 61451a97-d498-4319-850a-db26407772aa: cb7a9788-8b86-48d1-9c62-ad54d785c2e9 + - 62b8a451-7989-45b5-a6c7-ab02c30f30de: fcd13b59-7324-440e-a032-b9fd0b8b7c8e + - 6582d0d3-dcc0-4a82-ab92-bda59d4ae4d3: 27002369-11ae-4128-be4b-d556378cbc92 + - 675942d7-d7d1-48fc-abd8-5a6bff7f56cd: ace18319-5e08-4aa2-a0e7-c8b5ca7861ee + - 6777d912-e79d-4f3d-8a23-f24d7acdd522: 3f2631ee-7671-4e09-a3da-2d3ebbc3e058 + - 68265c8d-084e-4f2d-9358-355e46cab9b5: cb7dfd36-1fcb-47a9-b875-88d19a0449c0 + - 68719226-e7e0-4113-bdab-6aec4a1b4375: c16fe00f-777c-4105-b43d-8f5417845f0a + - 687dfae2-c079-4fd4-9143-8a8a419910b9: 861e427c-427d-415c-a5c9-62d0cbb72db1 + - 69b71a12-2618-41f9-b62f-91ddaabb2c47: 75c714f6-fafc-499f-9823-44b94aa49dca + - 6a863191-faea-4432-b7f4-41bc539cc8e7: 8d20fcb2-bd25-4e36-8620-574d46a2754e + - 6b10defb-e495-4de9-8e7f-87ff83364433: 7327effc-f997-4cf9-969a-16305130820c + - 6b154d00-05e6-4008-8c8d-ff3c38dc97c1: 0f99ec52-b378-4f53-ae5c-9f97316da863 + - 6b8948bf-e1c5-4626-9164-fb0631b13322: 6015cc18-9414-4f3b-9aa4-4283771ed4d7 + - 6bf51efb-c165-480c-834e-cd9e1573372e: c6716f04-8f6c-4655-a49b-dbde0a9e0a47 + - 6c6cb8b7-3a98-4d0b-aacc-d52cbec6726a: cd03d3c5-a16f-46ed-8a51-1f377d8f3a92 + - 6ca8c494-08e6-480c-a6c0-b3dce62bd692: 6dc88105-5ee5-475a-9557-5101c0c43b9f + - 6cabe18a-f69d-4a3e-95c1-073d6070fbc9: 19c9610a-3217-4c46-86f5-5acd5dbf81e7 + - 6d036508-bb0c-4eeb-921a-e1c468dc27b9: 0806d623-a4b2-42d2-a883-77272aa8a63e + - 6df7408e-475e-4290-b64a-6265f1d4f92e: ac44a234-b2c7-40bc-b165-14d49f6c7bdd + - 6e2ea6db-9160-4b38-8e13-085bdfb056d1: 136d5f7a-7787-45ad-988c-ef9b83909168 + - 6e56c65c-de07-4946-8e5f-49a71f90c0a0: ef1f36e6-0732-46cc-997e-c1da502ccb7a + - 6e910f1c-f33c-4497-8c7d-ce77b8f7b885: 15647a3f-1dc9-4c29-b2b6-e6f9b0e55cde + - 6f2f7e56-ab07-4f8b-935a-c0150d74e9f6: 941e28cc-de87-4b59-b202-a39797d1271f + - 70220405-5a89-42d6-97bf-e1cc16af5e4a: 5e074e7a-a118-40d4-8165-f25839e8708e + - 702c7723-1685-4104-adfb-d00ae5caf8b0: f19bb22d-47a7-4b02-9340-8295bca0de78 + - 70a5b7c3-549e-4a03-ba4a-127df073805d: d092b67b-f1a2-4b60-a4f4-3a2d1da16d8b + - 719c49c1-7076-4ea4-8d23-f7c1ad81e9e1: e80f3472-cd56-42fb-b0f8-71282549f1e4 + - 71ca0806-008a-45ac-9173-d186754e53bc: 5d3dce7b-0dc3-4ab8-a283-fa730d3ff3b2 + - 722655c4-7fce-41bf-b7e1-e46c8987282a: a0e7f2a8-9e75-4c79-a159-f2a6711c1a42 + - 734fd77c-cf92-4677-a635-faefb258d109: 22105929-9790-4715-b5b9-a1a3e171eb23 + - 7476680a-1828-4517-8b6d-a38bee74bd03: 996ebe32-603c-49b8-beb7-8a0f594c90fe + - 749d5e61-5dec-4bb6-bb92-94dda1f3604a: 89670454-180e-4079-8c25-8d55631d2147 + - 74d601a3-8d97-441a-af78-5ec2a963651e: 5531fd70-cb54-49a1-858a-21d2fde36388 + - 765da78a-e794-4604-a38a-33a1c38d7406: 11710e50-1a5c-470e-9548-5e93183560ed + - 76a4091e-15c1-4831-87d8-b69dbee3f873: 3c034048-9ae5-4710-b56c-d1ce02634454 + - 77141b36-1afa-4580-a4e7-77b46a7e7144: ec313b7c-c1ab-47d7-a982-67bb76e2591b + - 774e1493-bd36-454c-b478-ec0cebda666a: f0d95b32-82b6-47a7-9172-0524d4afc53b + - 785ab6ec-0c8c-46e8-b96d-80269823118d: d2d00557-3420-44fe-be7f-ea7863ad591a + - 7893756e-c8a5-4329-8b06-67ff294f05ad: 910ba6a0-7ad6-4873-b8bb-b063dfd20907 + - 7a4a44a4-8a66-4320-a3cb-c5fc4a55bb4b: 0fba4b93-4ed1-4ad0-9e9a-7abd2ea2040e + - 7a8db928-d205-4f3f-9d59-a7a13759da73: 943996f2-d5c5-4546-8fc7-35ba7e25aafc + - 7ad2c4a8-399e-455b-8a94-7810c8cbaa96: eb2b94ae-75b2-4852-a980-6093135093b0 + - 7af80f84-dca4-4828-a01e-1e2c83301467: c04b809b-503c-4926-a3b3-683d2c33fb45 + - 7af8f4d0-cd1d-4d0e-b395-028e41c9b290: 4b229650-8d72-429d-a0f7-a0b2fe029736 + - 7b3b0ace-4c9f-4d8d-a869-af9439d938e7: 0a36de73-a2c3-4095-92fe-1d3b342d1d31 + - 7b503393-b7d7-4fee-bebc-2e0a0a158c3e: 1bf0d431-ce81-4485-891a-20241a415173 + - 7c53858f-523a-451c-9ada-9112151d87df: c843ac64-eed4-4b12-9a66-59afe41554f5 + - 7c8ea070-1726-4ee0-9f1e-aae5c2570841: a19f6ffc-b546-463d-8d56-00de2b49d9e1 + - 7ccb99d7-f247-40cd-a69a-cebd151fb182: bd216985-981f-4df5-a5cb-94ffed60abfb + - 7ce79967-b6f4-41de-a181-7d05dadb9224: b3c63f17-7988-4a99-9e05-3395570423d4 + - 7cf0f5b2-75b8-4fac-ad13-712007347647: af270195-05b7-4a21-ba85-f65a4fe35f74 + - 7d07885e-d3be-41f0-b24d-2f61c10779fa: 4de074cf-ded5-4b4f-89f1-db2aeb676652 + - 7d0ec120-acb2-4b27-99cb-bda87b3f26a0: c832fc4c-5a59-4811-bd70-55548a2543cd + - 7da90f4e-81a7-473d-899f-301ae7076b02: 90d69fa4-0ff3-4ccb-b1eb-b2cb2ecd9c8a + - 7eb53a6f-c678-4769-86c8-ffa9d6a29bc8: efd9a13f-a9e9-4507-9a8a-1d89d7715a59 + - 7eb68798-e720-4b5b-bab0-13835772bcee: c1dca61c-21f6-4e16-b1bc-4490f744fea3 + - 7f6239f2-26e6-48db-8e49-57e348234bfa: 80e5a349-1c64-4b7c-869d-612771709af1 + - 802c2599-cd73-47a3-9a39-9fef13d5fff5: d242dcea-d618-4533-aa8b-555cb4d91b76 + - 805d8e27-4c57-4ffb-a156-c006b14f8ebc: 4f0f8a9d-6f94-4ca3-8292-d38c0730bed6 + - 80935988-d850-43b0-8489-fdfb937b76e4: fa309a02-3377-4258-82b7-39992499c9ef + - 80e2e116-8840-484d-be53-471cdb4a8275: 6ef0380d-8354-417d-8843-b4fdc495488a + - 8105b0c7-f201-4c2a-aedd-7e2b4d4b0af1: 483580f2-a3c8-422d-911a-24d701b6ae24 + - 8197be4b-6667-4511-90ec-3764aaf7097e: 3888fd1e-d32b-4f3a-a9fb-998276046fa2 + - 81ac99fe-bb9c-4203-88a5-149ff24f4d8f: 644f530d-4900-44c1-8b93-e99294b4898f + - 81d98ccb-8c72-4fa2-81f7-20f82941c51d: 51e6f8a7-8f2f-41d7-ba23-cec56ddae92a + - 8394cdc8-b72c-44c6-9b2e-30b2c9ef6d1a: 864f7adf-80ee-437e-bfe2-afcd38d0d7b2 + - 83fdf92e-7285-4864-b7f7-b56573f0e2e8: c5e4e2f6-6a4c-4c04-bfea-f04b7efc0e39 + - 85db361a-2725-4fdc-b752-1e0403bc821c: 4a853a86-5206-439c-8488-f968c7ff182d + - 866bd418-abd8-4061-a6ff-2f4e36e2cbf5: 20e01167-18d2-4a20-ad82-d4ee08b967ae + - 8679a711-e9c7-462f-bc36-bd5b8153194a: 0533d243-783d-4068-b980-41d6947eca25 + - 87327542-7e05-4d3a-89e5-294fe706fce6: 059224d1-1d25-4b3f-9584-af2f47f10333 + - 87ea7e7c-debc-47fd-9c33-4015328482c2: 5bafc35a-792b-4965-a9c6-fe3e3dc76c45 + - 8862e579-091b-498f-b65a-9ade1608fdb7: b1c2cb8b-0da5-4508-89ba-e53376517b76 + - 88acf2e5-9240-47f4-8a6f-82805925f710: f3aabf66-de47-466a-9242-e8e6df3aa5e7 + - 88f531cc-523c-47b1-9231-7c166961c7a1: 908039ca-7d66-4fad-8e47-a7c3e419324a + - 899dedd2-598a-4baa-aa9f-81952216526d: 747b6ca5-719b-4af0-b472-4199272cf36a + - 89a48c4f-a109-4b28-ae6a-9f30cf6965a2: e831a7e4-e6e7-468a-a7ca-53b016f7cc68 + - 8b609d83-09a7-40a8-8b77-0ae7dcf1077a: 4d0c6cce-e5c8-4fb6-9b7e-5eb5be377e3a + - 8be8a529-4d9e-4e24-b655-37d8b5bb7527: 9aa28ecf-a73a-464d-9884-7167ff68ab11 + - 8c43891d-652c-4699-90e9-d7d2c4dd0a29: b6aa604a-1021-4600-a6df-46af67fd2410 + - 8de418d3-b497-4ee3-aef5-c35c7c478a08: d3aeaf20-7d6e-4c9d-964d-ac4abd507d6c + - 8e63e8fd-3b3a-4713-8173-b4ef651ec203: 59fb95f6-9367-4ac9-8ad9-3aba1014b5b8 + - 8f1be4e1-ff3e-47a5-a761-b6ed0d466561: 0c17ce9d-0572-4d37-bf5f-8d9dc17506b4 + - 8f271eef-bc6f-44ca-8498-4d71eb993dc0: 9cabd166-02ec-49f7-b29c-5bf242f69758 + - 8f396bfa-9149-4d15-ba96-dd5c7a1633e9: 0795c0c7-f481-4613-85a5-8d0a06d6019f + - 8f5afc96-f8af-49e6-8c59-93f62d72c98c: f7d5c2ac-40e4-44a4-a513-d410ac0ec371 + - 8fd43d53-4707-4755-ae21-281babc4a8a5: 5ebdc306-6d8f-4dba-a275-295bbb3e5e74 + - 8fdab901-ff35-4223-8a72-2b6426756517: b8d81a23-6c80-4c26-bac9-d8118f3fecf9 + - 9129b095-809f-453f-ad22-f9ac86c7ab8c: abf0e718-466a-44e0-a7f0-664d4eb50d5c + - 9534ce89-22a4-46e9-8884-3d08d4c2c179: ff072225-c032-4741-8447-f74cf2ac6568 + - 9568cfe8-b1ac-46f0-b30e-9b99a150b655: 2006a4fb-5c60-4207-a9f4-30738e2d0957 + - 95bad5d6-34df-4c97-aaf5-d087a1ff442c: 1b159012-a3e8-4980-837b-f2afc877ec2f + - 96965a44-9849-496b-b1be-38299b203558: 1884f9bf-9555-48ae-9a02-3313f28faf2c + - 96a77374-8d65-4258-afa8-56fa7dd9a353: 681a51b5-d4f8-4b50-a8a4-dfbe63d87b4e + - 96bd6fd3-2b4f-4872-9cea-6570d04b737e: 2af707d3-6f15-4836-9fb9-22af49001ec3 + - 9852472b-586e-40df-be99-0ea695ce4dac: 36320a1d-a3bc-4369-89d6-94eb05b980a7 + - 98945bf4-a4c1-4e54-8dc0-3f743d184bbf: df699017-3086-4026-b95e-c787215c811f + - 98c2d544-25c1-43a6-a6f8-d396385399b1: 771f1da1-9afc-40b5-a5e6-fa9706436d06 + - 995378a9-0c60-444f-95ea-9a77adf164d6: 7b48f510-7cfb-4b62-b3ad-2db8eb879a10 + - 9b74a8b5-6dd0-4448-a505-5148f6ecaf5c: c0ae321c-1bce-4215-b082-0c564cc5bba0 + - 9bc07bdc-0bed-42c5-997f-7eaa4a937221: 35f0606e-5a31-4fe1-bf71-286790ec5161 + - 9cd18e63-f258-47f2-8eac-80b575acda0d: fc7ee13d-1b3a-4dc5-90d9-74846b86725a + - a0bee32f-a528-40cc-8704-9dd39691c1a4: 4ad86e01-dbe5-4c10-9a56-6ba3e17a1a58 + - a0cf2921-1212-43f4-a56b-59e3efd1efc0: 7251b086-04b8-46ca-80ac-d1f333954a93 + - a13e9ccd-85a2-499c-b743-a73945646374: 815233cc-f9b3-4b65-bb71-5920232efcc7 + - a151c0ee-4b33-43aa-b9f4-25bf06a0adeb: a0775d85-6e22-479f-a021-d36685c05fda + - a2dc5a63-c1df-41a5-90b2-e740f12bbf63: 4e312a81-ccf8-4ca9-8d22-3e4f8e3bc25e + - a2df5570-1a26-46c8-9692-745f51555629: 471244bb-2341-42cb-898b-c31df1cbbd6d + - a3a2626d-dc87-4c90-bb2f-4ef4cb8271c6: a5db8618-2b74-418a-953b-7777d3350c20 + - a466be5b-8036-4d74-a1b3-a50a6492ed86: 9afb0850-51a3-4658-b088-ffccf333bffb + - a4c763e7-2e1b-400b-bd95-8f3bb728f824: 954bd88a-8001-4d82-96e5-d818c6e4f7ba + - a4ee76b0-f83d-4264-8f35-6f65e6deef32: d6147361-2c77-4fe6-a50d-f93f102ff8cf + - a5eaad25-8b90-4fca-9706-422e02f5c643: 5d00a934-7f01-4903-9d46-1c911be02391 + - a61b2db4-6c4d-4e28-960b-3876a0d4054c: 68d20d9e-3506-4565-9361-612edb5246e0 + - a7132f3e-b959-4445-8c33-d83de440a0c9: 134763a3-7c99-4957-86c0-4903180533a8 + - a73f6dac-8037-468f-8acc-3b6bd9e770d5: a6aab087-1121-4f7f-af33-ccef89e1c9d0 + - a77c1eb1-9593-4438-87b1-ae63ecf14f5d: bf9ec558-adb7-4b56-9b86-f3af03dd7d3d + - a9072322-9cbe-460e-a04b-91bd9fdd7e21: 6da1558e-329b-4fc7-8274-08f491531cd8 + - a97c37a8-109a-4866-9e37-56d6c8a9c1f8: ce2fde66-cadc-4d86-97a4-9c45b257d536 + - aa4e29d0-66d3-49ee-b482-4a2a4c447d88: 7c5dcebb-0900-4243-a758-3da5579bcaef + - aa952deb-b054-4e99-aa60-600cf2678371: b399869b-ec00-43db-9eb5-69efbd75ab0e + - aafb526f-a2ed-4dc7-acd9-7245b143dbb4: ccf9a8ab-f33b-4c97-8de9-3c3081849b2a + - ab13ce74-b5bf-4771-ae1e-22e99dd33e6a: 2cb78c20-aa8b-4425-9694-f1f0fafea125 + - ab173257-917c-4083-96cf-db6a82c6ae1b: 4fabe891-3f97-4036-ade4-b073e5f4b174 + - ab7d3ee8-38ad-45b1-aceb-d465c18049f5: 2b0ff021-3975-49b2-ba2f-6d5f47c5495d + - abccdf94-337b-49f8-abf3-6b04e29d0ff4: 8d6f3798-2b45-4f78-8472-bdbb6a18498a + - abf278a6-03d8-4b2b-910d-181a46b9fb60: 534ffe64-3597-48e9-9351-7e4d144ca467 + - abfbbe54-80b3-4a90-a9a0-808dc3ff5e8d: 83aa7f02-08b3-4cf0-af5c-1da4746baf4e + - ac621d0d-1025-411f-81cc-831e5e3dd00b: 728d7444-a285-43c2-9e47-64208917cf90 + - ace5dc90-9121-482e-bc77-338e3f17c25f: a1c729d4-081c-4efa-8ffb-5a942c982101 + - ad378ea5-7cc1-4152-a022-3f3563680405: 76093a5a-0062-4982-a83d-5a45e071aaa2 + - ad481c2d-f6bf-4d74-9d13-17ca74924223: 6e567238-4aff-45a4-9424-1dd73eb27d36 + - ae4ba4ca-d378-448a-a6bc-a0633b4a3211: cec3c0b8-d104-4f1d-a034-f307673fabda + - ae5f399d-f412-42b2-915e-5c7de7787711: 72813d4c-5965-40fc-b436-27385ed100d2 + - af14efee-8102-4865-83d2-d4fbc64ef07c: 6bdf8c65-b25c-441b-a35c-71646b78cb61 + - af39b2ca-39f9-4be3-883f-3e60844b18d7: f8aa478d-c957-450b-a3e6-cca4ae97bc03 + - afc5e3b1-eccd-4f59-a2f8-53a0a63bd646: 448c56cf-332f-4b67-9f3e-30e8c9cf50c9 + - b0ec31f4-bb56-429d-9647-d6bb45861c8c: 569a0ae4-90ed-44d6-9de4-99fbba0223de + - b143eab2-4afd-4fd9-ae30-48e2f75b53e0: 6e332ad1-3338-441f-971e-a6541371eb3e + - b15a8977-a4d7-4f88-9377-4f12a2485f82: 1812807d-6e0c-480c-826c-33b2f6fbf438 + - b47a1db7-5e4a-4f06-9a2e-7251e54d0a66: 43e187b9-6cfe-4f55-9c0d-da5aef53b9ab + - b487fcf3-002e-4822-9625-f02956fbb781: 1f00b8fd-a622-451a-9934-9901a8a16763 + - b48985e2-11a7-40a4-b8df-1e8b4854aa1a: 3c40b17a-8ac9-4a05-b9f5-f0727533bac4 + - b5d8cd4e-83c2-40d0-9e87-5f19ef7c71d3: 55e72539-f87e-4da6-ae9d-697e297631fc + - b5fef323-29cd-48d3-a043-4dc937b28241: fe89ddbb-038e-46a7-aa3e-e2822b297dda + - b76315cc-03e3-415e-a637-41a465bcf947: 9426cda8-901b-4467-9e13-d1096e2fdd21 + - b7a16c0f-84f2-4590-85b8-8bfa507e89d2: 19ddc024-06cb-4a0a-80d1-f506ea51f9da + - bc68a313-97f1-497f-8510-ad525c2932be: 29ab70e8-85d8-4339-a569-1c3cba5b4f85 + - bcc84955-f911-4c35-ba6b-2c77998f9f4d: 68c1b242-6b55-403e-a02a-648ec0c3dc2a + - bd9c7a12-8208-473d-b8d7-540d137af7a6: 8ed6703a-e1c0-4513-8b18-d617dcfbec6a + - be79e43e-3607-42f5-93e6-051525a200e0: 85d866b5-0324-4e8a-bfa7-6cc2d33f1cc5 + - bf4529eb-f205-484f-8da8-77cf3ca78879: 888fff1b-1424-450e-bba4-bde2441faaeb + - c0a16006-a72e-46ea-b037-6f6055a8037e: 6accc573-dec9-4036-89a5-af3c632799c1 + - c0e12f13-2832-412e-a65a-e58f29950dc6: 53c01a08-fd29-4f5d-a2c6-30e0825d3871 + - c0f104b8-b66f-4cc2-9a40-911d8b08fc7c: c5cc7e41-6ff8-48d3-8ae5-298def82f8bd + - c12b6591-caa8-4433-b420-c3efc693593a: 18dff395-1747-4205-b671-d35923a7ed75 + - c32fdec6-4ed8-4c87-8521-950db919ede2: b4d267b3-32be-411d-ab20-fe7c056f6b3e + - c3469410-615c-48b7-b277-fdbb7fe01425: 011037e6-af4e-4fe9-a05b-4f5f01d5d04e + - c3b90554-5964-4b67-accf-60fbb2d7b79f: bc6e1c15-d8bb-4d4e-b694-aebd3a02d0e4 + - c5214645-e492-4c75-9778-3acb61503472: d990d335-d33e-422f-84a9-52709f165f0d + - c647f5e5-a48d-4552-99c7-630bcb3fc5af: faa82610-73ce-473b-9a0f-5795ddd53a38 + - c7b5e2c4-ed9e-4fc9-a0ac-ae5ab3522ca9: 610c072b-c01f-4a77-92bf-12b81c5af335 + - c7e7d299-e828-4a21-bdfc-cafd6c557c4b: 309e36bc-4a5b-438f-9ff8-e634a660edda + - c7f768bc-3c72-4081-9c99-c40b0d7c90b6: 745b27ac-cbdc-40ce-8d53-31b4d70e21a4 + - c8325863-b981-4ca5-a5b4-bc6192e4bf5c: 21e4d352-9d86-4acd-aa59-4612dab8ac62 + - c8ebd78d-8835-4c00-8308-6da560d95db7: fda33b4c-8b79-4283-b700-15eaf6ad21c0 + - c903e1ce-abf1-4253-84ca-85d5e3999a67: 98569155-7715-495c-9b96-2ba85403c63a + - c96dd1f8-ec5d-493d-a625-9b2970317b56: ee399757-1172-4e81-baef-174c1a56037f + - c99b7b55-01f0-46b1-9335-3978e896fca0: e4d20e1c-1bd5-446a-8a2f-ef748527ad5b + - ca21cb84-c838-436d-9705-24c3cbd196e1: bb9d933d-0e5a-4482-8c35-255f3b127a8c + - cb2f009e-3cf2-4187-bf1e-aafac6787521: 216f7c8e-9e81-4522-8fba-2c2ec37b196d + - cc34a58c-8336-4b3f-a590-769d4309fa6a: 2b77e527-3ff0-46bc-8e03-aa0ccea0c75e + - cc753256-5251-4a2a-82fc-52cff4435a21: 2af8cc7b-46cb-4703-8269-3d0af9276706 + - ccc7cd7b-286e-43c8-8e4d-7b14c01d4978: 736aeaf7-9a6b-4f7f-b7cb-624e8e01fe7e + - cd286a5c-5e95-4cb0-8680-5a238eebc33a: 586740af-5848-4db3-934e-ac1b355c3954 + - cd4cac9b-7761-4921-b9cc-f78b074bab79: 6918f245-9d0b-4dd8-999b-b7e875199104 + - ceb35dbc-0c60-4f87-81a9-31f047f53fb7: 919a0c9f-3887-4f56-a354-6a97a4701ad8 + - cf20aefe-5abc-4ebb-8336-b7e1e0c9a094: 8abd0fe8-dc7d-457b-93c4-97be80c52cbe + - d04392b1-1178-4d5d-8f86-2e55b24e2cd1: fbeb6fd9-56a7-4282-b049-eac1ad3903f4 + - d07d1906-eaea-4b71-92d2-bea1f8736f92: 76cb4f35-031b-4a4a-a99a-a484672cd586 + - d1d15b9a-f9f8-45f7-b124-de8885fbcb5d: e1c24e6d-6811-41de-a1d2-9c04e5cd21c1 + - d2ceb182-c8a1-43bc-9aea-ff239f340c22: 8ac49ea1-ed38-47a0-89ed-23d1ce668176 + - d2e60671-ae1e-419a-ac5e-3759a34df741: e5dd6f7d-966d-4ed8-bfeb-f37db6b48658 + - d39d54db-1af5-4c4c-bb64-507cff2a8752: becb62ab-34d3-48f4-9964-ec4fa235c378 + - d3a91d49-4352-4b77-8235-8d2d19bc7d82: 18911d85-b9bb-4de4-bdde-3459199d23ff + - d5ef0869-3c0f-4768-88e8-8eebbc747a17: 284edbad-69b8-45dd-9357-c81c7294d80b + - d6404b8a-628b-42e8-86d6-74a1d1136133: a04a5387-e7e1-4fa0-b1c7-0a9b381d84da + - d6bcb589-b766-430d-aed9-b1cd72971db5: 0c2fe073-11d3-4994-a5a4-28552c28b3b1 + - d7a4041c-a405-456a-abc8-fb551d8b3b00: f241e3c7-7003-41fd-9caf-19939e5ecd32 + - d7dd6d05-6624-4493-851c-85aac0ab3ad0: 3d3e693d-a336-4403-a316-ea8413d547bf + - d80f0595-4e1d-448e-afef-e21fcc80f521: c7aaa05c-fd71-4bcb-93e1-24177777bfba + - d8bdabcb-8617-4d4e-a10f-8cdd5d4e441e: 19a1c053-73d8-48ba-b212-eb44ca4cac6b + - d904c42b-301a-4dae-81f5-1c8d5d888d3f: 5096396e-dd06-4a79-b5aa-86b53013e700 + - d918b75d-d600-45fb-8d41-0c40a86951f9: 02c06197-d5b5-4b25-b3fa-188becf59fc0 + - da181ff2-8374-4cc6-96f4-a40ed3d7e14c: 3f7da662-08cf-48df-adf1-e9378c0b479e + - dac6b2b7-1406-4985-8845-ad76d0070ec6: eca01df9-89fb-49ed-994b-4c7d947d678c + - dae05fcb-ff13-4f9c-9e8c-92679490f805: eadfad91-c278-4805-877a-e6881f77844b + - db4b404e-9f10-4f88-b107-2e38bd2b1afc: b18902a1-dd9b-495c-afb7-338b78e8472e + - dba0a409-027d-4f2d-b4eb-cf1c204c780d: c8905894-9b42-4b0d-9e44-6ecb3e33ea36 + - dc6b7e84-4d7f-4754-b5ef-7a8e8995a9cc: 7fbf0963-2f6c-483f-b7eb-6442552159a3 + - dd029e31-8ad4-48dc-a2bc-5fa83ab2622f: 1abc710b-fc37-46ec-9a8c-f68fb6996f94 + - dda21d7e-d8c9-4a0c-9917-d73df68d6f29: 08d0670c-5afe-4fc8-a397-e96cdf6513e4 + - df969d23-af5a-4743-bd64-da3f32af946c: 963efe2d-6a9c-4ac8-a191-5b09acdea953 + - e03dda15-5806-44af-97cb-f144db36e8f9: 3ef8fb01-59e9-422a-9ef6-1c49ba13bca5 + - e060c4b9-46ff-4a98-9a66-4e01c9d363d3: 081cf0f7-d8d2-47ae-bf4b-f6d949476320 + - e08f8232-5976-4c1c-8716-e28147a6ce64: dccfc25b-d760-4889-b488-67a6b4823d04 + - e0de0477-b7d3-4d25-a608-c298b58b3860: 2b7bc28a-9194-404c-88f4-8ae21ff42c68 + - e1f8bc07-848c-411f-8468-e593250bd389: 31243a47-1f88-4b17-8bea-2e5994c9f7e0 + - e2bc3d8a-f84e-4176-8b08-bbb6c90dd5d7: aec4c38f-121d-43e0-8c8a-f35eccf56aee + - e33700d5-863c-4eb6-b422-2b6c26477e2c: 1ef0328d-be86-4265-b300-90052e4e6590 + - e3c97abf-6ee9-42b3-bc7e-1876cca70142: 95091fa6-0b55-4ba0-8794-738888ee725f + - e41c5417-fdd3-419a-9ef4-41a88bf0660d: 46373f08-546f-4e4c-ac2c-fe9882e45fc2 + - e46651b3-78b0-4aee-a12c-995553ce0c50: 17809aac-2637-408f-b206-8f752cbdec7b + - e561681f-2b18-4185-97c1-cc7eb1d9c312: 9dde13a7-01eb-4ce0-928c-f1a875e4bf5a + - e63bf552-2edd-44f6-817b-8467a4db70e1: 5ca9483c-fea1-49c6-8118-40390cf35d89 + - e6e4c36b-32c2-4083-b6b2-0defb0f50b4d: 88cab6a3-2bd9-4c63-81b0-834619c56f23 + - e6f55aef-bba6-401f-8442-4101f628acdf: 14364c01-f87d-4805-9527-10d94524f9c2 + - e6fe490c-8c1d-4b7b-a558-bf9a71e1e536: 30b1c907-3e03-44e8-a8f2-9ddb4c0825cd + - e73b1f1d-7c11-4099-9632-edabe94166a8: 8b0858fb-58dc-4815-8a17-d136339fd301 + - e7a1b64d-9ae1-430a-a584-51a434e45381: 5e3a9338-b250-4734-b249-d6488faa5387 + - e7b1b809-065c-4da1-8d3a-4c59dc598329: 875dcadd-e5f3-4192-a86d-5b08f1d30e48 + - e9bbe9da-6b36-4e99-a4cd-1fe2d28d823d: 1018440c-8f94-44fb-936d-d3befedcd3fc + - eaa2615e-3c3c-4ff7-b453-dd5ef940fc6a: 46d205c4-d6ea-40bf-a73d-98260489d19b + - eaf4b260-3a9d-465a-8b21-86d130203721: 5c9b03c9-7dd2-4cf4-b4b2-38558c664aeb + - ebbecedd-4b69-462f-8155-8784cc752bb0: 4b2f1f33-b501-48c0-a2aa-adb63c510232 + - ebcabaf7-993b-47f4-9ff6-1b867297f822: d61b0c61-1140-4617-8dc5-b7acabd3a548 + - ebe15137-3734-487c-a0d7-b498f241e8c1: 879b5b7d-647c-41b4-93b7-19c796172a1b + - ebeaae85-cb2b-41e4-a902-44286f2258be: 54bd2b86-8e51-48fb-8099-7f0b702cb041 + - ec0281d7-e1b5-4e83-8b50-235ecc55df4e: 4f57e8db-4cfc-4e98-a5fd-904008473f41 + - ec316b3b-a56b-477c-96e9-a0567890c9c5: ccd6dd60-282f-4a16-b730-14a1d19ceba5 + - ec8cd9e3-7dc8-4ecb-96d7-b06b67802261: a257dcec-8901-4c41-ba70-2c6456e0d5b3 + - ed7615db-bf66-4ceb-9b6d-94585dfba275: 917c4645-20fc-4578-b743-0e62cec94cb3 + - ed8e7a3b-6207-4015-9c5c-6a264dfd191a: 9dc22f59-7633-489f-b339-b84f19ba548c + - ee4c641a-c79a-436e-a89e-1e8ffe9cd3bc: 3b7b90e8-b154-4678-aec6-b4644aad37a4 + - ef252a02-e448-44b9-9e43-6cba7ea7c0f4: 128e164f-ec19-4305-abf0-2467aee894d6 + - f0c19a19-fb2a-4151-a1a8-9fee620e28b2: 18f7410b-0c8f-4ac3-9d62-b44d0602835c + - f14127e0-d9ae-44ec-8230-3851a3639162: af8a6f90-8e75-41fb-a485-d09e39baca84 + - f1eaf93c-70f9-43fe-8fe2-a41582142f06: 4f6827f2-0cd4-4f99-970e-120729043b27 + - f24b3095-782f-4fbe-a900-138727112c90: 9ca6e110-f3e5-4bd9-8bdc-1c4761f1723a + - f28b8cf7-a028-4cba-8eb2-7e6fc16ca5fc: 25038d3c-8f24-46aa-916c-25fadac45637 + - f40445f0-9b9c-4ceb-a25e-3a52e31a2a60: 30712b8f-f5e8-4493-97b7-8b71c1f2e536 + - f4669faa-525a-4926-bfdf-e7b1b07813b7: a85530b4-a696-4e00-8710-703d96fd4b5d + - f529cf51-4d88-432a-b6e5-ad66743c842a: cb8e61aa-b273-48b1-924e-f2ea5fb08e36 + - f57a3e91-93ed-467a-a0c0-deecbed6cd45: 29383fa0-4093-4e63-884b-0fb2052eae1a + - f580b6f0-2a1a-48d8-9796-674a7b0ecd46: 72a0faae-ee70-43db-94a5-b6eefc73eebb + - f5ea9cd5-c350-473d-b0cc-9117263fd777: 53a3c49a-b2de-45ea-8ede-2a7f31878d28 + - f62fbb0d-eab9-4ce3-ac4f-197c49d50ad0: e9b0749e-9b04-4198-8f4e-f00e42927004 + - f740487d-923c-4156-bad2-f1deb9c49131: 60f55125-b0af-46db-8f79-00a6a8e98856 + - f7d350e1-f928-42ff-9a3c-3460594bfa00: dcaa8333-4e76-4bc9-805c-e8a64522e5af + - fb715abc-a6ec-48ee-96b3-1d300b6f2562: d45857ad-173c-411c-a691-dfa6d051e7a1 + - fc907ca1-b2f4-4ae3-b49c-9f8448ca0be8: 3a2fcdc8-7d8e-4198-a126-3606012bc6fa + - fd1bc086-aa02-4e60-a264-3d7710070b7f: 8d2f9ecf-7c62-4fe9-8b6a-4d6d9d732089 + - fd38210a-8026-44e9-9cee-4d1b1e58ce02: a61a9f44-749a-4bca-b2e0-acd3db5fd701 + - fd5b3964-1eab-4124-91f5-e57195abbe20: 54d1b1dc-7425-4f4f-b9f1-3eda5b99981b + - fd61450e-fa46-40aa-a6c1-21c78d870ba2: cd9f6a7c-995e-4787-ad13-9b0cb9054b6f + - fd8de8fc-3999-4e0a-b9a9-745c28d186c2: 0b119fb8-2437-442a-af59-1f0f93e788ac + - fe38f062-25cd-4668-9e51-42235170a549: 3068e301-a3cd-465f-9013-b5984590f9e0 + - ff19197c-9428-4f08-9a91-3b0aa6da372a: 3755b435-cbf0-44cb-ba7e-9e18ba2c2d27 + - ffb9811f-92b4-4514-ac28-2aa421dc9dfe: 33bcfd9d-61f2-4979-8393-543036ba439c + - ffc41b55-0d52-4a88-b1f5-63556851cb51: fd07b3c9-6479-4e2d-981d-fc304c8cf9f6 + SourceState: ! 8d2f9ecf-7c62-4fe9-8b6a-4d6d9d732089 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 57e56f6b-0632-4d36-829e-5265b4e158ec + Mesh: ! 9ab42643-fa56-4906-8dc6-c9cb4b53034f + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 90c081b2-59c0-435a-9af5-db45937168e4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 42028df6-f4bf-4e31-8e15-8ee907ae2e84 + - ! 736aeaf7-9a6b-4f7f-b7cb-624e8e01fe7e +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + Axis: Z + Length: 1.900000 + Radius: 2.100000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 6accc573-dec9-4036-89a5-af3c632799c1 + - ! dcaa8333-4e76-4bc9-805c-e8a64522e5af +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 7.500000, y: 2.100000, z: 2.100000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -8.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 16.000000, y: 16.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3888fd1e-d32b-4f3a-a9fb-998276046fa2 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Rocket Holder + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e6b9e770-e836-451c-8cc9-f030aef2ba6e + Components: + - ! 8f430177-8b9f-4b38-9b5a-324180ccc6bc + - ! 55406b2c-4d46-4d85-ba95-0c9e50a1493f +- ! + PrefabRemaps: + [] + Name: Manipulation Examples + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 534ffe64-3597-48e9-9351-7e4d144ca467 + - ! a61a9f44-749a-4bca-b2e0-acd3db5fd701 + - ! 1f00b8fd-a622-451a-9934-9901a8a16763 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: false + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! c16ed259-fa21-43a0-8b74-0e327d8ac125 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 1 + renderMeshVisual: ! 3f2631ee-7671-4e09-a3da-2d3ebbc3e058 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + meshHoverMaterial: ! f815b3fd-9acd-4427-8c85-ce9765c1b471 + meshPinchedMaterial: ! d6ef8e2e-f4d2-44d4-88f3-3697486802d2 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 6b4d1ad8-50d3-4889-9613-534d1419b60b + meshToggledHoverMaterial: ! bfb514bb-32ed-4bf6-8838-1d4b52a8878e + meshToggledIdleMaterial: ! 51d47a79-fa9a-457f-a979-7b3c7756d6be + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 93ccce6d-acaf-463c-a766-245dfa12e12c + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 963efe2d-6a9c-4ac8-a191-5b09acdea953 + _offIcon: ! 9d31774c-1b26-42a4-8819-3e7746b7436f + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: "Slider Knob [Interactable Required]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! af270195-05b7-4a21-ba85-f65a4fe35f74 + Components: + - ! a81d8b72-cf22-4367-8ee2-c30c24aa433e + - ! ead4c584-9e0f-41d6-8ab3-c0130e6442e7 + - ! 1884f9bf-9555-48ae-9a02-3313f28faf2c + - ! 9aa28ecf-a73a-464d-9884-7167ff68ab11 + - ! 6654f2bd-3907-4d2d-9bad-9fe2bd6da379 +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! c16ed259-fa21-43a0-8b74-0e327d8ac125 + _boundingHeightOffset: ! -1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 6 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Toggle On + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 34 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 0.274510, y: 0.274510, z: 0.274510, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScrollViewCanvasExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -1.000000, y: 2.000000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 53a3c49a-b2de-45ea-8ede-2a7f31878d28 + Components: + - ! d59cddc5-b7d2-4f2f-8728-0df149f2fc3f +- ! + PackagePath: "" + objects: + - ! 13aa01e6-7f7e-4e2f-a696-14e09d57cb48 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 27002369-11ae-4128-be4b-d556378cbc92 + Components: + - ! 2cb78c20-aa8b-4425-9694-f1f0fafea125 + - ! eebe28b9-7f3b-47e3-9b42-e3152f3907b3 +- ! + PrefabRemaps: + [] + Name: rocket_sparks + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 5.731080, z: -2.724091} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.500000, y: 0.500000, z: 0.500000} + hasSegmentScaleCompensation: false + Children: + - ! 6015cc18-9414-4f3b-9aa4-4283771ed4d7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Skin + Enabled: true + skinBones: + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8a5120d8-5a5d-4ffe-a0af-641af7954d6a + - ! 8c527ba7-efd7-4bbc-9bb5-88aa3586ec6d +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: PinchButtonSphereExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! cb8e61aa-b273-48b1-924e-f2ea5fb08e36 + Components: + - ! 4f57e8db-4cfc-4e98-a5fd-904008473f41 + - ! 1812807d-6e0c-480c-826c-33b2f6fbf438 + - ! 8ee64266-9084-4b9d-9e89-8c25c7f06196 + - ! 9d87900d-f378-43eb-b430-8a6606d39af2 + - ! 3d3e693d-a336-4403-a316-ea8413d547bf + - ! 082bd327-fd12-4e4b-951a-5daa2cd50a57 + - ! 5096396e-dd06-4a79-b5aa-86b53013e700 + - ! 3a2fcdc8-7d8e-4198-a126-3606012bc6fa + - ! 498f4954-0bc1-4a9c-be4e-cb173b35131e +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 2 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: min + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: ScrollBarSlider + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: -7.000000, z: -0.250000} + rotation: {x: -0.000000, y: -0.000000, z: 0.000000} + scale: {x: 40.000000, y: 40.000000, z: 40.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 771f1da1-9afc-40b5-a5e6-fa9706436d06 +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 21e4d352-9d86-4acd-aa59-4612dab8ac62 + Components: + - ! ec313b7c-c1ab-47d7-a982-67bb76e2591b + - ! 7ef7df1c-9c06-4bb5-bf2a-61c117fe01dc +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Launch Platform + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9dde13a7-01eb-4ce0-928c-f1a875e4bf5a + - ! 30712b8f-f5e8-4493-97b7-8b71c1f2e536 +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 3ef8fb01-59e9-422a-9ef6-1c49ba13bca5 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f241e3c7-7003-41fd-9caf-19939e5ecd32 + - ! d990d335-d33e-422f-84a9-52709f165f0d +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 46373f08-546f-4e4c-ac2c-fe9882e45fc2 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 18.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 90.000000} + scale: {x: 0.750000, y: 0.750000, z: 0.750000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2334f12f-471a-423d-a5e9-7171d9ea387e + - ! f0fe346e-fe60-4826-9001-2b474a8630a7 + - ! d46a7dbf-ea5e-4e5b-97b8-e3dd2e809ffa + - ! e2da4c90-15e7-4bda-8d89-83ebce005c20 + - ! 89670454-180e-4079-8c25-8d55631d2147 +- ! + PrefabRemaps: + [] + Name: Toggle Off Icon + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c25f198f-56c5-4453-95af-0b8c3df6651d + - ! f8aa478d-c957-450b-a3e6-cca4ae97bc03 +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4de074cf-ded5-4b4f-89f1-db2aeb676652 + Components: + - ! 483580f2-a3c8-422d-911a-24d701b6ae24 + - ! bb9d933d-0e5a-4482-8c35-255f3b127a8c +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! faa82610-73ce-473b-9a0f-5795ddd53a38 + - ! 05b51f1b-00cb-453d-ab7c-dd2dfb762c8f +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.500000 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Left + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! d45857ad-173c-411c-a691-dfa6d051e7a1 + - ! 95091fa6-0b55-4ba0-8794-738888ee725f + - ! 71319c82-a204-4c51-9164-92c4938f210d + Components: + - ! 6e332ad1-3338-441f-971e-a6541371eb3e + - ! bc6e1c15-d8bb-4d4e-b694-aebd3a02d0e4 + - ! 7251b086-04b8-46ca-80ac-d1f333954a93 + - ! 517781cb-d022-45e1-8836-69a14ac377d0 + - ! 745b27ac-cbdc-40ce-8d53-31b4d70e21a4 + - ! eca01df9-89fb-49ed-994b-4c7d947d678c + - ! fd64c6f0-f2e4-40ec-b4d2-52bfc6e7e3c2 + - ! 4d3b81c3-44c7-46b2-bdbb-b8315b216a54 + - ! a6aab087-1121-4f7f-af33-ccef89e1c9d0 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! e9b0749e-9b04-4198-8f4e-f00e42927004 + verticalSquish: 0.900000 + horizontalSquish: 0.900000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Controls + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4f0f8a9d-6f94-4ca3-8292-d38c0730bed6 + - ! f3197aee-abdb-4673-8278-929017e3caa1 + - ! 7893e248-8c53-4dff-a565-26b5f8ec60f2 + - ! a04a5387-e7e1-4fa0-b1c7-0a9b381d84da + - ! 30b1c907-3e03-44e8-a8f2-9ddb4c0825cd + - ! 861e427c-427d-415c-a5c9-62d0cbb72db1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 15c6d713-cca8-4c8a-b936-c9c2a4c961c7 + Mesh: ! ed719342-c4a0-42ca-80ae-988c6a27c71a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: true + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 12 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 400016ba-897b-4f06-8668-db883d28f9a9 + Mesh: ! e773364b-808e-4165-96b2-285eb99a10bb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Size: 0.660000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 25.000000, y: 0.000000, z: -100.000000} + rotation: {x: -65.090828, y: -16.609848, z: 40.221401} + scale: {x: 4.500000, y: 4.500000, z: 4.500000} + hasSegmentScaleCompensation: false + Children: + - ! f8a74290-7650-4c6b-a850-3d5b21c462ae + Components: + - ! e831a7e4-e6e7-468a-a7ca-53b016f7cc68 + - ! 5e074e7a-a118-40d4-8165-f25839e8708e + - ! 2af8cc7b-46cb-4703-8269-3d0af9276706 + - ! 059224d1-1d25-4b3f-9584-af2f47f10333 + - ! ee399757-1172-4e81-baef-174c1a56037f +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! c04b809b-503c-4926-a3b3-683d2c33fb45 + _offIcon: ! 4cc16ea5-a57f-4b78-aea8-b1d8a6575258 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 10 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Recents + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 75 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.700008} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.050000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0c17ce9d-0572-4d37-bf5f-8d9dc17506b4 + - ! 4f6827f2-0cd4-4f99-970e-120729043b27 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + Mesh: ! 2a58608b-008d-40f8-9627-d339311f2e1d + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch Horizontal: 0.000000 + Pinch Vertical: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ToggleButton + Enabled: true + ScriptAsset: ! 093b33e1-4d07-4545-964a-79fb748b7664 + ScriptInputsDefault: + _isToggledOn: true + editEventCallbacks: true + customFunctionForOnStateChanged: true + onStateChangedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _onIcon: ! 908039ca-7d66-4fad-8e47-a7c3e419324a + _offIcon: ! 5ebdc306-6d8f-4dba-a275-295bbb3e5e74 + _isToggledOn: false + editEventCallbacks: false + customFunctionForOnStateChanged: ! 00000000-0000-0000-0000-000000000000 + onStateChangedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "[EXAMPLES] Simple UI" + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b6aa604a-1021-4600-a6df-46af67fd2410 + - ! 29ab70e8-85d8-4339-a569-1c3cba5b4f85 + - ! 11710e50-1a5c-470e-9548-5e93183560ed + - ! b4d267b3-32be-411d-ab20-fe7c056f6b3e + - ! 917c4645-20fc-4578-b743-0e62cec94cb3 + - ! 3c40b17a-8ac9-4a05-b9f5-f0727533bac4 + - ! 0b119fb8-2437-442a-af59-1f0f93e788ac + - ! ad3378fd-b0a2-43b7-aa03-513f9630a512 + - ! e9b0749e-9b04-4198-8f4e-f00e42927004 + - ! fe89ddbb-038e-46a7-aa3e-e2822b297dda + Components: + [] +- ! + PrefabRemaps: + [] + Name: HeadlockExample + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 10.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0f99ec52-b378-4f53-ae5c-9f97316da863 + - ! 54d1b1dc-7425-4f4f-b9f1-3eda5b99981b +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Round Button + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 566655f7-3dec-46f2-85d3-0dd859b02c5d + Components: + - ! a18286e9-69b4-476e-b31e-df7c4f96e8b2 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 4 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: max + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Flight Speed + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.257892, y: 0.500000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4415928d-c047-4d8b-8474-a0cdf8bc1326 +- ! + PrefabRemaps: + [] + Name: Slider Maximum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! becb62ab-34d3-48f4-9964-ec4fa235c378 + Components: + - ! 136d5f7a-7787-45ad-988c-ef9b83909168 + - ! 18dff395-1747-4205-b671-d35923a7ed75 +- ! + PrefabRemaps: + [] + Name: Platform + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -30.000000, z: -100.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.000000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 644f530d-4900-44c1-8b93-e99294b4898f +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! b6e0f29f-f6a2-4cab-97c7-b0b7475b0cdc + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: PinchButtonCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -11.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! 2af707d3-6f15-4836-9fb9-22af49001ec3 + Components: + - ! de0ddca8-d98a-4b59-9382-fe4b7ba6af33 + - ! 85d866b5-0324-4e8a-bfa7-6cc2d33f1cc5 + - ! 4d0c6cce-e5c8-4fb6-9b7e-5eb5be377e3a + - ! ccd6dd60-282f-4a16-b730-14a1d19ceba5 + - ! 2006a4fb-5c60-4207-a9f4-30738e2d0957 + - ! c6902925-7e2d-4745-81ba-94cda9c4385a + - ! 1ece7c6f-3b6c-4169-8336-b887a8614937 + - ! 0806d623-a4b2-42d2-a883-77272aa8a63e + - ! 69531856-b84e-40a0-8b63-9cdfb4979aca +- ! + PrefabRemaps: + [] + Name: RocketGridContentCreator + Enabled: true + ScriptAsset: ! 01cb4976-7110-49ff-ae27-dbb77153e547 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocketConfigurator: ! ce2fde66-cadc-4d86-97a4-9c45b257d536 + objectPrefabs: ! + - ! 8104e815-4316-48be-ad1a-2021666f989f + - ! b9b3aff4-658d-4c76-ab3d-b479d4a722c8 + - ! e56db565-cd60-4e54-9dc1-b211e729b73b + - ! e7254ab7-df28-44a9-9252-05d53fbdc7da + - ! 242abbc5-63eb-448b-9a60-c5f5eae6725c + - ! 76789411-9f7c-4352-84bb-6a762a706580 + - ! 68a19954-e237-4b18-827d-db13073a38d6 + - ! 32671acc-9b4d-4487-ac10-3af976d942d7 + - ! 5c321a82-1be9-40b7-a482-f37464b708db + - ! dbb1f943-cd3e-4b20-89e5-0ce41c98a705 + - ! bbe206c8-38e1-4245-9550-2a019fe7e078 + - ! f2f3ca41-1bd5-4136-a5db-f3edb882b464 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Convex: false + Skin: ! 00000000-0000-0000-0000-000000000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 1.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + - ! fbeb6fd9-56a7-4282-b049-eac1ad3903f4 + - ! 539b74ef-f7d2-4dd6-9805-e1b9dabb5555 + - ! 8b0858fb-58dc-4815-8a17-d136339fd301 + - ! 4b229650-8d72-429d-a0f7-a0b2fe029736 + Components: + - ! 42bc501a-ce13-4614-9e9f-5e63020ac686 + - ! c46721fe-f21f-4a7e-bf00-dead24747a8d + - ! 6da1558e-329b-4fc7-8274-08f491531cd8 + - ! 0795c0c7-f481-4613-85a5-8d0a06d6019f +- ! + PrefabRemaps: + [] + Name: Objects + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 879b5b7d-647c-41b4-93b7-19c796172a1b + - ! 875dcadd-e5f3-4192-a86d-5b08f1d30e48 + - ! b3172fd7-fb4c-4a27-b922-7deb73d24d68 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Launch Text + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0ecb30c4-9050-4e95-83bd-866ec8aecc20 +- ! + PrefabRemaps: + [] + Name: ContainerFrame + Enabled: true + ScriptAsset: ! 14c9f79e-3a55-43d4-bbf6-75c0d6d2e2a2 + ScriptInputsDefault: + border: true + constantPadding: true + isContentInteractable: true + allowTranslation: true + minimumSize: true + maximumSize: true + xAlways: true + yAlways: true + useSnapping: true + itemSnapping: true + worldSnapping: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + autoShowHide: false + innerSize: ! {x: 15.000000, y: 23.000000} + border: ! 4.000000 + constantPadding: ! {x: 0.000000, y: 0.000000} + allowScaling: false + autoScaleContent: false + isContentInteractable: false + allowTranslation: true + minimumSize: ! {x: 10.000000, y: 10.000000} + maximumSize: ! {x: 300.000000, y: 300.000000} + useBillboarding: true + xOnTranslate: true + xAlways: false + yOnTranslate: true + yAlways: false + useSnapping: false + itemSnapping: false + worldSnapping: false + showFollowButton: true + useFOVFollow: true + isFollowing: true + showCloseButton: false + _enableInteractionPlane: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Label + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! f3384425-666a-4766-a620-aa6672fcca3d + - ! 7e322891-6563-46da-89ed-201eef2c40fc +- ! + PrefabRemaps: + [] + Name: Path Option A + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -6.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d2d00557-3420-44fe-be7f-ea7863ad591a + - ! 19c9610a-3217-4c46-86f5-5acd5dbf81e7 + - ! 54c164b2-ed1b-4e3a-8768-e3bb9277b95f + - ! 14364c01-f87d-4805-9527-10d94524f9c2 + - ! 81be64bf-ac1e-419d-bcea-a163e6d1f47a + - ! 19ddc024-06cb-4a0a-80d1-f506ea51f9da +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b8d81a23-6c80-4c26-bac9-d8118f3fecf9 + - ! 6d4c5f96-7762-46ee-a133-04ec4558681a +- ! + PrefabRemaps: + [] + Name: Slider Bounds + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 1.200000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 747b6ca5-719b-4af0-b472-4199272cf36a + - ! 9d694d20-0970-4b25-a6c9-381e45313571 + Components: + - ! 49d9be37-e6ed-42f3-9364-6cc046b1b6f3 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: false + RenderOrder: 11 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 0607447c-e8df-4721-9c51-777e973d74eb + Mesh: ! a6361dc2-6074-45f7-b985-3924776714f4 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ScreenTransformAdapter + Enabled: true + ScriptAsset: ! 91623759-a5a8-4223-b7f9-e08a46044c6c + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c93d66c7-1631-4f81-8bf7-37300d4d2d3b + Mesh: ! cc68878f-b960-4016-868f-3516db30e67c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 941e28cc-de87-4b59-b202-a39797d1271f + sliderMax: ! 6dc88105-5ee5-475a-9557-5101c0c43b9f + _sliderKnob: ! 8b0858fb-58dc-4815-8a17-d136339fd301 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollViewContent + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ccf9a8ab-f33b-4c97-8de9-3c3081849b2a + - ! c86d6989-0949-4715-8b3d-23f041ce77bc +- ! + PrefabRemaps: + [] + Name: "[EXAMPLE] Rocket Workshop" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b7ffae81-3872-40b1-8985-417e5b7ee93e + - ! 66f7cd45-c536-41aa-8822-1805ee2e3b6a + - ! ef1f36e6-0732-46cc-997e-c1da502ccb7a + - ! 0264e12e-a524-40d4-a4a3-4fb93570a886 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Slider + Enabled: true + ScriptAsset: ! 396c7703-7a44-43f8-bfa0-44ac0d6a9fba + ScriptInputsDefault: + _minValue: true + _maxValue: true + stepBehavior: true + _stepSize: true + toggleDuration: true + editEventCallbacks: true + customFunctionForOnHoverEnter: true + onHoverEnterFunctionNames: true + customFunctionForOnHoverExit: true + onHoverExitFunctionNames: true + customFunctionForOnSlideStart: true + onSlideStartFunctionNames: true + customFunctionForOnSlideEnd: true + onSlideEndFunctionNames: true + customFunctionForOnValueUpdate: true + onValueUpdateFunctionNames: true + customFunctionForOnMinValueReached: true + onMinValueReachedFunctionNames: true + customFunctionForOnMaxValueReached: true + onMaxValueReachedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _minValue: ! 0.000000 + _maxValue: ! 1.000000 + startValue: 0.200000 + stepBehavior: false + _stepSize: ! 0.000000 + toggleDuration: 0.200000 + sliderMin: ! 747b6ca5-719b-4af0-b472-4199272cf36a + sliderMax: ! 9d694d20-0970-4b25-a6c9-381e45313571 + _sliderKnob: ! 4ad86e01-dbe5-4c10-9a56-6ba3e17a1a58 + editEventCallbacks: false + customFunctionForOnHoverEnter: ! 00000000-0000-0000-0000-000000000000 + onHoverEnterFunctionNames: ! + [] + customFunctionForOnHoverExit: ! 00000000-0000-0000-0000-000000000000 + onHoverExitFunctionNames: ! + [] + customFunctionForOnSlideStart: ! 00000000-0000-0000-0000-000000000000 + onSlideStartFunctionNames: ! + [] + customFunctionForOnSlideEnd: ! 00000000-0000-0000-0000-000000000000 + onSlideEndFunctionNames: ! + [] + customFunctionForOnValueUpdate: ! 00000000-0000-0000-0000-000000000000 + onValueUpdateFunctionNames: ! + [] + customFunctionForOnMinValueReached: ! 00000000-0000-0000-0000-000000000000 + onMinValueReachedFunctionNames: ! + [] + customFunctionForOnMaxValueReached: ! 00000000-0000-0000-0000-000000000000 + onMaxValueReachedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! acb0e3c0-808b-4dc5-94e6-ef2eb014797d + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 3 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: • + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 00000000-0000-0000-0000-000000000000 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: true + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: GridContentCreator + Enabled: true + ScriptAsset: ! ad83ff54-844d-49a8-9102-f568a9d291c3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + itemPrefab: ! 642b5216-980f-4be9-9593-16aa50bc54ca + itemsCount: ! 30.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -6.400000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c4e490a8-e430-452e-ac26-b91b93059a8e + Components: + - ! 02c06197-d5b5-4b25-b3fa-188becf59fc0 + - ! 31e3869e-2431-4395-8081-790a5f4dceb6 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 42028df6-f4bf-4e31-8e15-8ee907ae2e84 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 33bcfd9d-61f2-4979-8393-543036ba439c + - ! c3ab7030-1abb-429a-8dc2-921adf124b7c +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Path Option B + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 4.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 344dc46f-f5a7-499f-9f38-40743c27710e + - ! 1ef0328d-be86-4265-b300-90052e4e6590 + - ! 35f0606e-5a31-4fe1-bf71-286790ec5161 + - ! 20e01167-18d2-4a20-ad82-d4ee08b967ae + - ! 011037e6-af4e-4fe9-a05b-4f5f01d5d04e + - ! 2b7bc28a-9194-404c-88f4-8ae21ff42c68 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: RocketConfigurator + Enabled: true + ScriptAsset: ! 85cb5de9-5fbb-4fbd-9775-2ac32bd619fe + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + rocket: ! 44295d20-c33c-4c89-85e3-bd064d17a272 + allRocketParts: ! + - ! 390ee0cb-1e60-4d19-8b40-1268800c64bc + - ! a9931968-3294-457d-b5f4-67213a87aec0 + - ! f1f20f41-b943-4d16-9ec2-8b3047cfe6fc + - ! f8c6c126-d1c9-46e6-965f-f185cb98ee55 + - ! 79343b52-0148-40f3-b5ee-59276ae43e7c + - ! 90f56253-e16e-40b6-9a7b-207dc3b162e7 + - ! 11174f6e-5467-4bf7-a4ec-be4b4e11d888 + - ! 255bac26-326b-4045-8f1e-04c78eabb8b4 + - ! 9bb44e42-24ca-4d39-87d2-41596d8f05a4 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 7.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Radius: 1.000000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 4.000000, y: 0.000000, z: 0.850000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.600000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 9b3f6550-083d-43ed-bafd-404cb0d6f508 + Mesh: ! 89d4fe22-573b-42e1-bc8e-620b4df6b699 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 + Z depth: 0.000000 +- ! + PrefabRemaps: + [] + Name: CapsuleMeshCustomizer + Enabled: true + ScriptAsset: ! 34ec9e1d-4d86-425e-9b7a-b6f2c130e4be + ScriptInputsDefault: + radianStepCount: true + cylinderStepCount: true + endXStepCount: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + meshVisual: ! f373af33-29fc-4ac4-a507-514a4d13fd0b + capsuleLength: ! 8.000000 + radius: 1.200000 + radianStepCount: 16 + cylinderStepCount: 16 + endXStepCount: 32 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 216f7c8e-9e81-4522-8fba-2c2ec37b196d + - ! 0533d243-783d-4068-b980-41d6947eca25 +- ! + PrefabRemaps: + [] + Name: ScrollBar + Enabled: true + ScriptAsset: ! 6edc785e-877c-4a9a-b0a0-3f29d68e2274 + ScriptInputsDefault: + _boundingHeightOffset: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _scrollBarMeshVisual: ! 2334f12f-471a-423d-a5e9-7171d9ea387e + _boundingHeightOffset: ! 0.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 90c081b2-59c0-435a-9af5-db45937168e4 + - ! d4268d97-7fa5-4bda-a070-0338b938738e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -4.146290 + bottom: -1.000000 + right: -1.016440 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! be44ec86-6509-4953-8e7d-046468e6b199 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -3.750000 + bottom: -1.050000 + right: 3.750000 + top: 1.050000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Launch PinchButtonCapsule + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -10.850000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b84e5a5f-5aaa-4cb3-bef5-fcd29490a267 + Components: + - ! 284edbad-69b8-45dd-9357-c81c7294d80b + - ! 681a51b5-d4f8-4b50-a8a4-dfbe63d87b4e + - ! d092b67b-f1a2-4b60-a4f4-3a2d1da16d8b + - ! c1dca61c-21f6-4e16-b1bc-4490f744fea3 + - ! 3f7da662-08cf-48df-adf1-e9378c0b479e + - ! 0a36de73-a2c3-4095-92fe-1d3b342d1d31 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! c4f9e171-b692-42e0-99c8-2cc9f6db6c01 + Mesh: ! cf044647-787d-4060-835c-e324061093c6 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 2334f12f-471a-423d-a5e9-7171d9ea387e + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableManipulation + Enabled: true + ScriptAsset: ! 701e5d18-6a44-49ba-9cf8-a20c366c1439 + ScriptInputsDefault: + minimumScaleFactor: true + maximumScaleFactor: true + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: true + zStretchFactorMin: true + zStretchFactorMax: true + useFilter: true + showFilterProperties: true + minCutoff: true + beta: true + dcutoff: true + showTranslationProperties: true + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: true + _rotationAxis: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + manipulateRootSceneObject: ! 534ffe64-3597-48e9-9351-7e4d144ca467 + minimumScaleFactor: 0.250000 + maximumScaleFactor: ! 20.000000 + enableTranslation: true + enableRotation: true + enableScale: true + enableStretchZ: true + showStretchZProperties: false + zStretchFactorMin: ! 1.000000 + zStretchFactorMax: ! 12.000000 + useFilter: true + showFilterProperties: false + minCutoff: ! 2.000000 + beta: 0.015000 + dcutoff: ! 1.000000 + showTranslationProperties: false + _enableXTranslation: true + _enableYTranslation: true + _enableZTranslation: true + showRotationProperties: false + _rotationAxis: All + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 9 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: "Flight Path : A" + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 60 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.035000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: root + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ea663ae3-6aea-4488-939e-a2791f10e5ac + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.672431 + right: 1.000000 + top: 0.931538 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 4.600000, y: 2.000000, z: 2.200000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 7b48f510-7cfb-4b62-b3ad-2db8eb879a10 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ExtendableCapsuleExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -17.000000, z: -60.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.250000, y: 1.250000, z: 1.250000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4de9e5d2-cf1d-492f-8077-a8730c9c8ea7 + - ! a0775d85-6e22-479f-a021-d36685c05fda + - ! 436eccd9-9a65-4e60-9f53-8acb0a5d0c2d + - ! 53c01a08-fd29-4f5d-a2c6-30e0825d3871 + - ! f373af33-29fc-4ac4-a507-514a4d13fd0b + - ! d3aeaf20-7d6e-4c9d-964d-ac4abd507d6c + - ! c7aaa05c-fd71-4bcb-93e1-24177777bfba + - ! efd9a13f-a9e9-4507-9a8a-1d89d7715a59 +- ! + PrefabRemaps: + [] + Name: piece_0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 5.097826, z: -0.064316} + rotation: {x: -90.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 44295d20-c33c-4c89-85e3-bd064d17a272 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: true + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.100000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: false + Anchor: + left: -0.200000 + bottom: -1.000000 + right: 0.200000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Title + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e80f3472-cd56-42fb-b0f8-71282549f1e4 + - ! 08d0670c-5afe-4fc8-a397-e96cdf6513e4 +- ! + PrefabRemaps: + [] + Name: Text + Enabled: true + RenderOrder: 1 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Container Frame + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 74 + Font: ! 709203b6-8b83-40d7-8dda-e5adc4fd2875 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Size: {x: 2.500000, y: 2.500000, z: 2.500000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: ShowPlatformToggleButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.850000, y: -7.000000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.150000, y: 1.150000, z: 1.150000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3f2631ee-7671-4e09-a3da-2d3ebbc3e058 + - ! ce3cbfd7-71d6-484d-8f35-3c75c58cf0ed + - ! 1bf0d431-ce81-4485-891a-20241a415173 + - ! a5db8618-2b74-418a-953b-7777d3350c20 + - ! 33c17ba3-4fa4-4800-b90b-2e137397ed6c + - ! 88cab6a3-2bd9-4c63-81b0-834619c56f23 +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 0b4c9b86-170b-4692-ac74-668e4aa1af4e + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ScrollView + Enabled: true + ScriptAsset: ! 6ad8e076-1f73-4dde-9236-fd993752a829 + ScriptInputsDefault: + _debugDrawEnabled: true + enableHorizontalScroll: true + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: true + scrollAreaBounds: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _debugDrawEnabled: false + enableHorizontalScroll: false + enableVerticalScroll: true + _enableScrollInertia: true + enableScrollLimit: true + _scrollLimit: 0.300000 + scrollAreaBounds: ! {x: 1.000000, y: 1.000000} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RocketPartSelector + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -35.000000, y: -1.927469, z: -100.000000} + rotation: {x: 0.000000, y: 10.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8d20fcb2-bd25-4e36-8620-574d46a2754e + Components: + - ! 03de1672-8771-436d-ad08-860688095af9 +- ! + PrefabRemaps: + [] + Name: Physics Collider + Enabled: true + Shape: ! + FitVisual: true + Size: {x: 15.000000, y: 15.000000, z: 15.000000} + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 7f82b210-b438-4633-853e-6f804c2638bb + Mesh: ! 7ba378bf-39c6-4345-acbf-9e09fff8deaa + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 8 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67ebae44-f78a-4d09-ba37-4911855541a1 + Mesh: ! 084cd363-7eda-4d8c-a4cd-f08105c18984 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b1410ec4-1d45-43b9-8dc9-9027901a3bd5 + - ! 1018440c-8f94-44fb-936d-d3befedcd3fc +- ! + PrefabRemaps: + [] + Name: ToggleButtonSphereExample Mid Bottom Right + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 5.000000, y: 9.500000, z: 1.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! d6147361-2c77-4fe6-a50d-f93f102ff8cf + - ! c04b809b-503c-4926-a3b3-683d2c33fb45 + - ! 4cc16ea5-a57f-4b78-aea8-b1d8a6575258 + Components: + - ! 8471a6fe-c53f-44a1-8594-e59723f7f791 + - ! b45458ed-16e0-4676-9a61-c95e97dbecbe + - ! 9bf42b2b-6ad0-4f72-979e-462c4e6bf2a8 + - ! a7faad0d-e773-40af-8b1c-7c1f6db8641d + - ! 80c25d73-8dcb-450a-b4ea-4876884a8f18 + - ! f58d51ba-2ebf-4b6d-8212-d489883774b5 + - ! 3ebadc52-4e51-426c-9207-d316088eed91 + - ! 4aa50c1c-12d3-4209-8c41-cb8e10a4e21a + - ! 36320a1d-a3bc-4369-89d6-94eb05b980a7 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 15 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 00000000-0000-0000-0000-000000000000 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Slider Minimum + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a8e1633c-034f-4321-ae13-3127dc221fc6 + Components: + - ! fd07b3c9-6479-4e2d-981d-fc304c8cf9f6 + - ! 2b0ff021-3975-49b2-ba2f-6d5f47c5495d +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3c034048-9ae5-4710-b56c-d1ce02634454 + - ! 309e36bc-4a5b-438f-9ff8-e634a660edda +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Slider Track + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5bea567e-d091-4432-a0cd-f4e27f84743a + - ! 996ebe32-603c-49b8-beb7-8a0f594c90fe +- ! + PrefabRemaps: + [] + Name: Canvas + Enabled: true + UnitType: World + SortingType: Hierarchy + WorldSpaceRect: + left: -15.000000 + bottom: -20.000000 + right: 15.000000 + top: 20.000000 +- ! + PrefabRemaps: + [] + Name: Toggle On Icon + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 11fc4951-34f8-4c41-842a-127c6450b3f9 + - ! 46d205c4-d6ea-40bf-a73d-98260489d19b +- ! + PrefabRemaps: + [] + Name: Satellite + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 47.675831, y: 19.865082, z: 33.071331} + scale: {x: 0.222222, y: 0.222222, z: 0.222222} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0fba4b93-4ed1-4ad0-9e9a-7abd2ea2040e + - ! 3b7b90e8-b154-4678-aec6-b4644aad37a4 + - ! 43e187b9-6cfe-4f55-9c0d-da5aef53b9ab + - ! 4e312a81-ccf8-4ca9-8d22-3e4f8e3bc25e +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.500000 + top: 0.500000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ToggleFeedback + Enabled: true + ScriptAsset: ! 2a951ea9-9d48-4b80-88aa-457e5d826516 + ScriptInputsDefault: + toggledOffMaterial: true + toggledOffSelectMaterial: true + toggledOnMaterial: true + toggledOnSelectMaterial: true + disabledMaterial: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + toggledOffMaterial: ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + toggledOffSelectMaterial: ! 67ebae44-f78a-4d09-ba37-4911855541a1 + toggledOnMaterial: ! 424e8534-6958-4a67-a5c2-79ab7d39005b + toggledOnSelectMaterial: ! bc768d68-834d-4e21-a648-0c00a0e6bdd3 + disabledMaterial: ! 2934a39f-046b-4ced-afd2-555a4f234041 + meshVisuals: ! + - ! 72813d4c-5965-40fc-b436-27385ed100d2 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ea3121f8-4072-4c09-8bcd-a0eda9ba29be + Mesh: ! e49fb15a-e6cc-4d74-b1e5-d4e8b026b301 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + Pinch: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -10.581100, y: 0.000000, z: 0.034996} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.979416 + bottom: -1.000000 + right: 4.109260 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Slider Track BG + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -0.005000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c6f10311-98a6-43ed-9283-246fb934cdb2 + - ! a257dcec-8901-4c41-ba70-2c6456e0d5b3 +- ! + PrefabRemaps: + [] + Name: SliderExample + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: -2.750000, z: 2.500000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.500000, y: 1.500000, z: 1.500000} + hasSegmentScaleCompensation: false + Children: + - ! f282803d-4936-45a6-aeb9-14b960645fc0 + - ! 1bba24ec-27b6-4fbc-a60d-6f067f323d12 + - ! 4ad86e01-dbe5-4c10-9a56-6ba3e17a1a58 + - ! c0ae321c-1bce-4215-b082-0c564cc5bba0 + Components: + - ! 72abb230-9be4-415d-b507-59d1bcb25c1b + - ! c5e4e2f6-6a4c-4c04-bfea-f04b7efc0e39 + - ! 9afb0850-51a3-4658-b088-ffccf333bffb + - ! 051cecd2-baa5-478d-b025-7ec93d56ceba +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 67275e46-74cf-4d9e-a2fe-63594c108a55 + Mesh: ! 19b05bf9-336a-4446-8bae-3900ec681e19 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: -4.000000, y: 0.000000, z: 0.827240} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: -0.600000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! a04a5387-e7e1-4fa0-b1c7-0a9b381d84da + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! b4b364af-ee41-4c86-a1ba-a055da762816 + Mesh: ! eb9c4a4a-8795-4ce9-9f28-3fa5870debeb + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ContainerFrameUI + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 55.000000, y: -5.000000, z: -65.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a0e7f2a8-9e75-4c79-a159-f2a6711c1a42 + Components: + - ! 18911d85-b9bb-4de4-bdde-3459199d23ff +- ! + PrefabRemaps: + [] + Name: ButtonFeedback + Enabled: true + ScriptAsset: ! c160a957-4b35-4342-9927-7fd2766d231d + ScriptInputsDefault: + buttonType: true + useGlowMesh: true + glowRenderMeshVisual: true + maxBlendShapeWeight: true + meshBlendShapeName: true + glowBlendShapeName: true + glowIdleMaterial: true + glowHoverMaterial: true + glowPinchedMaterial: true + meshToggledPinchedMaterial: true + meshToggledHoverMaterial: true + meshToggledIdleMaterial: true + meshStatePinchedMaterial: true + meshStateHoverMaterial: true + meshStateIdleMaterial: true + persistentPinchedState: true + defaultIcon: true + onIcon: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + buttonType: 0 + renderMeshVisual: ! aad54900-794a-41ae-adbc-4d8e74af4626 + useGlowMesh: false + glowRenderMeshVisual: ! 00000000-0000-0000-0000-000000000000 + maxBlendShapeWeight: ! 1.000000 + meshBlendShapeName: Pinch + meshIdleMaterial: ! bf23557f-e639-48f1-aff2-aafc4d92fe11 + meshHoverMaterial: ! 386f728b-6a31-4633-b176-f92cd5bc60ce + meshPinchedMaterial: ! 92c09c9d-bf66-4313-9fbd-9c191887a5d4 + glowBlendShapeName: Pinch + glowIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + glowHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + glowPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledPinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshToggledIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStatePinchedMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateHoverMaterial: ! 00000000-0000-0000-0000-000000000000 + meshStateIdleMaterial: ! 00000000-0000-0000-0000-000000000000 + persistentPinchedState: false + defaultIcon: ! 00000000-0000-0000-0000-000000000000 + onIcon: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab new file mode 100644 index 00000000..ff475b46 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab @@ -0,0 +1,721 @@ +- ! + PackagePath: "" + objects: + - ! d9458e70-e7da-4fd2-b255-9600abd6c8e8 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! aed271ca-fdcc-4482-99e2-bb97eecefd80 + - ! 2a33923e-ffa7-48bc-bffe-9579f9595a8c +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 16 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ef3a3d48-a46b-4cc9-a244-eaaf4e812941 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d30d55d4-56d8-4c80-87a1-8bea52789b04 + Components: + - ! 36ca1216-3ea2-432a-b0ae-c73a2bd49b37 + - ! fb8ed0b0-44c3-4910-b742-6eb1c1240b0c + - ! f060b6e1-03a1-4513-a02b-49b921a2cbb8 + - ! ff7bd9f1-8bed-4a35-aae2-85cf07766a20 + - ! c3062ad4-fda5-44f0-a70b-6c6f9ebb3b15 + - ! 2bdef6c8-aa9b-4e4b-95f3-1f5a34f788cd + - ! b49ea6f7-46eb-4328-9feb-b8cebe4166fa + - ! da7a487d-10e8-4266-9382-f6b3fd5406a3 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 13 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Jaz Powderman + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 2e1d3187-b3ed-478a-93ad-7f99744f2d66 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 17 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Radius: 1.500000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 15 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + Size: + x: ! 1.000000 + y: ! 1.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: ContactDetails + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 0d38bdbf-7c0d-4282-87af-a9cf62c4fda8 + - ! b47d63cf-4961-4e51-9eb0-3a2352e16a21 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 14 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Details if they exist + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4d2eb700-988c-4db5-a297-57f5777dac34 + - ! c7ee0d5a-1eb2-482f-af79-2e732d73c445 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! d30d55d4-56d8-4c80-87a1-8bea52789b04 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Pinch Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2e1d3187-b3ed-478a-93ad-7f99744f2d66 + - ! 05937f73-c87a-4785-879e-653f4bd7cbfe +- ! + PrefabRemaps: + [] + Name: Bitmoji + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 06286a0e-f039-41b9-aad5-4779d25d17f6 + - ! ec6ef17a-d9cf-4fc4-8eac-a2c5df087885 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0298794c-91a1-412f-93ae-ed4e1a98f07a + - ! 54435327-784f-4c7d-a49d-383204494866 + - ! ba03df6e-9941-463b-a602-23d926335075 + - ! d640c5ee-7cc3-44d4-8cb8-4f03f530099f + - ! 1bbf856a-0fc3-4fb7-8047-00850d0ab14f + Components: + - ! 51d51986-29bd-43bf-afdc-e00a0c5dcfa4 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 2e1d3187-b3ed-478a-93ad-7f99744f2d66 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab.meta new file mode 100644 index 00000000..1da4708b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/ScrollViewListItem.prefab.meta @@ -0,0 +1,766 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + ObjectPrefab: ! 642b5216-980f-4be9-9593-16aa50bc54ca + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 642b5216-980f-4be9-9593-16aa50bc54ca + PackageType: NotAPackage + AssetDataMap: + ObjectPrefab: ! f7c39d58-4db7-45ce-b0a6-7e54d85e0216 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.000000 + right: -1.000000 + top: 0.000000 + Offset: + left: 1.750000 + bottom: -2.000000 + right: 5.750000 + top: 2.000000 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 16 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! ef3a3d48-a46b-4cc9-a244-eaaf4e812941 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: ScrollViewListItem + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a5a17b66-0352-4cd0-8db6-4a19558d1f65 + - ! b15b40bb-4bfe-40e9-b170-640c210be3b9 + - ! 75688e1f-ee30-409d-a238-e99316f8b63b + - ! c2432ec6-f4ce-4924-a80b-44792c41696c + - ! fb1c8aa6-664c-4574-9e3b-086b0e52f1c4 + Components: + - ! c12576c1-e8ae-4a38-a66f-2d6013c99f7a +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 17 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 780a1cd7-1fdc-450e-954a-caf4fe4374f3 + Mesh: ! 16e2a3b8-4952-40bf-b1bb-0f2b6d31fc5c + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 15 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 409f5a96-3322-429c-8a4b-43d6f203c994 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + Size: + x: ! 1.000000 + y: ! 1.000000 + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: -0.500000 + right: 0.665100 + top: -0.500000 + Offset: + left: -0.000000 + bottom: -0.750000 + right: 0.000000 + top: 0.750000 +- ! + PrefabRemaps: + [] + Name: InteractableSquishFeedback + Enabled: true + ScriptAsset: ! 3397d147-77b8-4570-ba3f-80c4d9229ef5 + ScriptInputsDefault: + horizontalSquish: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + squishObject: ! de1ff498-3ad5-4da0-b388-f068a431e7f4 + verticalSquish: 0.600000 + horizontalSquish: ! 1.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: InteractableAudioFeedback + Enabled: true + ScriptAsset: ! c57fd4b4-b5d5-4eae-b45c-2f62c57e2bc3 + ScriptInputsDefault: + hoverAudioTrack: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + hoverAudioTrack: ! 00000000-0000-0000-0000-000000000000 + triggerStartAudioTrack: ! d531ff43-b8df-4401-839c-645878c5bd2e + triggerEndAudioTrack: ! 7b58983a-a4ca-417f-8171-2a074e30c6d1 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -0.500000 + bottom: 0.200000 + right: 0.665100 + top: 0.200000 + Offset: + left: -0.000000 + bottom: -1.000000 + right: 0.000000 + top: 1.000000 +- ! + PrefabRemaps: + [] + Name: Interactable + Enabled: true + ScriptAsset: ! c973d211-281b-4016-ae39-e12f3317bcae + ScriptInputsDefault: + targetingMode: true + enableInstantDrag: true + allowMultipleInteractors: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetingMode: ! 3.000000 + enableInstantDrag: false + allowMultipleInteractors: true + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 14 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Details if they exist + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! a04f6bc5-fd7c-4ce5-9d5c-6d16a6218a25 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.600000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + ScriptAsset: ! e66e07b4-5f11-478e-be75-73f3c76bdd61 + ScriptInputsDefault: + editEventCallbacks: true + customFunctionForOnButtonPinched: true + onButtonPinchedFunctionNames: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + editEventCallbacks: false + customFunctionForOnButtonPinched: ! 00000000-0000-0000-0000-000000000000 + onButtonPinchedFunctionNames: ! + [] + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Background + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 30d01c2e-fd3f-4372-9b7c-86dae41f1cae + - ! 256510ad-6649-43c6-b3e6-3bccdf51b0a0 +- ! + PrefabRemaps: + [] + Name: InteractableColorFeedback + Enabled: true + ScriptAsset: ! 2f5f1a79-ca6d-4d74-a865-d21c3820e03e + ScriptInputsDefault: + defaultColor: true + hoverColor: true + pinchedColor: true + disabledColor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + defaultColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + hoverColor: ! {x: 0.280000, y: 0.280000, z: 0.280000, w: 1.000000} + pinchedColor: ! {x: 0.460000, y: 0.460000, z: 0.460000, w: 1.000000} + disabledColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.000000} + meshVisuals: ! + - ! 2efeab76-adda-45bb-b34e-108760c834b8 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Physics Body + Enabled: true + Shape: ! + FitVisual: false + Radius: 1.500000 + Matter: ! 00000000-0000-0000-0000-000000000000 + Filter: ! 00000000-0000-0000-0000-000000000000 + OverlapFilter: ! 00000000-0000-0000-0000-000000000000 + WorldSettings: ! 00000000-0000-0000-0000-000000000000 + EnableSmoothing: false + PositionTension: 30.000000 + RotationTension: 30.000000 + ForceCompound: false + Intangible: false + ShowCollider: false + Dynamic: false + BodySetting: Density + BodySettingValue: 1.000000 + Damping: 0.000000 + AngularDamping: 0.000000 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: -1.000000 + right: 1.000000 + top: 1.000000 + Offset: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 +- ! + PrefabRemaps: + [] + Name: ContactName + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4acd99a5-8351-4139-a7fa-8650af0ceb0c + - ! c9ba6605-7418-4903-a73d-987975ce35ad +- ! + PrefabRemaps: + [] + Name: InteractableOutlineFeedback + Enabled: true + ScriptAsset: ! c2e90e99-2305-4b10-a778-d72bf9b9adbd + ScriptInputsDefault: + hoveringColor: true + activatingColor: true + outlineWeight: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + targetOutlineMaterial: ! e9a54599-e28b-4cfe-b14c-2ec3256020aa + hoveringColor: ! {x: 1.000000, y: 1.000000, z: 0.040000, w: 1.000000} + activatingColor: ! {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + outlineWeight: -0.250000 + meshVisuals: ! + - ! 2efeab76-adda-45bb-b34e-108760c834b8 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ContactDetails + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 35b7977b-cde5-402a-9afa-06a31d48b9c7 + - ! 4bd803c7-abe4-42f1-938f-900fb70ab213 +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.000000, y: 0.300000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: -1.000000 + bottom: 0.300000 + right: 1.000000 + top: 0.300000 + Offset: + left: 0.000001 + bottom: -2.500000 + right: -0.000001 + top: 2.500000 +- ! + PrefabRemaps: + [] + Name: Bitmoji + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1eadb729-2b00-4795-93a5-c665c974956f + - ! 05fd22d7-8475-4776-a7e2-ba01cd4feea4 +- ! + PrefabRemaps: + [] + Name: Text 2 + Enabled: true + RenderOrder: 13 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Left + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Text: Jaz Powderman + Editable: false + ShowEditingPreview: true + TouchHandler: ! 00000000-0000-0000-0000-000000000000 + SizeToFit: false + FontSize: 48 + Font: ! 711473f0-eaf8-4cdb-8d22-e1d2e07c6345 + LayoutRect: + left: -7.500000 + bottom: -2.250000 + right: 7.500000 + top: 2.250000 + OverflowVertical: Overflow + OverflowHorizontal: Overflow + Fill: ! + Mode: Solid + Color: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Outline: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Size: 0.250000 + Dropshadow: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + OffsetX: 0.250000 + OffsetY: 0.250000 + Background: ! + Enabled: false + Fill: ! + Mode: Solid + Color: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000} + Texture: ! 00000000-0000-0000-0000-000000000000 + TileCount: 5.000000 + TileZone: Rect + TextureStretch: FitWidth + Margins: + left: 0.000000 + bottom: 0.000000 + right: 0.000000 + top: 0.000000 + CornerRadius: 0.000000 + AdvancedLayout: ! + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 + LetterSpacing: 0.000000 + LineSpacing: 1.000000 + CapitalizationOverride: None + CapitilizationOverride: None + DepthTest: false + TwoSided: false +- ! + PrefabRemaps: + [] + Name: Screen Transform + Enabled: true + IsAdvanced: false + Constraints: + pinToLeft: false + pinToTop: false + pinToRight: false + pinToBottom: false + fixedWidth: false + fixedHeight: false + deactivatedFixedSprite: false + deactivatedFixedPivot: false + Pivot: {x: 0.000000, y: 0.000000} + Transform: + position: {x: 0.825276, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + RawMode: true + ForceBasic: true + Anchor: + left: 0.825276 + bottom: 0.000000 + right: 0.825276 + top: 0.000000 + Offset: + left: -1.500000 + bottom: -1.500000 + right: 1.500000 + top: 1.500000 +- ! + PrefabRemaps: + [] + Name: Pinch Button Mesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2efeab76-adda-45bb-b34e-108760c834b8 + - ! 9cae1319-ad3d-4b2a-88a3-f6d11dba5500 +- ! + PackagePath: "" + objects: + - ! 220a6bf5-2e25-4959-86cd-7e772e9a6969 + LazyLoading: false + RetainAssets: true +- ! + SourceRemaps: + - 0298794c-91a1-412f-93ae-ed4e1a98f07a: a5a17b66-0352-4cd0-8db6-4a19558d1f65 + - 05937f73-c87a-4785-879e-653f4bd7cbfe: 9cae1319-ad3d-4b2a-88a3-f6d11dba5500 + - 06286a0e-f039-41b9-aad5-4779d25d17f6: 1eadb729-2b00-4795-93a5-c665c974956f + - 0d38bdbf-7c0d-4282-87af-a9cf62c4fda8: 35b7977b-cde5-402a-9afa-06a31d48b9c7 + - 1bbf856a-0fc3-4fb7-8047-00850d0ab14f: fb1c8aa6-664c-4574-9e3b-086b0e52f1c4 + - 2a33923e-ffa7-48bc-bffe-9579f9595a8c: c9ba6605-7418-4903-a73d-987975ce35ad + - 2bdef6c8-aa9b-4e4b-95f3-1f5a34f788cd: a91ca22b-d38a-4155-b997-d369e7fb5002 + - 2e1d3187-b3ed-478a-93ad-7f99744f2d66: 2efeab76-adda-45bb-b34e-108760c834b8 + - 36ca1216-3ea2-432a-b0ae-c73a2bd49b37: 78215fc2-6bb1-443e-a189-e1d979d431ec + - 4d2eb700-988c-4db5-a297-57f5777dac34: 30d01c2e-fd3f-4372-9b7c-86dae41f1cae + - 51d51986-29bd-43bf-afdc-e00a0c5dcfa4: c12576c1-e8ae-4a38-a66f-2d6013c99f7a + - 54435327-784f-4c7d-a49d-383204494866: b15b40bb-4bfe-40e9-b170-640c210be3b9 + - aed271ca-fdcc-4482-99e2-bb97eecefd80: 4acd99a5-8351-4139-a7fa-8650af0ceb0c + - b47d63cf-4961-4e51-9eb0-3a2352e16a21: 4bd803c7-abe4-42f1-938f-900fb70ab213 + - b49ea6f7-46eb-4328-9feb-b8cebe4166fa: 40a42640-9261-425a-8fc5-c5634e928ffa + - ba03df6e-9941-463b-a602-23d926335075: 75688e1f-ee30-409d-a238-e99316f8b63b + - c3062ad4-fda5-44f0-a70b-6c6f9ebb3b15: 40a15cea-1692-4652-b69a-56e9566a567d + - c7ee0d5a-1eb2-482f-af79-2e732d73c445: 256510ad-6649-43c6-b3e6-3bccdf51b0a0 + - d30d55d4-56d8-4c80-87a1-8bea52789b04: de1ff498-3ad5-4da0-b388-f068a431e7f4 + - d640c5ee-7cc3-44d4-8cb8-4f03f530099f: c2432ec6-f4ce-4924-a80b-44792c41696c + - d9458e70-e7da-4fd2-b255-9600abd6c8e8: 220a6bf5-2e25-4959-86cd-7e772e9a6969 + - da7a487d-10e8-4266-9382-f6b3fd5406a3: 77807171-1768-4e47-984f-c671099015f9 + - ec6ef17a-d9cf-4fc4-8eac-a2c5df087885: 05fd22d7-8475-4776-a7e2-ba01cd4feea4 + - f060b6e1-03a1-4513-a02b-49b921a2cbb8: 5c2510fa-8fcd-417b-962e-4fb66c74fe1f + - fb8ed0b0-44c3-4910-b742-6eb1c1240b0c: d9133170-c4dc-4b5f-974f-52f73b397c3c + - ff7bd9f1-8bed-4a35-aae2-85cf07766a20: 4b379607-0bf2-41df-a871-014a17ccba4b + SourceState: ! e33a9aaa-e5ca-4095-8947-923c75b294dc +- ! + PrefabRemaps: + [] + Name: PinchButton + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.825276, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! de1ff498-3ad5-4da0-b388-f068a431e7f4 + Components: + - ! 78215fc2-6bb1-443e-a189-e1d979d431ec + - ! d9133170-c4dc-4b5f-974f-52f73b397c3c + - ! 5c2510fa-8fcd-417b-962e-4fb66c74fe1f + - ! 4b379607-0bf2-41df-a871-014a17ccba4b + - ! 40a15cea-1692-4652-b69a-56e9566a567d + - ! a91ca22b-d38a-4155-b997-d369e7fb5002 + - ! 40a42640-9261-425a-8fc5-c5634e928ffa + - ! 77807171-1768-4e47-984f-c671099015f9 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab new file mode 100644 index 00000000..5b8cad5b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab @@ -0,0 +1,2274 @@ +- ! + PackagePath: "" + objects: + - ! 481aca89-f9bf-4ce1-a3a8-d75fc0ff915b + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000002} + rotation: {x: -0.000207, y: -0.000205, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e0925a50-c8a1-4759-9d26-eac6079b1fdb + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.054705, y: 3.957050, z: -0.004463} + rotation: {x: -2.614390, y: -0.009460, z: -0.205101} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 50cf7888-914f-493a-8fcd-16a430ffe91e + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000050, y: -0.000056, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 04ac8134-d110-4511-b25a-891f2f66584b + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: right + selectVisual: Default + handInteractor: ! d6371ebf-1d3b-4bfa-bdd8-c0a7fabf8f39 + handMesh: ! 1907c2c5-2d81-47ce-96c9-eeb579299134 + root: ! 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.549810, z: -0.000001} + rotation: {x: -0.000000, y: 0.176026, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a92fd0a3-ee3a-4273-a91b-d625d14ce8d2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: -0.000148, y: 0.000148, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e835154-746f-4b08-a586-447595fc19a1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + ScriptAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + mouseTargetingMode: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + mouseTargetingMode: ! 2.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.067615, y: 3.518870, z: 0.000095} + rotation: {x: 14.081600, y: -0.000034, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 81d57b7d-0209-4404-a775-f7ef13ad4f97 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001204, y: 3.309390, z: 0.000044} + rotation: {x: 0.145073, y: -0.000050, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 94200c52-425a-43b6-8893-512b230a7726 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.005385, y: 2.681950, z: -0.000095} + rotation: {x: -5.666190, y: -0.004601, z: -0.046291} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5ce67bb0-6c08-472c-b67f-77bde9454993 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 72e54688-1bc6-48fc-89bb-5fc41b166ae0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.009104, y: 2.837160, z: -0.000745} + rotation: {x: -88.447800, y: 0.630570, z: -5.443090} + scale: {x: 1.000000, y: 1.000000, z: 0.999998} + hasSegmentScaleCompensation: false + Children: + - ! 66b39338-c86b-4347-b964-852a182ec082 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.824800, z: -0.000000} + rotation: {x: -2.274930, y: -6.337840, z: -8.604530} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7f240caf-60c7-4d5e-b716-5090899a20ce + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002904, y: 3.650310, z: -0.000110} + rotation: {x: -2.676430, y: -0.000566, z: -0.015133} + scale: {x: 0.999999, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1d87de05-c879-4ac1-8782-eaceafb0ab7c + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03d33697-6495-4e15-9a2d-646411a514a9 + Mesh: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + Skin: ! e3a7a944-c642-433e-b640-41b775d7e247 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013406, y: 3.861870, z: 0.000154} + rotation: {x: -4.535300, y: 0.000290, z: 0.000017} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8d2fc7e4-0fe6-43d2-b837-fbe1aa318543 + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 64c3ab11-f5ff-4e18-91b8-c697a26228bd + - ! aff70df1-490d-4236-bfe7-1c9fcd1a028a + Components: + - ! 1f7bf313-445c-40f6-92ad-a40a50dea575 +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.010479, y: 3.166700, z: 0.000210} + rotation: {x: -87.477303, y: 5.565590, z: -5.001890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ad14db46-53e1-460c-a8bf-8c26bd57f37c + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: -0.000051, y: -0.000000, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5fb8a5cc-ee0c-4abd-bff7-cb1d3aa2a5bc + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + mid-3_end_end_end_end: ! cb9bed1c-7640-4b13-9103-67d3e3ae7401 + LeftHandRig: ! 64c3ab11-f5ff-4e18-91b8-c697a26228bd + ring-2: ! 24d6dc84-ed70-4a53-a3c4-9224488ec60a + LeftHandModel: ! 1d1c8de5-b019-4d0a-adc6-1ad389890762 + pinky-1: ! 93d669d1-3439-4d61-ab72-99f1c6f76a81 + pinky-3_end_end_end: ! 1e231994-34a6-48c1-94ee-339987f113c7 + ring-1: ! 822c9dec-583d-4588-bf8f-9e76769d9791 + index-3: ! 12ba946a-1a8e-4e95-87e5-087ec0b249cc + wrist_to_ring: ! e8f1e2a0-17f6-445d-ad3b-100743436988 + index-1: ! 32b9372e-60ad-430c-87fe-a43f6258b4e5 + pinky-2: ! 0f43b8a1-5f63-44c3-9ba0-32318363dc57 + index-0: ! 42c8f113-929e-4b03-b3c0-1e0908941234 + LeftHandMesh: ! aff70df1-490d-4236-bfe7-1c9fcd1a028a + wrist_to_pinky: ! 24d70dc1-4597-48e0-9370-c6e9293594d4 + wrist_to_thumb: ! 37803923-6d4a-4268-aba1-ef5d1d23cd46 + index-3_end_end_end: ! c224f6fa-05b2-43d9-b45b-0050539a4688 + mid-3: ! 1d87de05-c879-4ac1-8782-eaceafb0ab7c + index-3_end: ! 66b39338-c86b-4347-b964-852a182ec082 + index-3_end_end: ! c609db94-d0da-4230-a62a-7f71134c5356 + pinky-0: ! 2a62abd3-948e-4fb7-bacd-e846fe772fc8 + pinky-3: ! 5ce67bb0-6c08-472c-b67f-77bde9454993 + mid-1: ! 951124b2-906c-4f4f-8422-a881e9d98b4a + thumb-3_end_end_end: ! 0473b266-866f-4f68-af21-9d3530e1914f + mid-3_end: ! ad14db46-53e1-460c-a8bf-8c26bd57f37c + mid-3_end_end: ! 95f1c1ea-6b70-4e98-80bd-216ce18becb4 + ring-0: ! 9c6e9559-53cb-4842-afc9-a9cf725bce0a + pinky-3_end: ! 28b286b8-7e97-4ed0-bbce-b813966137ff + wrist_to_index: ! fd649b68-8f72-465f-baa6-ceef905acca1 + thumb-3_end_end: ! e3a03ad7-eb65-485e-86e0-cd9f0e93e442 + mid-0: ! 2536fae3-02cb-4aa5-8c55-952afc929db0 + ring-3_end_end_end_end: ! 72e54688-1bc6-48fc-89bb-5fc41b166ae0 + ring-3_end: ! edd67c66-78f4-4deb-a3bf-c7b0b07504f3 + pinky-3_end_end_end_end: ! 5fb8a5cc-ee0c-4abd-bff7-cb1d3aa2a5bc + mid-3_end_end_end: ! 4b527cf4-3e27-4559-b291-0a0b985b4717 + thumb-2: ! 009892ac-73e5-4967-bd85-efc71c49f0a7 + ring-3: ! 2878109d-8f26-4010-b916-efdc9fecbdf8 + ring-3_end_end: ! a0534ec9-6292-40ec-b6cd-859f7738f85f + thumb-0: ! 3ab55c9b-dd82-4532-943e-d1df8f009177 + thumb-3_end: ! ea14478c-a162-45e4-a7a7-af2ac18b7d4c + thumb-1: ! e417673c-029b-4df2-b240-55edb111620f + wrist: ! 33423227-0e0f-43a6-a69d-a713b9653e99 + thumb-3: ! 50cf7888-914f-493a-8fcd-16a430ffe91e + mid-2: ! 15d70faf-f504-434b-bc7b-bb474fac2980 + wrist_to_mid: ! 4ca9e76a-f818-4a4f-954e-2777667c610a + index-3_end_end_end_end: ! 7976d725-6d53-4c31-a2c3-f96d25c2b921 + index-2: ! db9cf02a-a38c-47aa-b059-2faab8f74c75 + ring-3_end_end_end: ! 12549dba-74cb-48d3-a50f-73daa0d64196 + thumb-3_end_end_end_end: ! a92fd0a3-ee3a-4273-a91b-d625d14ce8d2 + pinky-3_end_end: ! 4756a1da-6124-4cbb-af0c-1631649652f6 +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000104, y: 0.000103, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 59d49307-84ec-4eb8-aa0f-22f915eb8a4f + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1d1c8de5-b019-4d0a-adc6-1ad389890762 + Components: + - ! 5aee8ecc-3bc7-4fd4-a5bc-c0eaa693a469 +- ! + PrefabRemaps: + [] + Name: Configuration + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ca642efc-944a-4dac-beb4-508163707dd4 + - ! 63d95309-a416-46c0-a21b-462bd3335750 +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001204, y: 3.309410, z: 0.000061} + rotation: {x: 0.145060, y: 0.000496, z: 0.002001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2878109d-8f26-4010-b916-efdc9fecbdf8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.905911, y: 15.703600, z: -17.047701} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2a62abd3-948e-4fb7-bacd-e846fe772fc8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.483000, z: -0.000001} + rotation: {x: 1.265800, y: 6.113890, z: -3.274570} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 951124b2-906c-4f4f-8422-a881e9d98b4a + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.483100, z: -0.000001} + rotation: {x: 1.935390, y: 5.930260, z: 3.282900} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1abd5650-e4e3-4218-9dfe-2d518a0b161b + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001444, y: 2.703710, z: 0.000020} + rotation: {x: 88.973000, y: 4.975880, z: 4.973150} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! edd67c66-78f4-4deb-a3bf-c7b0b07504f3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000011, z: -0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4756a1da-6124-4cbb-af0c-1631649652f6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000004, y: 11.453500, z: 0.000011} + rotation: {x: -10.793700, y: -13.884800, z: 21.429600} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 93d669d1-3439-4d61-ab72-99f1c6f76a81 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.017407, y: 3.481390, z: 0.001771} + rotation: {x: -8.084740, y: -0.103266, z: -0.728726} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! db9cf02a-a38c-47aa-b059-2faab8f74c75 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000006, y: -0.000002, z: -0.000000} + rotation: {x: 157.399994, y: -83.865097, z: 115.817001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 37803923-6d4a-4268-aba1-ef5d1d23cd46 + - ! fd649b68-8f72-465f-baa6-ceef905acca1 + - ! 4ca9e76a-f818-4a4f-954e-2777667c610a + - ! e8f1e2a0-17f6-445d-ad3b-100743436988 + - ! 24d70dc1-4597-48e0-9370-c6e9293594d4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.519322, y: -5.969350, z: -5.521840} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 283ab8bc-80c5-48db-8f22-6b4ab6e6cffe + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! d6371ebf-1d3b-4bfa-bdd8-c0a7fabf8f39 +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: true + ScriptAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + ScriptInputsDefault: + _beginColor: true + _endColor: true + lineWidth: true + lineLength: true + lineStyle: true + shouldStick: true + _interactor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + lineMaterial: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + _beginColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _endColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + lineWidth: 0.500000 + lineLength: ! 160.000000 + lineStyle: ! 2.000000 + shouldStick: true + _interactor: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 26.024099, y: -37.686901, z: 24.403400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3ab55c9b-dd82-4532-943e-d1df8f009177 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000005, y: 4.399180, z: -0.000010} + rotation: {x: -1.007350, y: 44.900501, z: -1.551620} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e417673c-029b-4df2-b240-55edb111620f + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000001} + rotation: {x: 0.000101, y: -0.000115, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 02d483b7-4973-456a-94a1-5973d02ed09f + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[OPTIONAL] Visuals" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 94f70a69-9105-4332-988c-b375881b7bd9 + - ! b3bcf351-f103-47df-a4e8-fd46dbd2a734 + - ! edcde6ca-b40c-4768-a7d2-dd31da71277a + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.009134, y: 2.837150, z: 0.000078} + rotation: {x: -87.845497, y: -5.462180, z: -5.671890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 95dea6d2-2c8c-477b-a1f3-e372e02e6a0b + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 11.787900, z: -0.000005} + rotation: {x: 0.059034, y: 19.848200, z: -15.906400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 32b9372e-60ad-430c-87fe-a43f6258b4e5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fb7196a9-d764-4f20-bf77-8d5722266d27 + - ! efcdb1e4-82aa-48d7-adff-ea83aadec8f0 + Components: + - ! e3a7a944-c642-433e-b640-41b775d7e247 +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: -0.000003} + rotation: {x: 0.000050, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1e231994-34a6-48c1-94ee-339987f113c7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000006, y: -0.000000, z: -0.000002} + rotation: {x: -176.654007, y: -5.519800, z: -92.680099} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a227f4f5-bb8b-4083-8ff3-76b300794afe + - ! 96aa9a5e-354d-415a-ac80-5442481fec05 + - ! 341ee23b-b82c-4f55-b23d-193c0df5c016 + - ! 7ca6c509-63a2-4a25-877e-e28ae50f4f4f + - ! 6f03f0b2-6d81-4bc9-a49b-6d387e0245ff + Components: + [] +- ! + PrefabRemaps: + [] + Name: SpectaclesInteractionKit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c4bd0335-b377-414d-8521-c473e35c5774 + - ! 3b885064-9472-4754-9b78-42ff961487b9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166710, z: -0.000003} + rotation: {x: -180.000000, y: -0.000000, z: -180.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cb9bed1c-7640-4b13-9103-67d3e3ae7401 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.519104, y: -5.758140, z: 5.627940} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2536fae3-02cb-4aa5-8c55-952afc929db0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000009, y: 4.399180, z: 0.000004} + rotation: {x: 1.097870, y: 44.900902, z: 1.556590} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0b203467-22aa-4c6c-a7de-22b8f87e0ad6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.122141, y: 3.547710, z: 0.009542} + rotation: {x: -59.788200, y: 5.800900, z: 165.218002} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ea14478c-a162-45e4-a7a7-af2ac18b7d4c + Components: + [] +- ! + PrefabRemaps: + [] + Name: CursorController + Enabled: true + ScriptAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.010478, y: 3.166710, z: 0.000270} + rotation: {x: -86.458298, y: -5.335180, z: -5.675670} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0003afb6-e082-42ab-b89f-d22eb256f228 + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: left + selectVisual: Default + handInteractor: ! b935b9b7-3c38-42b9-8045-c6609e019a8f + handMesh: ! eb708bc5-ef13-451c-b7b2-46398c05d999 + root: ! 1d1c8de5-b019-4d0a-adc6-1ad389890762 + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703720, z: -0.000000} + rotation: {x: 0.000283, y: 0.000276, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d0f8de20-470a-4599-b195-7ae175fbfc78 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008175, y: 2.218150, z: 0.000011} + rotation: {x: 83.677002, y: -4.512030, z: -172.722000} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 28b286b8-7e97-4ed0-bbce-b813966137ff + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.017495, y: 3.481400, z: 0.000180} + rotation: {x: -8.118590, y: -0.000575, z: 0.000047} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ce6d11c6-be32-4e32-b7b8-6c199feef4ea + Components: + [] +- ! + PrefabRemaps: + [] + Name: SIKLogLevelConfiguration + Enabled: true + ScriptAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + ScriptInputsDefault: + _debugModeEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + logLevelFilter: 3 + _debugModeEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: LeftHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + - ! 33423227-0e0f-43a6-a69d-a713b9653e99 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: -0.000113, y: -0.000000, z: -0.000031} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c609db94-d0da-4230-a62a-7f71134c5356 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 055525b2-7c1a-4f70-9358-23e0d7d156b8 +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000007, y: 11.453500, z: 0.000008} + rotation: {x: 1.584790, y: -17.344000, z: -21.859100} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cfce736c-a49b-4a3e-947a-32a8e98a4961 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.918454, y: 18.264400, z: 17.580700} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6b721f55-2fde-4515-8a98-e0623db0c62c + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.192403, y: 6.380900, z: 6.216870} + scale: {x: 1.000000, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1573681c-afad-4710-bf30-13ab306587e0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002705, y: 3.534420, z: 0.000029} + rotation: {x: 1.238160, y: -0.000262, z: -0.000026} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0d34b376-2158-453b-931e-0189d0cf2dfa + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.054883, y: 3.957040, z: -0.000166} + rotation: {x: -2.622440, y: -0.000180, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f4788f9e-4139-4eef-90bc-771177044cd8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002705, y: 3.534420, z: -0.000008} + rotation: {x: 1.238040, y: -0.000494, z: 0.017060} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 24d6dc84-ed70-4a53-a3c4-9224488ec60a + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8f5b51cb-131a-42fa-9ea7-67cee50d6af2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703720, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002905, y: 3.650320, z: -0.000094} + rotation: {x: -2.676470, y: 0.000075, z: -0.000412} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5a63eead-ba79-4ecd-b8cd-509fbea8a4f2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002793, y: 3.304380, z: 0.000052} + rotation: {x: 1.238250, y: -0.000460, z: 0.010196} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0f43b8a1-5f63-44c3-9ba0-32318363dc57 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001444, y: 2.703720, z: 0.000001} + rotation: {x: 88.027298, y: -5.497920, z: 5.333360} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c6e2a5f7-ab1a-4d18-a9d6-a0cd79b37fa7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisuals + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 22806c77-18d4-41eb-81b3-b85d1228c059 + - ! b0e47302-1cbb-4346-a62f-8e341c73f7b5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.013405, y: 3.861870, z: 0.000233} + rotation: {x: -4.535240, y: -0.003456, z: -0.026343} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 15d70faf-f504-434b-bc7b-bb474fac2980 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: -0.000002} + rotation: {x: -0.000039, y: -0.000040, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! faaefd86-d1ae-4d56-a280-766a06b98cf6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: -0.000003} + rotation: {x: 0.000035, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4b527cf4-3e27-4559-b291-0a0b985b4717 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.143142, y: -18.425200, z: -17.556000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cb2a32d4-1a84-411d-aa42-bf42bfa144e4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.824800, z: 0.000000} + rotation: {x: -4.158420, y: -5.389360, z: 8.544330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 822c9dec-583d-4588-bf8f-9e76769d9791 + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 34e94d3a-2900-4f04-bbdd-8be35309a24f +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000025} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 12549dba-74cb-48d3-a50f-73daa0d64196 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + ScriptAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: true + touchpadDragThreshold: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + spherecastDistanceThresholds: ! + - 0.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: ! 250.000000 + touchpadDragThreshold: 0.050000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 27.434401, y: -41.097198, z: -59.864601} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 4f009679-ee66-4a0c-8747-6163b9934265 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.166710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000019, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 95f1c1ea-6b70-4e98-80bd-216ce18becb4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000001, z: -0.000001} + rotation: {x: -90.000000, y: -0.000000, z: -0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eb708bc5-ef13-451c-b7b2-46398c05d999 +- ! + PrefabRemaps: + [] + Name: RightHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa + Components: + - ! 0465eda0-f2a8-46a0-89bf-aec9d8b8da01 +- ! + PrefabRemaps: + [] + Name: InteractorCursors + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 5197ee39-b38d-42eb-8c32-d9938bfefb40 +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: left + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.005382, y: 2.681950, z: -0.000140} + rotation: {x: -5.666390, y: -0.000025, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! db24ae45-9fd3-4bac-a406-0cad45a3f045 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: -0.000002} + rotation: {x: 0.000000, y: 0.000028, z: 0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ae4a9bad-4c46-4bf3-8553-28e8b9416cce + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000002} + rotation: {x: -0.000076, y: -0.000000, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7976d725-6d53-4c31-a2c3-f96d25c2b921 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549800, z: -0.000001} + rotation: {x: 0.000059, y: -0.000014, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bf692fb0-1af3-476e-97cd-092308e529f6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[REQUIRED] Core" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 24b98cd7-d5a4-4872-b17b-a6bea152b437 + - ! d1349dfb-66e5-406a-bab7-cbedc09f0583 + - ! 345fde54-ce8d-467e-bc01-3c54e0129ca0 + - ! 682266ba-13a1-48d4-92fd-608428328dfc + - ! f08c52f6-14c2-4ded-be77-3a2b3f47c577 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: 0.000189, y: -0.000000, z: 0.000044} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c224f6fa-05b2-43d9-b45b-0050539a4688 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000002} + rotation: {x: -0.000202, y: -0.000189, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5cc46581-44dd-43e4-a2c1-e2bd294a97e6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ConfigurationValidator + Enabled: true + ScriptAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000003, y: 11.787900, z: -0.000003} + rotation: {x: 9.215320, y: 17.707500, z: 16.168699} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 633241a4-412e-4a33-acb2-8487ae2291c9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008392, y: 3.222930, z: -0.000121} + rotation: {x: -0.204897, y: -0.651952, z: -2.287250} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3c0c8d96-d019-421b-8641-2f6c4fef657f + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002791, y: 3.304380, z: 0.000029} + rotation: {x: 1.238300, y: 0.000079, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bb7fd053-b7b8-4148-9784-7a4ecfe99c2b + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000001} + rotation: {x: -0.000081, y: -0.000080, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 87b21f5e-7b4d-4754-af21-4925af99ffb4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b935b9b7-3c38-42b9-8045-c6609e019a8f +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + handType: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: right + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008174, y: 2.218150, z: 0.000077} + rotation: {x: 84.965103, y: 6.336930, z: -173.675003} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3b52e609-bccb-4474-8396-af04afb47613 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008350, y: 3.222920, z: -0.000875} + rotation: {x: -0.656684, y: 0.000193, z: -0.059364} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 12ba946a-1a8e-4e95-87e5-087ec0b249cc + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000001} + rotation: {x: 0.000103, y: 0.000102, z: 0.000010} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 224e1b84-2cd6-40dc-8b4d-39e26681bfd1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549810, z: -0.000001} + rotation: {x: 0.000118, y: -23.667299, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0473b266-866f-4f68-af21-9d3530e1914f + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + ring-2: ! 0d34b376-2158-453b-931e-0189d0cf2dfa + pinky-1: ! cfce736c-a49b-4a3e-947a-32a8e98a4961 + pinky-3_end_end_end: ! 04ac8134-d110-4511-b25a-891f2f66584b + ring-1: ! 7f240caf-60c7-4d5e-b716-5090899a20ce + RightHandModel: ! 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa + index-3: ! 3c0c8d96-d019-421b-8641-2f6c4fef657f + wrist_to_ring: ! 7ca6c509-63a2-4a25-877e-e28ae50f4f4f + index-1: ! 633241a4-412e-4a33-acb2-8487ae2291c9 + pinky-2: ! bb7fd053-b7b8-4148-9784-7a4ecfe99c2b + index-0: ! cb2a32d4-1a84-411d-aa42-bf42bfa144e4 + ring-3_end_end_end: ! d0f8de20-470a-4599-b195-7ae175fbfc78 + RightHandMesh: ! efcdb1e4-82aa-48d7-adff-ea83aadec8f0 + wrist_to_thumb: ! a227f4f5-bb8b-4083-8ff3-76b300794afe + index-3_end_end_end: ! 861c2385-029b-4a3f-bb80-aad4ce6de18d + mid-3: ! 5a63eead-ba79-4ecd-b8cd-509fbea8a4f2 + index-3_end: ! 95dea6d2-2c8c-477b-a1f3-e372e02e6a0b + index-3_end_end: ! faaefd86-d1ae-4d56-a280-766a06b98cf6 + pinky-0: ! 6b721f55-2fde-4515-8a98-e0623db0c62c + pinky-3: ! db24ae45-9fd3-4bac-a406-0cad45a3f045 + mid-1: ! 1abd5650-e4e3-4218-9dfe-2d518a0b161b + mid-3_end: ! 0003afb6-e082-42ab-b89f-d22eb256f228 + thumb-3_end_end_end: ! bf692fb0-1af3-476e-97cd-092308e529f6 + ring-0: ! 1573681c-afad-4710-bf30-13ab306587e0 + mid-3_end_end: ! e0925a50-c8a1-4759-9d26-eac6079b1fdb + mid-3_end_end_end: ! 224e1b84-2cd6-40dc-8b4d-39e26681bfd1 + RightHandRig: ! fb7196a9-d764-4f20-bf77-8d5722266d27 + mid-3_end_end_end_end: ! 59d49307-84ec-4eb8-aa0f-22f915eb8a4f + pinky-3_end: ! 3b52e609-bccb-4474-8396-af04afb47613 + wrist_to_index: ! 96aa9a5e-354d-415a-ac80-5442481fec05 + thumb-3_end_end: ! c3c87762-eca6-4731-87a2-f7596e7c0479 + pinky-3_end_end_end_end: ! 7e835154-746f-4b08-a586-447595fc19a1 + ring-3_end: ! c6e2a5f7-ab1a-4d18-a9d6-a0cd79b37fa7 + mid-0: ! 283ab8bc-80c5-48db-8f22-6b4ab6e6cffe + ring-3_end_end_end_end: ! 87b21f5e-7b4d-4754-af21-4925af99ffb4 + ring-3_end_end: ! 5cc46581-44dd-43e4-a2c1-e2bd294a97e6 + thumb-0: ! 4f009679-ee66-4a0c-8747-6163b9934265 + thumb-3_end: ! eafdc1ea-a52b-486f-af4a-13a4f947b89f + thumb-1: ! 0b203467-22aa-4c6c-a7de-22b8f87e0ad6 + ring-3: ! 94200c52-425a-43b6-8893-512b230a7726 + thumb-2: ! 81d57b7d-0209-4404-a775-f7ef13ad4f97 + wrist: ! 47ceb1fa-65b6-498e-af35-6f5af78c2618 + thumb-3: ! f4788f9e-4139-4eef-90bc-771177044cd8 + mid-2: ! 8d2fc7e4-0fe6-43d2-b837-fbe1aa318543 + wrist_to_mid: ! 341ee23b-b82c-4f55-b23d-193c0df5c016 + pinky-3_end_end: ! 02d483b7-4973-456a-94a1-5973d02ed09f + index-3_end_end_end_end: ! 8f5b51cb-131a-42fa-9ea7-67cee50d6af2 + index-2: ! ce6d11c6-be32-4e32-b7b8-6c199feef4ea + thumb-3_end_end_end_end: ! ae4a9bad-4c46-4bf3-8553-28e8b9416cce + wrist_to_pinky: ! 6f03f0b2-6d81-4bc9-a49b-6d387e0245ff +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.067402, y: 3.518870, z: -0.005366} + rotation: {x: 14.034800, y: -0.274095, z: 1.092330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 009892ac-73e5-4967-bd85-efc71c49f0a7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.192331, y: 6.274080, z: -6.174470} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9c6e9559-53cb-4842-afc9-a9cf725bce0a + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: -0.000001} + rotation: {x: -0.000121, y: 23.491301, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e3a03ad7-eb65-485e-86e0-cd9f0e93e442 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000001} + rotation: {x: -0.000096, y: -0.000037, z: 0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c3c87762-eca6-4731-87a2-f7596e7c0479 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + Mesh: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + Skin: ! 1f7bf313-445c-40f6-92ad-a40a50dea575 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "[LEGACY] InteractorLineVisual" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9f23857f-0354-4c96-a54d-0a74653401b0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000000, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a0534ec9-6292-40ec-b6cd-859f7738f85f + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1907c2c5-2d81-47ce-96c9-eeb579299134 +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a216ab78-0022-4fc2-96cf-862ffa9f0371 +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.122509, y: 3.547690, z: -0.000037} + rotation: {x: -119.537003, y: -11.132400, z: -6.501390} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! eafdc1ea-a52b-486f-af4a-13a4f947b89f + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000000} + rotation: {x: 0.000038, y: 0.000042, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 861c2385-029b-4a3f-bb80-aad4ce6de18d + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 47ceb1fa-65b6-498e-af35-6f5af78c2618 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.140613, y: -15.148800, z: 17.637899} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 42c8f113-929e-4b03-b3c0-1e0908941234 + Components: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab.meta new file mode 100644 index 00000000..8c6c5829 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Prefabs/SpectaclesInteractionKit.prefab.meta @@ -0,0 +1,2420 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! f8de076e-14c5-4869-815e-97dfb35529e7 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! f8de076e-14c5-4869-815e-97dfb35529e7 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + ObjectPrefab: ! d6b19b5c-56aa-439c-a1e7-b42fc1dd6fe0 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.192331, y: 6.274080, z: -6.174470} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5f20ec08-c7cd-4675-a48d-dd74968ec4d7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: SpectaclesInteractionKit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 93827cc5-a953-4861-9d1e-712b132f6619 + - ! eb56a3b1-17bf-4627-b5ef-a29c12868072 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.009104, y: 2.837160, z: -0.000745} + rotation: {x: -88.447800, y: 0.630570, z: -5.443090} + scale: {x: 1.000000, y: 1.000000, z: 0.999998} + hasSegmentScaleCompensation: false + Children: + - ! d9b7ee8e-a9c5-40d6-8279-4eec31980ab9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549800, z: -0.000001} + rotation: {x: 0.000059, y: -0.000014, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d891d276-efe1-4c8f-8b7e-95cd79b35364 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000002} + rotation: {x: -0.000202, y: -0.000189, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b91c0fb4-d739-4f27-beea-85ae77c565ea + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.483000, z: -0.000001} + rotation: {x: 1.265800, y: 6.113890, z: -3.274570} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1ec73053-c75c-4fcc-b889-08cc253455e4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: -0.000002} + rotation: {x: -0.000039, y: -0.000040, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e83abff0-fe19-4f02-b359-a06ae14818f4 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03d33697-6495-4e15-9a2d-646411a514a9 + Mesh: ! 735f7248-824f-40d5-8573-c0cfbbd03abf + Skin: ! ad116ad3-df03-44cd-be5b-a808d805a902 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002705, y: 3.534420, z: -0.000008} + rotation: {x: 1.238040, y: -0.000494, z: 0.017060} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e70fca4c-df37-4119-a16b-8ca809738fca + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002793, y: 3.304380, z: 0.000052} + rotation: {x: 1.238250, y: -0.000460, z: 0.010196} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bc738d9f-a07b-4015-9609-391efdb5b21c + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.013405, y: 3.861870, z: 0.000233} + rotation: {x: -4.535240, y: -0.003456, z: -0.026343} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f36adf2b-cb0d-4d17-8032-92a357188727 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 0.905911, y: 15.703600, z: -17.047701} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2114ca63-5b0d-4f5a-bb57-2480824e7ee3 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000004, y: 11.453500, z: 0.000011} + rotation: {x: -10.793700, y: -13.884800, z: 21.429600} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1da287aa-43af-4c07-9327-03ba984fc4d0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b9163dbc-0b8d-4ce5-88ac-0c2eb657f98e + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4a011e45-fd0b-400a-b2fa-4170f9c1f62c +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.122509, y: 3.547690, z: -0.000037} + rotation: {x: -119.537003, y: -11.132400, z: -6.501390} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 834269e4-4713-4a65-a39f-f1dc8474fa26 + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + - ! f950caaf-d491-4bf6-968e-01dfa516e7f2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_pinky + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.918454, y: 18.264400, z: 17.580700} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b98ed8aa-adb8-4a90-8497-82f509e93c49 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000025} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 482e497b-046d-4e69-8fde-d6c9753e7b46 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ConfigurationValidator + Enabled: true + ScriptAsset: ! 287c2824-8220-4e9e-8ac8-18a7e8a5aad0 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: left + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: ring-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002705, y: 3.534420, z: 0.000029} + rotation: {x: 1.238160, y: -0.000262, z: -0.000026} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b520cb8c-f8f6-4edd-bdf6-03f955679e98 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.067402, y: 3.518870, z: -0.005366} + rotation: {x: 14.034800, y: -0.274095, z: 1.092330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b0a52483-9a6e-49d0-8a06-c12f4b9e24a6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: 26.024099, y: -37.686901, z: 24.403400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6326ecaf-c4e6-470d-b024-42b0245d8718 + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000001, z: -0.000001} + rotation: {x: -90.000000, y: -0.000000, z: -0.000000} + scale: {x: 0.999999, y: 0.999999, z: 0.999999} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 640f142e-9401-4452-a70a-6b84ee9fdeb7 +- ! + PrefabRemaps: + [] + Name: thumb-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.122141, y: 3.547710, z: 0.009542} + rotation: {x: -59.788200, y: 5.800900, z: 165.218002} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3ecb5e79-4d94-4343-bc62-2002be78d9f0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000000, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2d4fb431-a418-4924-89f2-c32b3b520ede + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandInteractor + Enabled: true + ScriptAsset: ! b5f70408-5d57-4afd-996b-8f26ae0ddcb2 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + handType: true + raycastAlgorithm: true + forcePokeOnNonDominantPalmProximity: true + directColliderEnterRadius: true + directColliderExitRadius: true + directDragThreshold: true + filterBasedOnIntent: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 40.000000 + handType: right + raycastAlgorithm: Proxy + forcePokeOnNonDominantPalmProximity: false + directColliderEnterRadius: ! 1.000000 + directColliderExitRadius: 1.500000 + directDragThreshold: ! 3.000000 + filterBasedOnIntent: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002791, y: 3.304380, z: 0.000029} + rotation: {x: 1.238300, y: 0.000079, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3f6c1960-0f45-4a3a-9e7e-a67447b2d019 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: -0.000001} + rotation: {x: -0.000121, y: 23.491301, z: -0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b9d4f202-03f8-460c-b0af-61fc4c356c5c + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.005382, y: 2.681950, z: -0.000140} + rotation: {x: -5.666390, y: -0.000025, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 47b62922-d592-4f29-b3bd-8031ea360e98 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: -0.000051, y: -0.000000, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e3926e34-9003-408a-9cf0-f6ab2750b97f + Components: + [] +- ! + PrefabRemaps: + [] + Name: CursorController + Enabled: true + ScriptAsset: ! b1bd344a-41d1-4a26-bbbb-6c15ab434046 + ScriptInputsDefault: + {} + ScriptTypesDefault: + {} + ScriptInputs: + "": + {} + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: RightHandRig + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! eaf6d31c-4150-47c2-a9f3-16b26fdf82eb + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_thumb + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 27.434401, y: -41.097198, z: -59.864601} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fd7e7c10-1fde-45fb-b4ae-1b29c7fc3a28 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + mid-3_end_end_end_end: ! d866260d-fbe6-4b19-ba62-96567884b87d + LeftHandRig: ! 2404fd9a-4d48-458a-af02-94d4fd666077 + ring-2: ! e70fca4c-df37-4119-a16b-8ca809738fca + LeftHandModel: ! f0d6b0fb-62e3-448a-87ee-f6527258390d + pinky-1: ! 1da287aa-43af-4c07-9327-03ba984fc4d0 + pinky-3_end_end_end: ! 410e0d34-e8a4-4dc0-875a-e2893f97702d + ring-1: ! 183f5ed1-ec6e-49c9-8603-fdb5efd6790c + index-3: ! 060bda29-936e-409f-9291-aa232716f91b + wrist_to_ring: ! 0062ad6f-4a1a-4cdc-8fc1-ab49a2f34df9 + index-1: ! 93bed319-009f-450a-b7e0-e1e8b1830ea6 + pinky-2: ! bc738d9f-a07b-4015-9609-391efdb5b21c + index-0: ! 8212a3e5-e939-4eae-81e1-3fbc741c95ae + LeftHandMesh: ! 331cbff3-d65c-4a7d-9b14-0e424d4354ef + wrist_to_pinky: ! 1fd76f2b-2db3-411e-b7ee-c216f1a543a5 + wrist_to_thumb: ! 31bbb94e-8380-4021-ad81-85aa0a52da17 + index-3_end_end_end: ! 47c9a311-024f-4ffb-9021-cd1ee3bf81f7 + mid-3: ! ee338c45-02a9-4b91-b1db-f0f2e7f0c561 + index-3_end: ! d9b7ee8e-a9c5-40d6-8279-4eec31980ab9 + index-3_end_end: ! de60f119-8912-4dec-a8ee-714862f51e6b + pinky-0: ! 2114ca63-5b0d-4f5a-bb57-2480824e7ee3 + pinky-3: ! a34eb85f-5004-458c-a961-3569f71c96f6 + mid-1: ! 1ec73053-c75c-4fcc-b889-08cc253455e4 + thumb-3_end_end_end: ! 682c3de5-d653-44f1-b50a-3da29b927a87 + mid-3_end: ! c3ee4ba4-011e-4330-afeb-24e145dd5116 + mid-3_end_end: ! a5231166-3231-4b80-90b0-d0d576f4a0b7 + ring-0: ! 5f20ec08-c7cd-4675-a48d-dd74968ec4d7 + pinky-3_end: ! 7e8d8d02-2e8a-4b6d-a022-e1d1e34c395f + wrist_to_index: ! b824f2d7-9d96-4eb6-9f78-10dc5c2cbce4 + thumb-3_end_end: ! b9d4f202-03f8-460c-b0af-61fc4c356c5c + mid-0: ! 0c0b7cf8-63f8-4e52-a7a1-931f010669dc + ring-3_end_end_end_end: ! d13c9101-7032-4b19-86a3-4b69f740e46e + ring-3_end: ! 369309c5-6526-47d6-bb4a-a525ea0fc08e + pinky-3_end_end_end_end: ! e3926e34-9003-408a-9cf0-f6ab2750b97f + mid-3_end_end_end: ! 78aa1ef6-c348-457f-93f6-e7c23310e27a + thumb-2: ! b0a52483-9a6e-49d0-8a06-c12f4b9e24a6 + ring-3: ! a598f236-79f6-4635-a26a-b69122522a2a + ring-3_end_end: ! 2d4fb431-a418-4924-89f2-c32b3b520ede + thumb-0: ! 6326ecaf-c4e6-470d-b024-42b0245d8718 + thumb-3_end: ! 3ecb5e79-4d94-4343-bc62-2002be78d9f0 + thumb-1: ! 308dd5bc-51d0-4738-a645-c4c3ff302414 + wrist: ! f950caaf-d491-4bf6-968e-01dfa516e7f2 + thumb-3: ! 35da746a-ca69-4900-aec8-7bea24f0d256 + mid-2: ! f36adf2b-cb0d-4d17-8032-92a357188727 + wrist_to_mid: ! b42d213a-f443-416e-89e7-cf0148cd7acd + index-3_end_end_end_end: ! 870d7e36-4128-4081-829f-ddb761dc5018 + index-2: ! 9fa8beeb-7a11-4fe0-93bf-e98462f57da9 + ring-3_end_end_end: ! 482e497b-046d-4e69-8fde-d6c9753e7b46 + thumb-3_end_end_end_end: ! c5073def-68b1-4a34-9dd4-e6699cd79ffc + pinky-3_end_end: ! e5233629-fb2f-40a0-a5fd-8ecd69f340b9 +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008174, y: 2.218150, z: 0.000077} + rotation: {x: 84.965103, y: 6.336930, z: -173.675003} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b587f0ee-51b5-4976-acc9-551774f7d888 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000002} + rotation: {x: -0.000076, y: -0.000000, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 870d7e36-4128-4081-829f-ddb761dc5018 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703710, z: 0.000001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d13c9101-7032-4b19-86a3-4b69f740e46e + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractorLineVisual + Enabled: true + ScriptAsset: ! a6105daf-0f11-45a0-8684-102e44534dbb + ScriptInputsDefault: + _beginColor: true + _endColor: true + lineWidth: true + lineLength: true + lineStyle: true + shouldStick: true + _interactor: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + lineMaterial: ! 9fc7f9a1-6d20-4e6a-9c4a-268d15228b42 + _beginColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + _endColor: ! {x: 1.000000, y: 1.000000, z: 0.000000} + lineWidth: 0.500000 + lineLength: ! 160.000000 + lineStyle: ! 2.000000 + shouldStick: true + _interactor: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.519322, y: -5.969350, z: -5.521840} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5a579b8e-b19b-4633-b158-c901f25d5736 + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 38e72372-f5c5-4c5e-888e-003531bd745b +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.054883, y: 3.957040, z: -0.000166} + rotation: {x: -2.622440, y: -0.000180, z: -0.000073} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2272f138-1ad5-43dc-916b-fd4c339c5fe2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.067615, y: 3.518870, z: 0.000095} + rotation: {x: 14.081600, y: -0.000034, z: -0.000013} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 54b6d990-d4c4-44c0-ba50-408f293488c5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: right + selectVisual: Default + handInteractor: ! 38e72372-f5c5-4c5e-888e-003531bd745b + handMesh: ! 15198c7d-b87d-41f2-8a03-ebb1e502aa85 + root: ! feac871f-6262-41f8-97ba-c15238ce8cc6 + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! 7c9de503-f8ed-4070-be89-238d9e1c76df + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: mid-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.483100, z: -0.000001} + rotation: {x: 1.935390, y: 5.930260, z: 3.282900} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9b6e6700-d085-4c9b-bf53-01d5d03c2dc0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000002} + rotation: {x: -0.000207, y: -0.000205, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 94e3e569-4319-4c8c-9bd5-650348544f8f + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! feac871f-6262-41f8-97ba-c15238ce8cc6 + Components: + - ! 59d61410-e6bd-447d-b83d-7b0c75236471 +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 11.824800, z: 0.000000} + rotation: {x: -4.158420, y: -5.389360, z: 8.544330} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 183f5ed1-ec6e-49c9-8603-fdb5efd6790c + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandVisual + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f0d6b0fb-62e3-448a-87ee-f6527258390d + Components: + - ! bb815606-a6d2-4f9a-b9fa-94569776ccab +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + ScriptAsset: ! d81defaa-c407-472a-8de6-a4a6cc16eeb1 + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: true + touchpadDragThreshold: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + spherecastDistanceThresholds: ! + - 0.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + initializePositionAndRotationFilter: true + _touchpadScrollSpeed: ! 250.000000 + touchpadDragThreshold: 0.050000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000005, y: 4.399180, z: -0.000010} + rotation: {x: -1.007350, y: 44.900501, z: -1.551620} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 308dd5bc-51d0-4738-a645-c4c3ff302414 + Components: + [] +- ! + PrefabRemaps: + [] + Name: RightHandMesh + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 15198c7d-b87d-41f2-8a03-ebb1e502aa85 +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 9999 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4254844d-aef9-45e9-87f1-d6ab7d608c4f + Mesh: ! b2d2360c-44b0-4f99-a5ad-3651706e0e4b + Skin: ! 44036629-a264-4199-8275-e8d9e15d2c81 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: -0.000148, y: 0.000148, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6faee649-ed0b-4314-bed1-aacea04f483a + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.549810, z: -0.000001} + rotation: {x: -0.000000, y: 0.176026, z: -0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c5073def-68b1-4a34-9dd4-e6699cd79ffc + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.017495, y: 3.481400, z: 0.000180} + rotation: {x: -8.118590, y: -0.000575, z: 0.000047} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d9e9abfe-4a79-49f9-b76f-01081a3d3200 + Components: + [] +- ! + PackagePath: "" + objects: + - ! 052dbda9-c01c-4ca0-8511-db2143375eb3 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000000} + rotation: {x: 0.000104, y: 0.000103, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 031ccedd-33fb-4007-b792-10bc2e9d4087 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166710, z: -0.000003} + rotation: {x: -180.000000, y: -0.000000, z: -180.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d866260d-fbe6-4b19-ba62-96567884b87d + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b9e3a6d6-0f12-4900-bd2b-35f10e31d2d8 +- ! + PrefabRemaps: + [] + Name: ring-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 11.824800, z: -0.000000} + rotation: {x: -2.274930, y: -6.337840, z: -8.604530} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2f1618ae-bd43-45d2-a41c-444eae9d5ffd + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000011, z: -0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! e5233629-fb2f-40a0-a5fd-8ecd69f340b9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MobileInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 60bb00dc-b347-4567-a739-58f0acab4157 +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 11.787900, z: -0.000005} + rotation: {x: 0.059034, y: 19.848200, z: -15.906400} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 93bed319-009f-450a-b7e0-e1e8b1830ea6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000001} + rotation: {x: -0.000096, y: -0.000037, z: 0.000014} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 08071ebb-7cc0-4a08-a8df-ee830ef64807 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837170, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: InteractorCursors + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4125c3d2-ec27-488f-8b1d-d20de29a726b +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.002905, y: 3.650320, z: -0.000094} + rotation: {x: -2.676470, y: 0.000075, z: -0.000412} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d7b16828-692e-4922-b452-d17f7883a069 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[REQUIRED] Core" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fe279d3e-e1cc-4ae7-bde8-29ee3c3c49ba + - ! fc2d5d8d-8022-4353-9682-ff798013cc6a + - ! 5029a531-ba49-41be-b8fe-c00098aa6b63 + - ! 7d6a07d3-5dbf-430e-8c19-edba2edf9307 + - ! 816c9dd2-c308-42ea-9bdb-e858f6f8e6d8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.017407, y: 3.481390, z: 0.001771} + rotation: {x: -8.084740, y: -0.103266, z: -0.728726} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9fa8beeb-7a11-4fe0-93bf-e98462f57da9 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.166730, z: 0.000001} + rotation: {x: 0.000103, y: 0.000102, z: 0.000010} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 777d46ee-e102-4218-8bf6-08271ca2483d + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703730, z: -0.000001} + rotation: {x: -0.000081, y: -0.000080, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! aa7644ab-25d9-4d52-8199-92caa4f5606d + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-1 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.013406, y: 3.861870, z: 0.000154} + rotation: {x: -4.535300, y: 0.000290, z: 0.000017} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 93429404-f9b4-4265-a2b0-37842d963643 + Components: + [] +- ! + PrefabRemaps: + [] + Name: HandVisuals + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6045b931-e0bd-40c1-8d57-ff06b391b012 + - ! 5c871db5-65b3-4070-85a9-3c449e044310 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_ring + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: 0.192403, y: 6.380900, z: 6.216870} + scale: {x: 1.000000, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7def0c43-f87f-40bf-8090-7d2d350c0a78 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008350, y: 3.222920, z: -0.000875} + rotation: {x: -0.656684, y: 0.000193, z: -0.059364} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 060bda29-936e-409f-9291-aa232716f91b + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.009134, y: 2.837150, z: 0.000078} + rotation: {x: -87.845497, y: -5.462180, z: -5.671890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1034f3ac-3b9a-4339-b10f-a0fab01464fb + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.008175, y: 2.218150, z: 0.000011} + rotation: {x: 83.677002, y: -4.512030, z: -172.722000} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 7e8d8d02-2e8a-4b6d-a022-e1d1e34c395f + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: -0.000003} + rotation: {x: 0.000035, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 78aa1ef6-c348-457f-93f6-e7c23310e27a + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001444, y: 2.703710, z: 0.000020} + rotation: {x: 88.973000, y: 4.975880, z: 4.973150} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 369309c5-6526-47d6-bb4a-a525ea0fc08e + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: -0.000006, z: 0.000002} + rotation: {x: -0.143142, y: -18.425200, z: -17.556000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c4e3997b-1080-444c-8ac0-1fec1f541de2 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703720, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + skinBones: + ring-2: ! b520cb8c-f8f6-4edd-bdf6-03f955679e98 + pinky-1: ! 3c63b5c3-a5ad-49e0-bb20-2c8f1a634997 + pinky-3_end_end_end: ! 6729a2b6-bfa6-49d1-a1fc-8d6176f3947e + ring-1: ! 2f1618ae-bd43-45d2-a41c-444eae9d5ffd + RightHandModel: ! feac871f-6262-41f8-97ba-c15238ce8cc6 + index-3: ! a2b5e657-6fa1-4495-98e6-42bb0d87221a + wrist_to_ring: ! 9df82503-d84d-4fdb-b6ee-c00416e32ec5 + index-1: ! 73f2bd45-f861-4f03-bc1e-c5653210cb02 + pinky-2: ! 3f6c1960-0f45-4a3a-9e7e-a67447b2d019 + index-0: ! c4e3997b-1080-444c-8ac0-1fec1f541de2 + ring-3_end_end_end: ! 95982089-4063-492d-881c-0204c00e65eb + RightHandMesh: ! 63f04c53-0714-469c-94fb-2e0a291fea73 + wrist_to_thumb: ! 43180266-1424-4c20-85e8-49a4ac3fc737 + index-3_end_end_end: ! 2116c8da-6381-4d9b-a4a9-7190f8588592 + mid-3: ! d7b16828-692e-4922-b452-d17f7883a069 + index-3_end: ! 1034f3ac-3b9a-4339-b10f-a0fab01464fb + index-3_end_end: ! e83abff0-fe19-4f02-b359-a06ae14818f4 + pinky-0: ! b98ed8aa-adb8-4a90-8497-82f509e93c49 + pinky-3: ! 47b62922-d592-4f29-b3bd-8031ea360e98 + mid-1: ! 9b6e6700-d085-4c9b-bf53-01d5d03c2dc0 + mid-3_end: ! 5b23233d-9716-4fbb-941b-fdd02594cce0 + thumb-3_end_end_end: ! d891d276-efe1-4c8f-8b7e-95cd79b35364 + ring-0: ! 7def0c43-f87f-40bf-8090-7d2d350c0a78 + mid-3_end_end: ! 94e3e569-4319-4c8c-9bd5-650348544f8f + mid-3_end_end_end: ! 777d46ee-e102-4218-8bf6-08271ca2483d + RightHandRig: ! 42ddc92b-e779-412b-9f91-8457277af637 + mid-3_end_end_end_end: ! 031ccedd-33fb-4007-b792-10bc2e9d4087 + pinky-3_end: ! b587f0ee-51b5-4976-acc9-551774f7d888 + wrist_to_index: ! aa0496a3-fcdd-4c2b-9a6d-07653422d537 + thumb-3_end_end: ! 08071ebb-7cc0-4a08-a8df-ee830ef64807 + pinky-3_end_end_end_end: ! 6faee649-ed0b-4314-bed1-aacea04f483a + ring-3_end: ! 0bc06755-a077-483e-981f-6469b33b47dd + mid-0: ! 5a579b8e-b19b-4633-b158-c901f25d5736 + ring-3_end_end_end_end: ! aa7644ab-25d9-4d52-8199-92caa4f5606d + ring-3_end_end: ! b91c0fb4-d739-4f27-beea-85ae77c565ea + thumb-0: ! fd7e7c10-1fde-45fb-b4ae-1b29c7fc3a28 + thumb-3_end: ! 834269e4-4713-4a65-a39f-f1dc8474fa26 + thumb-1: ! 5839bd7b-ea83-48a8-90b5-c26708a87a21 + ring-3: ! f8dda5b9-56f1-40dd-aa1e-a5e0c5b9fc02 + thumb-2: ! 54b6d990-d4c4-44c0-ba50-408f293488c5 + wrist: ! eaf6d31c-4150-47c2-a9f3-16b26fdf82eb + thumb-3: ! 2272f138-1ad5-43dc-916b-fd4c339c5fe2 + mid-2: ! 93429404-f9b4-4265-a2b0-37842d963643 + wrist_to_mid: ! 4b3320a9-8084-477d-a740-1a3f5af9b623 + pinky-3_end_end: ! ce8d5a95-3a28-43f5-9085-d3389fadd738 + index-3_end_end_end_end: ! b9163dbc-0b8d-4ce5-88ac-0c2eb657f98e + index-2: ! d9e9abfe-4a79-49f9-b76f-01081a3d3200 + thumb-3_end_end_end_end: ! c1cacb05-b59c-439f-8718-a605d7651788 + wrist_to_pinky: ! 27b4fca1-2d9d-458d-b410-a1126e3e90fe +- ! + PrefabRemaps: + [] + Name: thumb-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.054705, y: 3.957050, z: -0.004463} + rotation: {x: -2.614390, y: -0.009460, z: -0.205101} + scale: {x: 0.999999, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 35da746a-ca69-4900-aec8-7bea24f0d256 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist_to_mid + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.519104, y: -5.758140, z: 5.627940} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0c0b7cf8-63f8-4e52-a7a1-931f010669dc + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001204, y: 3.309390, z: 0.000044} + rotation: {x: 0.145073, y: -0.000050, z: -0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! f8dda5b9-56f1-40dd-aa1e-a5e0c5b9fc02 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218170, z: 0.000001} + rotation: {x: 0.000101, y: -0.000115, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ce8d5a95-3a28-43f5-9085-d3389fadd738 + Components: + [] +- ! + PrefabRemaps: + [] + Name: SIKLogLevelConfiguration + Enabled: true + ScriptAsset: ! d957e0e4-3046-4a85-bc12-52fe1927d9c9 + ScriptInputsDefault: + _debugModeEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + logLevelFilter: 3 + _debugModeEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: wrist_to_index + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000001, y: -0.000005, z: 0.000002} + rotation: {x: -0.140613, y: -15.148800, z: 17.637899} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8212a3e5-e939-4eae-81e1-3fbc741c95ae + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.837150, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.703720, z: -0.000000} + rotation: {x: 0.000283, y: 0.000276, z: 0.000012} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 95982089-4063-492d-881c-0204c00e65eb + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000007, y: 11.453500, z: 0.000008} + rotation: {x: 1.584790, y: -17.344000, z: -21.859100} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 3c63b5c3-a5ad-49e0-bb20-2c8f1a634997 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 3.549810, z: -0.000001} + rotation: {x: 0.000118, y: -23.667299, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 682c3de5-d653-44f1-b50a-3da29b927a87 + Components: + [] +- ! + PrefabRemaps: + [] + Name: MouseInteractor + Enabled: true + ScriptAsset: ! 52a65860-24de-431c-b6b7-7a6585a77d3c + ScriptInputsDefault: + _drawDebug: true + sphereCastEnabled: true + spherecastRadii: true + spherecastDistanceThresholds: true + _maxRaycastDistance: true + indirectTargetingVolumeMultiplier: true + indirectDragThreshold: true + mouseTargetingMode: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + _drawDebug: false + sphereCastEnabled: false + spherecastRadii: ! + - 0.500000 + - 2.000000 + - 4.000000 + spherecastDistanceThresholds: ! + - 0.000000 + - 12.000000 + - 30.000000 + _maxRaycastDistance: ! 500.000000 + indirectTargetingVolumeMultiplier: ! 1.000000 + indirectDragThreshold: ! 3.000000 + mouseTargetingMode: ! 2.000000 + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: HandVisual + Enabled: true + ScriptAsset: ! 27fb63e0-f430-409f-b812-20bc1f008d3c + ScriptInputsDefault: + selectVisual: true + autoJointMapping: true + wrist: true + thumbToWrist: true + thumbBaseJoint: true + thumbKnuckle: true + thumbMidJoint: true + thumbTip: true + indexToWrist: true + indexKnuckle: true + indexMidJoint: true + indexUpperJoint: true + indexTip: true + middleToWrist: true + middleKnuckle: true + middleMidJoint: true + middleUpperJoint: true + middleTip: true + ringToWrist: true + ringKnuckle: true + ringMidJoint: true + ringUpperJoint: true + ringTip: true + pinkyToWrist: true + pinkyKnuckle: true + pinkyMidJoint: true + pinkyUpperJoint: true + pinkyTip: true + occluderEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + handType: left + selectVisual: Default + handInteractor: ! 2ec89c90-23ef-4d6e-8079-acecd4d75c1d + handMesh: ! 640f142e-9401-4452-a70a-6b84ee9fdeb7 + root: ! f0d6b0fb-62e3-448a-87ee-f6527258390d + autoJointMapping: true + wrist: ! 00000000-0000-0000-0000-000000000000 + thumbToWrist: ! 00000000-0000-0000-0000-000000000000 + thumbBaseJoint: ! 00000000-0000-0000-0000-000000000000 + thumbKnuckle: ! 00000000-0000-0000-0000-000000000000 + thumbMidJoint: ! 00000000-0000-0000-0000-000000000000 + thumbTip: ! 00000000-0000-0000-0000-000000000000 + indexToWrist: ! 00000000-0000-0000-0000-000000000000 + indexKnuckle: ! 00000000-0000-0000-0000-000000000000 + indexMidJoint: ! 00000000-0000-0000-0000-000000000000 + indexUpperJoint: ! 00000000-0000-0000-0000-000000000000 + indexTip: ! 00000000-0000-0000-0000-000000000000 + middleToWrist: ! 00000000-0000-0000-0000-000000000000 + middleKnuckle: ! 00000000-0000-0000-0000-000000000000 + middleMidJoint: ! 00000000-0000-0000-0000-000000000000 + middleUpperJoint: ! 00000000-0000-0000-0000-000000000000 + middleTip: ! 00000000-0000-0000-0000-000000000000 + ringToWrist: ! 00000000-0000-0000-0000-000000000000 + ringKnuckle: ! 00000000-0000-0000-0000-000000000000 + ringMidJoint: ! 00000000-0000-0000-0000-000000000000 + ringUpperJoint: ! 00000000-0000-0000-0000-000000000000 + ringTip: ! 00000000-0000-0000-0000-000000000000 + pinkyToWrist: ! 00000000-0000-0000-0000-000000000000 + pinkyKnuckle: ! 00000000-0000-0000-0000-000000000000 + pinkyMidJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyUpperJoint: ! 00000000-0000-0000-0000-000000000000 + pinkyTip: ! 00000000-0000-0000-0000-000000000000 + shouldThumbPokeGlow: true + unitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + tipGlowMaterial: ! ea08fbd2-4db1-40d5-855b-ca5307409d64 + idleColor: ! {x: 1.000000, y: 0.686275, z: 0.000000, w: 1.000000} + pinchDownColor: ! {x: 0.968627, y: 0.827451, z: 0.000000, w: 1.000000} + tapProximityThreshold: ! 8.000000 + pinchTexture: ! e0a110ae-6b49-431f-9924-e602351e9a0c + tapTexture: ! f5355afd-bcbc-4434-bcf9-9ff4c341eb87 + occluderEnabled: false + occluderUnitPlaneMesh: ! 198d4c8c-c021-43ce-a954-a22f1f606ca2 + radialGradientOcclusionMaterial: ! ab926f89-771c-45e0-a44c-ba4f9f57cafb + handOutlineMaterial: ! ae367e71-ee3a-45a1-8095-d0d2321b902e + handOccluderMaterial: ! f5326505-501a-4c5e-8979-15bb3dadfa0b + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: pinky-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.005385, y: 2.681950, z: -0.000095} + rotation: {x: -5.666190, y: -0.004601, z: -0.046291} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a34eb85f-5004-458c-a961-3569f71c96f6 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000001, y: 3.166710, z: 0.000002} + rotation: {x: 0.000000, y: 0.000019, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a5231166-3231-4b80-90b0-d0d576f4a0b7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000003, y: 11.787900, z: -0.000003} + rotation: {x: 9.215320, y: 17.707500, z: 16.168699} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 73f2bd45-f861-4f03-bc1e-c5653210cb02 + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549810, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.218170, z: 0.000000} + rotation: {x: 0.000050, y: -0.000056, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 6729a2b6-bfa6-49d1-a1fc-8d6176f3947e + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.703710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + SourceRemaps: + - 0003afb6-e082-42ab-b89f-d22eb256f228: 5b23233d-9716-4fbb-941b-fdd02594cce0 + - 009892ac-73e5-4967-bd85-efc71c49f0a7: b0a52483-9a6e-49d0-8a06-c12f4b9e24a6 + - 02d483b7-4973-456a-94a1-5973d02ed09f: ce8d5a95-3a28-43f5-9085-d3389fadd738 + - 0465eda0-f2a8-46a0-89bf-aec9d8b8da01: 59d61410-e6bd-447d-b83d-7b0c75236471 + - 0473b266-866f-4f68-af21-9d3530e1914f: 682c3de5-d653-44f1-b50a-3da29b927a87 + - 04ac8134-d110-4511-b25a-891f2f66584b: 6729a2b6-bfa6-49d1-a1fc-8d6176f3947e + - 055525b2-7c1a-4f70-9358-23e0d7d156b8: b9e3a6d6-0f12-4900-bd2b-35f10e31d2d8 + - 0b203467-22aa-4c6c-a7de-22b8f87e0ad6: 5839bd7b-ea83-48a8-90b5-c26708a87a21 + - 0d34b376-2158-453b-931e-0189d0cf2dfa: b520cb8c-f8f6-4edd-bdf6-03f955679e98 + - 0f43b8a1-5f63-44c3-9ba0-32318363dc57: bc738d9f-a07b-4015-9609-391efdb5b21c + - 12549dba-74cb-48d3-a50f-73daa0d64196: 482e497b-046d-4e69-8fde-d6c9753e7b46 + - 12ba946a-1a8e-4e95-87e5-087ec0b249cc: 060bda29-936e-409f-9291-aa232716f91b + - 1573681c-afad-4710-bf30-13ab306587e0: 7def0c43-f87f-40bf-8090-7d2d350c0a78 + - 15d70faf-f504-434b-bc7b-bb474fac2980: f36adf2b-cb0d-4d17-8032-92a357188727 + - 1907c2c5-2d81-47ce-96c9-eeb579299134: 15198c7d-b87d-41f2-8a03-ebb1e502aa85 + - 1abd5650-e4e3-4218-9dfe-2d518a0b161b: 9b6e6700-d085-4c9b-bf53-01d5d03c2dc0 + - 1d1c8de5-b019-4d0a-adc6-1ad389890762: f0d6b0fb-62e3-448a-87ee-f6527258390d + - 1d87de05-c879-4ac1-8782-eaceafb0ab7c: ee338c45-02a9-4b91-b1db-f0f2e7f0c561 + - 1e231994-34a6-48c1-94ee-339987f113c7: 410e0d34-e8a4-4dc0-875a-e2893f97702d + - 1f7bf313-445c-40f6-92ad-a40a50dea575: 44036629-a264-4199-8275-e8d9e15d2c81 + - 224e1b84-2cd6-40dc-8b4d-39e26681bfd1: 777d46ee-e102-4218-8bf6-08271ca2483d + - 22806c77-18d4-41eb-81b3-b85d1228c059: 6045b931-e0bd-40c1-8d57-ff06b391b012 + - 24b98cd7-d5a4-4872-b17b-a6bea152b437: fe279d3e-e1cc-4ae7-bde8-29ee3c3c49ba + - 24d6dc84-ed70-4a53-a3c4-9224488ec60a: e70fca4c-df37-4119-a16b-8ca809738fca + - 24d70dc1-4597-48e0-9370-c6e9293594d4: 1fd76f2b-2db3-411e-b7ee-c216f1a543a5 + - 2536fae3-02cb-4aa5-8c55-952afc929db0: 0c0b7cf8-63f8-4e52-a7a1-931f010669dc + - 283ab8bc-80c5-48db-8f22-6b4ab6e6cffe: 5a579b8e-b19b-4633-b158-c901f25d5736 + - 2878109d-8f26-4010-b916-efdc9fecbdf8: a598f236-79f6-4635-a26a-b69122522a2a + - 28b286b8-7e97-4ed0-bbce-b813966137ff: 7e8d8d02-2e8a-4b6d-a022-e1d1e34c395f + - 2a62abd3-948e-4fb7-bacd-e846fe772fc8: 2114ca63-5b0d-4f5a-bb57-2480824e7ee3 + - 32b9372e-60ad-430c-87fe-a43f6258b4e5: 93bed319-009f-450a-b7e0-e1e8b1830ea6 + - 33423227-0e0f-43a6-a69d-a713b9653e99: f950caaf-d491-4bf6-968e-01dfa516e7f2 + - 341ee23b-b82c-4f55-b23d-193c0df5c016: 4b3320a9-8084-477d-a740-1a3f5af9b623 + - 345fde54-ce8d-467e-bc01-3c54e0129ca0: 5029a531-ba49-41be-b8fe-c00098aa6b63 + - 34e94d3a-2900-4f04-bbdd-8be35309a24f: 4a011e45-fd0b-400a-b2fa-4170f9c1f62c + - 37803923-6d4a-4268-aba1-ef5d1d23cd46: 31bbb94e-8380-4021-ad81-85aa0a52da17 + - 3ab55c9b-dd82-4532-943e-d1df8f009177: 6326ecaf-c4e6-470d-b024-42b0245d8718 + - 3b52e609-bccb-4474-8396-af04afb47613: b587f0ee-51b5-4976-acc9-551774f7d888 + - 3b885064-9472-4754-9b78-42ff961487b9: eb56a3b1-17bf-4627-b5ef-a29c12868072 + - 3c0c8d96-d019-421b-8641-2f6c4fef657f: a2b5e657-6fa1-4495-98e6-42bb0d87221a + - 42c8f113-929e-4b03-b3c0-1e0908941234: 8212a3e5-e939-4eae-81e1-3fbc741c95ae + - 46a5e549-6a60-40d7-99e2-3d9ea7f5a6fa: feac871f-6262-41f8-97ba-c15238ce8cc6 + - 4756a1da-6124-4cbb-af0c-1631649652f6: e5233629-fb2f-40a0-a5fd-8ecd69f340b9 + - 47ceb1fa-65b6-498e-af35-6f5af78c2618: eaf6d31c-4150-47c2-a9f3-16b26fdf82eb + - 481aca89-f9bf-4ce1-a3a8-d75fc0ff915b: 052dbda9-c01c-4ca0-8511-db2143375eb3 + - 4b527cf4-3e27-4559-b291-0a0b985b4717: 78aa1ef6-c348-457f-93f6-e7c23310e27a + - 4ca9e76a-f818-4a4f-954e-2777667c610a: b42d213a-f443-416e-89e7-cf0148cd7acd + - 4f009679-ee66-4a0c-8747-6163b9934265: fd7e7c10-1fde-45fb-b4ae-1b29c7fc3a28 + - 50cf7888-914f-493a-8fcd-16a430ffe91e: 35da746a-ca69-4900-aec8-7bea24f0d256 + - 5197ee39-b38d-42eb-8c32-d9938bfefb40: 4125c3d2-ec27-488f-8b1d-d20de29a726b + - 59d49307-84ec-4eb8-aa0f-22f915eb8a4f: 031ccedd-33fb-4007-b792-10bc2e9d4087 + - 5a63eead-ba79-4ecd-b8cd-509fbea8a4f2: d7b16828-692e-4922-b452-d17f7883a069 + - 5aee8ecc-3bc7-4fd4-a5bc-c0eaa693a469: bb815606-a6d2-4f9a-b9fa-94569776ccab + - 5cc46581-44dd-43e4-a2c1-e2bd294a97e6: b91c0fb4-d739-4f27-beea-85ae77c565ea + - 5ce67bb0-6c08-472c-b67f-77bde9454993: a34eb85f-5004-458c-a961-3569f71c96f6 + - 5fb8a5cc-ee0c-4abd-bff7-cb1d3aa2a5bc: e3926e34-9003-408a-9cf0-f6ab2750b97f + - 633241a4-412e-4a33-acb2-8487ae2291c9: 73f2bd45-f861-4f03-bc1e-c5653210cb02 + - 63d95309-a416-46c0-a21b-462bd3335750: b627f202-a301-4ffd-837c-d83dc923169e + - 64c3ab11-f5ff-4e18-91b8-c697a26228bd: 2404fd9a-4d48-458a-af02-94d4fd666077 + - 66b39338-c86b-4347-b964-852a182ec082: d9b7ee8e-a9c5-40d6-8279-4eec31980ab9 + - 682266ba-13a1-48d4-92fd-608428328dfc: 7d6a07d3-5dbf-430e-8c19-edba2edf9307 + - 6b721f55-2fde-4515-8a98-e0623db0c62c: b98ed8aa-adb8-4a90-8497-82f509e93c49 + - 6f03f0b2-6d81-4bc9-a49b-6d387e0245ff: 27b4fca1-2d9d-458d-b410-a1126e3e90fe + - 72e54688-1bc6-48fc-89bb-5fc41b166ae0: d13c9101-7032-4b19-86a3-4b69f740e46e + - 7976d725-6d53-4c31-a2c3-f96d25c2b921: 870d7e36-4128-4081-829f-ddb761dc5018 + - 7ca6c509-63a2-4a25-877e-e28ae50f4f4f: 9df82503-d84d-4fdb-b6ee-c00416e32ec5 + - 7e835154-746f-4b08-a586-447595fc19a1: 6faee649-ed0b-4314-bed1-aacea04f483a + - 7f240caf-60c7-4d5e-b716-5090899a20ce: 2f1618ae-bd43-45d2-a41c-444eae9d5ffd + - 81d57b7d-0209-4404-a775-f7ef13ad4f97: 54b6d990-d4c4-44c0-ba50-408f293488c5 + - 822c9dec-583d-4588-bf8f-9e76769d9791: 183f5ed1-ec6e-49c9-8603-fdb5efd6790c + - 861c2385-029b-4a3f-bb80-aad4ce6de18d: 2116c8da-6381-4d9b-a4a9-7190f8588592 + - 87b21f5e-7b4d-4754-af21-4925af99ffb4: aa7644ab-25d9-4d52-8199-92caa4f5606d + - 8d2fc7e4-0fe6-43d2-b837-fbe1aa318543: 93429404-f9b4-4265-a2b0-37842d963643 + - 8f5b51cb-131a-42fa-9ea7-67cee50d6af2: b9163dbc-0b8d-4ce5-88ac-0c2eb657f98e + - 93d669d1-3439-4d61-ab72-99f1c6f76a81: 1da287aa-43af-4c07-9327-03ba984fc4d0 + - 94200c52-425a-43b6-8893-512b230a7726: f8dda5b9-56f1-40dd-aa1e-a5e0c5b9fc02 + - 94f70a69-9105-4332-988c-b375881b7bd9: 9d1b7d54-4ef3-4308-a432-33350e1575c2 + - 951124b2-906c-4f4f-8422-a881e9d98b4a: 1ec73053-c75c-4fcc-b889-08cc253455e4 + - 95dea6d2-2c8c-477b-a1f3-e372e02e6a0b: 1034f3ac-3b9a-4339-b10f-a0fab01464fb + - 95f1c1ea-6b70-4e98-80bd-216ce18becb4: a5231166-3231-4b80-90b0-d0d576f4a0b7 + - 96aa9a5e-354d-415a-ac80-5442481fec05: aa0496a3-fcdd-4c2b-9a6d-07653422d537 + - 9c6e9559-53cb-4842-afc9-a9cf725bce0a: 5f20ec08-c7cd-4675-a48d-dd74968ec4d7 + - 9f23857f-0354-4c96-a54d-0a74653401b0: 21f27d7a-ff62-4a57-9090-43a3f5dce83a + - a0534ec9-6292-40ec-b6cd-859f7738f85f: 2d4fb431-a418-4924-89f2-c32b3b520ede + - a216ab78-0022-4fc2-96cf-862ffa9f0371: 60bb00dc-b347-4567-a739-58f0acab4157 + - a227f4f5-bb8b-4083-8ff3-76b300794afe: 43180266-1424-4c20-85e8-49a4ac3fc737 + - a92fd0a3-ee3a-4273-a91b-d625d14ce8d2: c5073def-68b1-4a34-9dd4-e6699cd79ffc + - ad14db46-53e1-460c-a8bf-8c26bd57f37c: c3ee4ba4-011e-4330-afeb-24e145dd5116 + - ae4a9bad-4c46-4bf3-8553-28e8b9416cce: c1cacb05-b59c-439f-8718-a605d7651788 + - aff70df1-490d-4236-bfe7-1c9fcd1a028a: 331cbff3-d65c-4a7d-9b14-0e424d4354ef + - b0e47302-1cbb-4346-a62f-8e341c73f7b5: 5c871db5-65b3-4070-85a9-3c449e044310 + - b3bcf351-f103-47df-a4e8-fd46dbd2a734: 8e456acc-90a0-4fcb-8e45-f200eeb1b729 + - b935b9b7-3c38-42b9-8045-c6609e019a8f: 2ec89c90-23ef-4d6e-8079-acecd4d75c1d + - bb7fd053-b7b8-4148-9784-7a4ecfe99c2b: 3f6c1960-0f45-4a3a-9e7e-a67447b2d019 + - bf692fb0-1af3-476e-97cd-092308e529f6: d891d276-efe1-4c8f-8b7e-95cd79b35364 + - c224f6fa-05b2-43d9-b45b-0050539a4688: 47c9a311-024f-4ffb-9021-cd1ee3bf81f7 + - c3c87762-eca6-4731-87a2-f7596e7c0479: 08071ebb-7cc0-4a08-a8df-ee830ef64807 + - c4bd0335-b377-414d-8521-c473e35c5774: 93827cc5-a953-4861-9d1e-712b132f6619 + - c609db94-d0da-4230-a62a-7f71134c5356: de60f119-8912-4dec-a8ee-714862f51e6b + - c6e2a5f7-ab1a-4d18-a9d6-a0cd79b37fa7: 0bc06755-a077-483e-981f-6469b33b47dd + - ca642efc-944a-4dac-beb4-508163707dd4: 2d726b1c-a359-483c-a73d-92b2a70aba6d + - cb2a32d4-1a84-411d-aa42-bf42bfa144e4: c4e3997b-1080-444c-8ac0-1fec1f541de2 + - cb9bed1c-7640-4b13-9103-67d3e3ae7401: d866260d-fbe6-4b19-ba62-96567884b87d + - ce6d11c6-be32-4e32-b7b8-6c199feef4ea: d9e9abfe-4a79-49f9-b76f-01081a3d3200 + - cfce736c-a49b-4a3e-947a-32a8e98a4961: 3c63b5c3-a5ad-49e0-bb20-2c8f1a634997 + - d0f8de20-470a-4599-b195-7ae175fbfc78: 95982089-4063-492d-881c-0204c00e65eb + - d1349dfb-66e5-406a-bab7-cbedc09f0583: fc2d5d8d-8022-4353-9682-ff798013cc6a + - d6371ebf-1d3b-4bfa-bdd8-c0a7fabf8f39: 38e72372-f5c5-4c5e-888e-003531bd745b + - db24ae45-9fd3-4bac-a406-0cad45a3f045: 47b62922-d592-4f29-b3bd-8031ea360e98 + - db9cf02a-a38c-47aa-b059-2faab8f74c75: 9fa8beeb-7a11-4fe0-93bf-e98462f57da9 + - e0925a50-c8a1-4759-9d26-eac6079b1fdb: 94e3e569-4319-4c8c-9bd5-650348544f8f + - e3a03ad7-eb65-485e-86e0-cd9f0e93e442: b9d4f202-03f8-460c-b0af-61fc4c356c5c + - e3a7a944-c642-433e-b640-41b775d7e247: ad116ad3-df03-44cd-be5b-a808d805a902 + - e417673c-029b-4df2-b240-55edb111620f: 308dd5bc-51d0-4738-a645-c4c3ff302414 + - e8f1e2a0-17f6-445d-ad3b-100743436988: 0062ad6f-4a1a-4cdc-8fc1-ab49a2f34df9 + - ea14478c-a162-45e4-a7a7-af2ac18b7d4c: 3ecb5e79-4d94-4343-bc62-2002be78d9f0 + - eafdc1ea-a52b-486f-af4a-13a4f947b89f: 834269e4-4713-4a65-a39f-f1dc8474fa26 + - eb708bc5-ef13-451c-b7b2-46398c05d999: 640f142e-9401-4452-a70a-6b84ee9fdeb7 + - edcde6ca-b40c-4768-a7d2-dd31da71277a: f0ca0d16-bb4b-45e0-b6c1-8541871a2ed8 + - edd67c66-78f4-4deb-a3bf-c7b0b07504f3: 369309c5-6526-47d6-bb4a-a525ea0fc08e + - efcdb1e4-82aa-48d7-adff-ea83aadec8f0: 63f04c53-0714-469c-94fb-2e0a291fea73 + - f08c52f6-14c2-4ded-be77-3a2b3f47c577: 816c9dd2-c308-42ea-9bdb-e858f6f8e6d8 + - f4788f9e-4139-4eef-90bc-771177044cd8: 2272f138-1ad5-43dc-916b-fd4c339c5fe2 + - f8de076e-14c5-4869-815e-97dfb35529e7: 75445c09-5a66-41e1-be22-88dad89df215 + - faaefd86-d1ae-4d56-a280-766a06b98cf6: e83abff0-fe19-4f02-b359-a06ae14818f4 + - fb7196a9-d764-4f20-bf77-8d5722266d27: 42ddc92b-e779-412b-9f91-8457277af637 + - fd649b68-8f72-465f-baa6-ceef905acca1: b824f2d7-9d96-4eb6-9f78-10dc5c2cbce4 + SourceState: ! 75445c09-5a66-41e1-be22-88dad89df215 +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.010478, y: 3.166710, z: 0.000270} + rotation: {x: -86.458298, y: -5.335180, z: -5.675670} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5b23233d-9716-4fbb-941b-fdd02594cce0 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.166710, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: thumb-3_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 3.549800, z: -0.000002} + rotation: {x: 0.000000, y: 0.000028, z: 0.000033} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c1cacb05-b59c-439f-8718-a605d7651788 + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: -0.000113, y: -0.000000, z: -0.000031} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! de60f119-8912-4dec-a8ee-714862f51e6b + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.008392, y: 3.222930, z: -0.000121} + rotation: {x: -0.204897, y: -0.651952, z: -2.287250} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a2b5e657-6fa1-4495-98e6-42bb0d87221a + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837170, z: 0.000001} + rotation: {x: 0.000189, y: -0.000000, z: 0.000044} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 47c9a311-024f-4ffb-9021-cd1ee3bf81f7 + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: pinky-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 2.218160, z: -0.000003} + rotation: {x: 0.000050, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 410e0d34-e8a4-4dc0-875a-e2893f97702d + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.001204, y: 3.309410, z: 0.000061} + rotation: {x: 0.145060, y: 0.000496, z: 0.002001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! a598f236-79f6-4635-a26a-b69122522a2a + Components: + [] +- ! + PrefabRemaps: + [] + Name: index-3_end_end + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000000, y: 2.837150, z: -0.000000} + rotation: {x: 0.000038, y: 0.000042, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2116c8da-6381-4d9b-a4a9-7190f8588592 + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000006, y: -0.000000, z: -0.000002} + rotation: {x: -176.654007, y: -5.519800, z: -92.680099} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 43180266-1424-4c20-85e8-49a4ac3fc737 + - ! aa0496a3-fcdd-4c2b-9a6d-07653422d537 + - ! 4b3320a9-8084-477d-a740-1a3f5af9b623 + - ! 9df82503-d84d-4fdb-b6ee-c00416e32ec5 + - ! 27b4fca1-2d9d-458d-b410-a1126e3e90fe + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[OPTIONAL] Visuals" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 9d1b7d54-4ef3-4308-a432-33350e1575c2 + - ! 8e456acc-90a0-4fcb-8e45-f200eeb1b729 + - ! f0ca0d16-bb4b-45e0-b6c1-8541871a2ed8 + Components: + [] +- ! + PrefabRemaps: + [] + Name: mid-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.010479, y: 3.166700, z: 0.000210} + rotation: {x: -87.477303, y: 5.565590, z: -5.001890} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! c3ee4ba4-011e-4330-afeb-24e145dd5116 + Components: + [] +- ! + PrefabRemaps: + [] + Name: "[LEGACY] InteractorLineVisual" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 21f27d7a-ff62-4a57-9090-43a3f5dce83a + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2404fd9a-4d48-458a-af02-94d4fd666077 + - ! 331cbff3-d65c-4a7d-9b14-0e424d4354ef + Components: + - ! 44036629-a264-4199-8275-e8d9e15d2c81 +- ! + PrefabRemaps: + [] + Name: mid-2 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.002904, y: 3.650310, z: -0.000110} + rotation: {x: -2.676430, y: -0.000566, z: -0.015133} + scale: {x: 0.999999, y: 0.999999, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! ee338c45-02a9-4b91-b1db-f0f2e7f0c561 + Components: + [] +- ! + PrefabRemaps: + [] + Name: ring-3 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.001444, y: 2.703720, z: 0.000001} + rotation: {x: 88.027298, y: -5.497920, z: 5.333360} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 0bc06755-a077-483e-981f-6469b33b47dd + Components: + [] +- ! + PrefabRemaps: + [] + Name: wrist + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000006, y: -0.000002, z: -0.000000} + rotation: {x: 157.399994, y: -83.865097, z: 115.817001} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 31bbb94e-8380-4021-ad81-85aa0a52da17 + - ! b824f2d7-9d96-4eb6-9f78-10dc5c2cbce4 + - ! b42d213a-f443-416e-89e7-cf0148cd7acd + - ! 0062ad6f-4a1a-4cdc-8fc1-ab49a2f34df9 + - ! 1fd76f2b-2db3-411e-b7ee-c216f1a543a5 + Components: + [] +- ! + PrefabRemaps: + [] + Name: LeftHandInteractor + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2ec89c90-23ef-4d6e-8079-acecd4d75c1d +- ! + PrefabRemaps: + [] + Name: thumb-0 + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.000009, y: 4.399180, z: 0.000004} + rotation: {x: 1.097870, y: 44.900902, z: 1.556590} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5839bd7b-ea83-48a8-90b5-c26708a87a21 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Configuration + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2d726b1c-a359-483c-a73d-92b2a70aba6d + - ! b627f202-a301-4ffd-837c-d83dc923169e +- ! + PrefabRemaps: + [] + Name: RightHandModel + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 42ddc92b-e779-412b-9f91-8457277af637 + - ! 63f04c53-0714-469c-94fb-2e0a291fea73 + Components: + - ! ad116ad3-df03-44cd-be5b-a808d805a902 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts new file mode 100644 index 00000000..f2d6d389 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts @@ -0,0 +1,50 @@ +import {Singleton} from "../../Decorators/Singleton" +import {validate} from "../../Utils/validate" +import BaseCameraFinderProvider from "./BaseCameraFinderProvider" + +/** + * Holds a reference to the AR camera. + * + * @remarks + * AR camera is defined as the {@link Camera} in the scene that has a {@link deviceTrackingComponent} + * with tracking mode set to World. + */ +@Singleton +export default class ARCameraFinderProvider extends BaseCameraFinderProvider { + public static getInstance: () => ARCameraFinderProvider + + constructor() { + super() + const cameraComponent = this.lookForWorldCameraComponent() + validate(cameraComponent) + this.setCamera(cameraComponent) + } + + /** + * Augments the {@link getSameRenderTargetCamera} predicate with a check for Device + * Tracking being World. + * + * @returns A {@link Camera} setup for AR. + */ + private lookForWorldCameraComponent(): Camera | null { + const predicate = (object: SceneObject): Camera | null => { + const camera = this.getSameRenderTargetCamera(object) + + if (camera === null) { + return null + } + + const deviceTracking = object.getComponent("Component.DeviceTracking") + if ( + deviceTracking.getActualDeviceTrackingMode() === + DeviceTrackingMode.World + ) { + return camera + } else { + return null + } + } + + return this.bfsFromRoot(predicate) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts.meta new file mode 100644 index 00000000..aefb8560 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/ARCameraFinderProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! e23930eb-e1db-44b5-8dfa-5291117b6eca + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e23930eb-e1db-44b5-8dfa-5291117b6eca + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 0613d189-aa72-417f-92d6-43562b3bd2da + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts new file mode 100644 index 00000000..6bdea750 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts @@ -0,0 +1,75 @@ +import {bfs} from "../../Utils/algorithms" +import BaseWorldCameraProvider from "./BaseWorldCameraProvider" + +/** + * Extends {@link BaseWorldCameraProvider} by providing functionality that + * allows for searching for the {@link Camera} during construction. + */ +export default abstract class BaseCameraFinderProvider extends BaseWorldCameraProvider { + /** + * Checks the {@link SceneObject} passed if it has a {@link Camera} component + * with the right render target. + * Returns a reference to the {@link Camera} if true, null if not. + */ + protected getSameRenderTargetCamera(object: SceneObject): Camera | null { + const cameraComponent = object.getComponent("Component.Camera") + + // It is possible the liveTarget is not set, in this case we use the captureTarget + const targetRenderTarget = + global.scene.liveTarget !== null + ? global.scene.liveTarget + : global.scene.captureTarget + + if ( + object.enabled && + cameraComponent !== null && + cameraComponent.type === Camera.Type.Perspective && + cameraComponent.renderTarget.isSame(targetRenderTarget) + ) { + return cameraComponent + } else { + return null + } + } + + protected setCamera(cameraComponent: Camera): void { + if (cameraComponent === null) { + throw new Error( + "Could not find any suitable camera in the scene, make sure it is setup correctly" + ) + } + if ( + this.lookForDeviceTrackingComponent(cameraComponent.getSceneObject()) === + null + ) { + throw new Error( + "Your main camera is currently missing a 'Device Tracking Component'. Set your `Device Tracking Component` with Tracking Mode: World for spatial movement in your Lens." + ) + } + this.cameraComponent = cameraComponent + this.cameraTransform = this.cameraComponent.getTransform() + } + + private lookForDeviceTrackingComponent( + sceneObject: SceneObject + ): DeviceTracking | null { + const deviceTrackingComponent = sceneObject.getComponent( + "Component.DeviceTracking" + ) + + return deviceTrackingComponent + } + + protected bfsFromRoot( + predicate: (sceneObject: SceneObject) => Camera | null + ): Camera | null { + // Get root objects from the scene + const rootObjects = [] + const objectCount = global.scene.getRootObjectsCount() + for (let i = 0; i < objectCount; i++) { + rootObjects.push(global.scene.getRootObject(i)) + } + + return bfs(rootObjects, predicate) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts.meta new file mode 100644 index 00000000..9d6db965 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseCameraFinderProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 5e01d715-f121-4572-9b2f-a0263940996e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 5e01d715-f121-4572-9b2f-a0263940996e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! ef1b45aa-36b1-43e4-9277-8de3a46a238e + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts new file mode 100644 index 00000000..5f38d8d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts @@ -0,0 +1,131 @@ +import CameraProvider from "./CameraProvider" + +/** + * Base class that provides camera related apis + */ +export default abstract class BaseWorldCameraProvider + implements CameraProvider +{ + protected cameraTransform!: Transform + protected cameraComponent!: Camera + + /** @inheritDoc */ + attachSceneObject(sceneObject: SceneObject): void { + sceneObject.setParent(this.cameraComponent.getSceneObject()) + } + + /** @inheritDoc */ + getComponent(): Camera { + return this.cameraComponent + } + + /** @inheritDoc */ + renderLayer(): LayerSet { + return this.cameraComponent.renderLayer + } + + /** @inheritdoc */ + up(): vec3 { + return this.cameraTransform.up + } + + /** @inheritdoc */ + right(): vec3 { + return this.cameraTransform.right + } + + /** @inheritDoc */ + back(): vec3 { + return this.cameraTransform.back + } + + /** @inheritDoc */ + forward(): vec3 { + return this.cameraTransform.forward + } + + /** @inheritDoc */ + getWorldPosition(): vec3 { + return this.cameraTransform.getWorldPosition() + } + + /** @inheritDoc */ + getTransform(): Transform { + return this.cameraTransform + } + + /** @inheritDoc */ + getWorldTransform(): mat4 { + return this.cameraTransform.getWorldTransform() + } + + /** @inheritDoc */ + getLocalScale(): vec3 { + return this.cameraTransform.getLocalScale() + } + + /** @inheritDoc */ + getInvertedWorldTransform(): mat4 { + return this.cameraTransform.getInvertedWorldTransform() + } + + /** @inheritDoc */ + screenSpaceToWorldSpace(x: number, y: number, absoluteDepth: number): vec3 { + return this.cameraComponent.screenSpaceToWorldSpace( + new vec2(x, y), + absoluteDepth + ) + } + + /** @inheritDoc */ + worldSpaceToScreenSpace(x: number, y: number, z: number): vec2 { + return this.cameraComponent.worldSpaceToScreenSpace(new vec3(x, y, z)) + } + + /** @inheritDoc */ + enableClearColor(color: vec4): void { + this.cameraComponent.clearColor = color + this.cameraComponent.enableClearColor = true + } + + /** @inheritdoc */ + getClearColor(): vec4 { + return this.cameraComponent.clearColor + } + + /** @inheritdoc */ + inFoV(worldPosition: vec3): boolean { + const screenSpace = this.worldSpaceToScreenSpace( + worldPosition.x, + worldPosition.y, + worldPosition.z + ) + + return ( + screenSpace.x <= 1 && + screenSpace.x >= 0 && + screenSpace.y <= 1 && + screenSpace.y >= 0 + ) + } + + /** @inheritdoc */ + getForwardPosition(x: number, parallelToGround = false): vec3 { + let forwardDir = this.cameraComponent.getTransform().forward + + if (parallelToGround) { + forwardDir.y = 0 + forwardDir = forwardDir.normalize() + } + + return this.cameraComponent + .getTransform() + .getWorldPosition() + .add(forwardDir.uniformScale(-x)) + } + + /** @inheritdoc */ + getForwardPositionParallelToGround(x: number): vec3 { + return this.getForwardPosition(x, true) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts.meta new file mode 100644 index 00000000..22e9885d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/BaseWorldCameraProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 337e8c70-fb48-431e-8518-cf7b7149c962 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 337e8c70-fb48-431e-8518-cf7b7149c962 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 85f0a826-7a7d-4b60-9bca-8f0570440854 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts new file mode 100644 index 00000000..3f205795 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts @@ -0,0 +1,105 @@ +/** + * Defines available camera apis + * This abstraction was added to avoid mocking CameraComponent, Transform, etc + * in other classes that are being tested + */ +export default interface CameraProvider { + /** + * Add SceneObject as a child of the camera's SceneObject + * + * @param sceneObject - SceneObject to attach + */ + attachSceneObject(sceneObject: SceneObject): void + + /** + * Returns the camera component + */ + getComponent(): Camera + + /** + * Returns the layer set to which this camera is rendering to + */ + renderLayer(): LayerSet + + /** + * Returns the up vector of the camera. + */ + up(): vec3 + + /** + * Returns the right vector of the camera. + */ + right(): vec3 + + /** + * Returns the back vector of the camera. This is actually the front vector because the camera is reversed in Lens Studio. + */ + back(): vec3 + + /** + * Returns the forward vector of the camera. This is actually the back vector because the camera is reversed in Lens Studio. + */ + forward(): vec3 + + /** + * Returns the camera's world position + */ + getWorldPosition(): vec3 + + /** + * Returns the camera's transform + */ + getTransform(): Transform + + /** + * Returns the camera's world transform + */ + getWorldTransform(): mat4 + + /** + * Returns the camera's local scale + */ + getLocalScale(): vec3 + + /** + * Returns the camera's world position projected from screen space coordinates at a given z depth + * + * @param x + * @param y + * @param absoluteDepth + */ + screenSpaceToWorldSpace(x: number, y: number, absoluteDepth: number): vec3 + + worldSpaceToScreenSpace(x: number, y: number, z: number): vec2 + + /** + * Clears the renderTarget with the provided color before drawing to it + * + * @param color the color to clear the renderTarget with + */ + enableClearColor(color: vec4): void + + /** + * Returns the clear color applied to the camera + */ + getClearColor(): vec4 + + /** + * @returns whether a position is in camera FoV or not + * @param worldPosition - vec3 representing the position in world space + */ + inFoV(worldPosition: vec3): boolean + + /** + * @returns a position in world space in front of the camera by x units + * @param x - the magnitude to multiply the camera's forward direction by + * @param parallelToGround - if the camera's forward direction should be projected to be parallel to ground + */ + getForwardPosition(x: number, parallelToGround: false): vec3 + + /** + * @returns a position in world space in front of the camera (parallel to ground) + * @param x - the magnitude to multiply the camera's forward direction by + */ + getForwardPositionParallelToGround(x: number): vec3 +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts.meta new file mode 100644 index 00000000..be85849a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/CameraProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 532dcdea-2e30-4972-bc13-9c561df74ff3 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 532dcdea-2e30-4972-bc13-9c561df74ff3 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 38a4001b-1630-4820-a431-397f2e869bad + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts new file mode 100644 index 00000000..64d6107d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts @@ -0,0 +1,23 @@ +import {Singleton} from "../../Decorators/Singleton" +import BaseCameraFinderProvider from "./BaseCameraFinderProvider" + +/** + * Holds a reference to the world camera. + */ +@Singleton +export default class WorldCameraFinderProvider extends BaseCameraFinderProvider { + public static getInstance: () => WorldCameraFinderProvider + + constructor() { + super() + const cameraComponent = this.lookForCameraComponent() + + if (!isNull(cameraComponent)) { + this.setCamera(cameraComponent!) + } + } + + private lookForCameraComponent(): Camera | null { + return this.bfsFromRoot(this.getSameRenderTargetCamera) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts.meta new file mode 100644 index 00000000..a4413986 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CameraProvider/WorldCameraFinderProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 510bcb3f-7816-404d-a5d1-afbbccbef1a7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 510bcb3f-7816-404d-a5d1-afbbccbef1a7 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 0ece7f0c-2827-4769-ad6b-5c5492422be8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts new file mode 100644 index 00000000..4a5fabdc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts @@ -0,0 +1,80 @@ +import {Interactor, InteractorInputType} from "../../Core/Interactor/Interactor" + +import {InteractorCursor} from "../../Components/Interaction/InteractorCursor/InteractorCursor" +import {Singleton} from "../../Decorators/Singleton" +import {validate} from "../../Utils/validate" + +/** + * This singleton class manages the registration and retrieval of InteractorCursor instances. It ensures that each Interactor has a unique cursor and provides methods to get cursors by their associated Interactor. + * + */ +@Singleton +export class CursorControllerProvider { + public static getInstance: () => CursorControllerProvider + + private cursors = new Map() + + registerCursor(cursor: InteractorCursor): void { + validate( + cursor.interactor, + "InteractorCursor must have a set Interactor before registering to SIK.CursorController.", + ) + + if (this.cursors.has(cursor.interactor)) { + throw Error( + `Multiple cursors for a single Interactor have been registered.\nThe CursorController and InteractorCursor components cannot both be present in the scene hierarchy before runtime, use one or the other.`, + ) + } + + this.cursors.set(cursor.interactor, cursor) + } + + /** + * @deprecated in favor of getCursorByInteractor + * Gets the InteractorCursor for a specified interactor + * @param interactor The interactor to get the cursor for + * @returns the InteractorCursor for the requested interactor, or null if it doesn't exist + */ + getCursor(interactor: Interactor): InteractorCursor | null { + return this.getCursorByInteractor(interactor) + } + + /** + * Gets the InteractorCursor for a specified interactor + * @param interactor The interactor to get the cursor for + * @returns the InteractorCursor for the requested interactor, or null if it doesn't exist + */ + getCursorByInteractor(interactor: Interactor): InteractorCursor | null { + return this.cursors.get(interactor) ?? null + } + + /** + * Gets the InteractorCursor for a specified input type + * @param inputType The InteractorInputType to get the cursor for + * @returns the InteractorCursor for the requested InteractorInputType, or null if it doesn't exist + */ + getCursorByInputType( + inputType: InteractorInputType, + ): InteractorCursor | null { + let interactor: Interactor | undefined + + for (const mapInteractor of this.cursors.keys()) { + if (mapInteractor.inputType === inputType) { + interactor = mapInteractor + break + } + } + + return interactor !== undefined + ? this.getCursorByInteractor(interactor) + : null + } + + /** + * Gets all InteractorCursors within the scene + * @returns a list of InteractorCursors + */ + getAllCursors(): InteractorCursor[] { + return Array.from(this.cursors.values()) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts.meta new file mode 100644 index 00000000..1d48fd76 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/CursorControllerProvider/CursorControllerProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! e293f435-5599-4d0a-b17c-f91a1f1f1f63 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e293f435-5599-4d0a-b17c-f91a1f1f1f63 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 94d2e47a-f531-4c96-86d9-16163e8d8c51 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts new file mode 100644 index 00000000..98dcf7a0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts @@ -0,0 +1,437 @@ +import {PublicApi} from "../../Utils/Event" +import {TargetingData} from "../TargetProvider/TargetingData" +import {PalmTapDetectionEvent} from "./GestureProvider/PalmTapDetectionEvent" +import {HandType} from "./HandType" +import {HandVisuals} from "./HandVisuals" +import {Keypoint} from "./Keypoint" + +/** + * Describes the API for the BaseHand, which is part of the API accessible by + * external developers. + */ +export interface BaseHand { + /** + * Event called when the hand is found by the system + */ + readonly onHandFound: PublicApi + + /** + * Event called when the hand is lost by the system + */ + readonly onHandLost: PublicApi + + /** + * Event called when this hand gets enabled or disabled + */ + readonly onEnabledChanged: PublicApi + + /** + * Event called when the user has successfully pinched down. + */ + readonly onPinchDown: PublicApi + + /** + * Event called when the user has released pinching after they + * have successfully pinched down. + */ + readonly onPinchUp: PublicApi + + /** + * Event called when the user's pinch is canceled by the system. + */ + readonly onPinchCancel: PublicApi + + /** + * The Keypoint of the wrist joint + */ + readonly wrist: Keypoint + + /** + * The Keypoint of the thumbProximal joint, will be @deprecated soon in favor of thumbToWrist. + */ + readonly thumbProximal: Keypoint + + /** + * The Keypoint of the thumbToWrist joint (Wrist Joint) + */ + readonly thumbToWrist: Keypoint + + /** + * The Keypoint of the thumbIntermediate joint, will be @deprecated soon in favor of thumbBaseJoint. + */ + readonly thumbIntermediate: Keypoint + + /** + * The Keypoint of the thumbBaseJoint joint (Thumb Carpometacarpal (CMC) Joint) + */ + readonly thumbBaseJoint: Keypoint + + /** + * The Keypoint of the thumbDistal joint, will soon be @deprecated for thumbKnuckle + */ + readonly thumbDistal: Keypoint + + /** + * The Keypoint of the thumbKnuckle joint (Thumb Metacarpophalangeal (MCP) Joint) + */ + readonly thumbKnuckle: Keypoint + + /** + * The Keypoint of the thumbPad joint, will soon be @deprecated for thumbMidJoint + */ + readonly thumbPad: Keypoint + + /** + * The Keypoint of the thumbMidJoint joint (Thumb Interphalangeal (IP) Joint) + */ + readonly thumbMidJoint: Keypoint + + /** + * The Keypoint of the thumbTip joint (Thumb Tip Joint) + */ + readonly thumbTip: Keypoint + + /** + * The Keypoint of the indexProximal joint, will be @deprecated soon in favor of indexToWrist. + */ + readonly indexProximal: Keypoint + + /** + * The Keypoint of the indexToWrist joint (Wrist Joint) + */ + readonly indexToWrist: Keypoint + + /** + * The Keypoint of the indexIntermediate joint, will be @deprecated soon in favor of indexKnuckle. + */ + readonly indexIntermediate: Keypoint + + /** + * The Keypoint of the indexKnuckle joint (Index Metacarpophalangeal (MCP) Joint) + */ + readonly indexKnuckle: Keypoint + + /** + * The Keypoint of the indexDistal joint, will soon be @deprecated for indexMidJoint + */ + readonly indexDistal: Keypoint + + /** + * The Keypoint of the indexMidJoint joint (Index Proximal Interphalangeal (PIP) Joint) + */ + readonly indexMidJoint: Keypoint + + /** + * The Keypoint of the indexPad joint, will soon be @deprecated for indexUpperJoint + */ + readonly indexPad: Keypoint + + /** + * The Keypoint of the indexUpperJoint joint (Index Distal Interphalangeal (DIP) Joint) + */ + readonly indexUpperJoint: Keypoint + + /** + * The Keypoint of the indexTip joint (Index Tip Joint) + */ + readonly indexTip: Keypoint + + /** + * The Keypoint of the middleProximal joint, will be @deprecated soon in favor of middleToWrist. + */ + readonly middleProximal: Keypoint + + /** + * The Keypoint of the middleToWrist joint (Wrist Joint) + */ + readonly middleToWrist: Keypoint + + /** + * The Keypoint of the middleIntermediate joint, will be @deprecated soon in favor of middleKnuckle. + */ + readonly middleIntermediate: Keypoint + + /** + * The Keypoint of the middleKnuckle joint (Middle Metacarpophalangeal (MCP) Joint) + */ + readonly middleKnuckle: Keypoint + + /** + * The Keypoint of the middleDistal joint, will soon be @deprecated for middleMidJoint + */ + readonly middleDistal: Keypoint + + /** + * The Keypoint of the middleMidJoint joint (Middle Proximal Interphalangeal (PIP) Joint) + */ + readonly middleMidJoint: Keypoint + + /** + * The Keypoint of the middlePad joint, will soon be @deprecated for middleUpperJoint + */ + readonly middlePad: Keypoint + + /** + * The Keypoint of the middleUpperJoint joint (Middle Distal Interphalangeal (DIP) Joint) + */ + readonly middleUpperJoint: Keypoint + + /** + * The Keypoint of the middleTip joint (Middle Tip Joint) + */ + readonly middleTip: Keypoint + + /** + * The Keypoint of the ringProximal joint, will be @deprecated soon in favor of ringToWrist. + */ + readonly ringProximal: Keypoint + + /** + * The Keypoint of the ringToWrist joint (Wrist Joint) + */ + readonly ringToWrist: Keypoint + + /** + * The Keypoint of the ringIntermediate joint, will be @deprecated soon in favor of ringKnuckle. + */ + readonly ringIntermediate: Keypoint + + /** + * The Keypoint of the ringKnuckle joint (Ring Metacarpophalangeal (MCP) Joint) + */ + readonly ringKnuckle: Keypoint + + /** + * The Keypoint of the ringDistal joint, will soon be @deprecated for ringMidJoint + */ + readonly ringDistal: Keypoint + + /** + * The Keypoint of the ringMidJoint joint (Ring Proximal Interphalangeal (PIP) Joint) + */ + readonly ringMidJoint: Keypoint + + /** + * The Keypoint of the ringPad joint, will soon be @deprecated for ringUpperJoint + */ + readonly ringPad: Keypoint + + /** + * The Keypoint of the ringUpperJoint joint (Ring Distal Interphalangeal (DIP) Joint) + */ + readonly ringUpperJoint: Keypoint + + /** + * The Keypoint of the ringTip joint (Ring Tip Joint) + */ + readonly ringTip: Keypoint + + /** + * The Keypoint of the pinkyProximal joint, will be @deprecated soon in favor of pinkyToWrist. + */ + readonly pinkyProximal: Keypoint + + /** + * The Keypoint of the pinkyToWrist joint (Wrist Joint) + */ + readonly pinkyToWrist: Keypoint + + /** + * The Keypoint of the pinkyIntermediate joint, will be @deprecated soon in favor of pinkyKnuckle. + */ + readonly pinkyIntermediate: Keypoint + + /** + * The Keypoint of the pinkyKnuckle joint (Pinky Metacarpophalangeal (MCP) Joint) + */ + readonly pinkyKnuckle: Keypoint + + /** + * The Keypoint of the pinkyDistal joint, will soon be @deprecated for pinkyMidJoint + */ + readonly pinkyDistal: Keypoint + + /** + * The Keypoint of the pinkyMidJoint joint (Pinky Proximal Interphalangeal (PIP) Joint) + */ + readonly pinkyMidJoint: Keypoint + + /** + * The Keypoint of the pinkyPad joint, will soon be @deprecated for pinkyUpperJoint + */ + readonly pinkyPad: Keypoint + + /** + * The Keypoint of the pinkyUpperJoint joint (Pinky Distal Interphalangeal (DIP) Joint) + */ + readonly pinkyUpperJoint: Keypoint + + /** + * The Keypoint of the pinkyTip joint (Pinky Tip Joint) + */ + readonly pinkyTip: Keypoint + + /** + * The Keypoints of the Thumb finger + */ + readonly thumbFinger: Keypoint[] + + /** + * The Keypoints of the Index finger + */ + readonly indexFinger: Keypoint[] + + /** + * The Keypoints of the Middle finger + */ + readonly middleFinger: Keypoint[] + + /** + * The Keypoints of the Ring finger + */ + readonly ringFinger: Keypoint[] + + /** + * The Keypoints of the Pinky finger + */ + readonly pinkyFinger: Keypoint[] + + /** + * The Keypoints of the entire Hand + */ + readonly points: Keypoint[] + + /** + * Returns the enabled state of the hand. + */ + readonly enabled: boolean + + /** + * Returns true if the hand is the dominant hand assigned by the system + */ + readonly isDominantHand: boolean + + /** + * Determines if the hand is the left or right hand + */ + readonly handType: HandType + + /** + * {@link ObjectTracking3D} associated with this base hand + */ + readonly objectTracking3D: ObjectTracking3D + + /** + * Returns the normalized direction and origin point of the targeting ray in world coordinate system + * It can return null if the data has not been received from LensCore's GestureModule API. + */ + readonly targetingData: TargetingData | null + + /** + * Sets the enabled state of the hand. + * Events will not be called if isEnabled is set to false. + */ + setEnabled(isEnabled: boolean): void + + /** + * Determines if the system is able to track + * the BaseHand + */ + isTracked(): boolean + + /** + * Sets isDominantHand. This is used from HandInputData + * based on Lens Tweak value, and shouldn't be accessible + * by external developers. + * + * @param {Boolean} isDominantHand - describes if this hand is the dominant one or not + */ + setIsDominantHand(isDominantHand: boolean): void + + /** + * Determines if the hand's palm is facing the user + */ + isFacingCamera(): boolean + + /** + * Determines if the hand is aiming towards objects in the scene + */ + isInTargetingPose(): boolean + + /** + * Determines if the user is pinching + */ + isPinching(): boolean + + /** + * @returns whether the user is tapping their hand + */ + isTapping(): PalmTapDetectionEvent + + /** + * Returns owner scene object associated with the hand + */ + getSceneObject(): SceneObject + + /** + * Returns a normalized value from 0-1, where 0 is the distance + * from a finger tip to the thumb tip in resting/neutral hand pose. + * 1 is when a finger tip to thumb tip are touching/pinching. + * Returns null if the hand is not tracked + */ + getPinchStrength(): number | null + + /** + * Returns a direction quaternion based on a plane derived + * from a forward direction (between your thumb knuckle to thumb tip) + * and a right direction (between your thumb knuckle to index knuckle) + */ + getPinchDirection(): quat | null + + /** + * Returns the roll rotation of the hand in degrees. + * This is the result of the dot product from a right vector, + * created by the index and middle knuckle, and the camera's right vector + * to determine if the palm if facing the user. + * + * A value less than 30 is facing towards the user. + * A value greater than 30 is facing away from the user. + * + * Returns null if the hand is not being tracked. + */ + getFacingCameraAngle(): number | null + + /** + * Returns the pitch rotation of the hand in degrees. + * This is the result of the dot product from a forward vector, + * created by the middle knuckle and wrist, and the camera's forward vector. + * + * A value greater than 0 is pointing up. + * A value less than 0 is pointing down. + * + * Returns null if the hand is not being tracked. + */ + getPalmPitchAngle(): number | null + + /** + * Approximates the center of the palm, as we currently do not have a center palm landmark. + * Used to determine whether hands are overlapping + * @returns the calculated center or null if any of the landmarks don't exist + */ + getPalmCenter(): vec3 | null + + /** + * @returns attached {@link HandVisuals} or null if none is attached. + */ + getHandVisuals(): HandVisuals | null + + /** + * Attaches {@link HandVisuals} to the tracked hand + */ + attachHandVisuals(handVisuals: HandVisuals): void + + /** + * Detaches {@link HandVisuals} to the tracked hand + */ + detachHandVisuals(handVisuals: HandVisuals): void +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts.meta new file mode 100644 index 00000000..354755e6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/BaseHand.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 7e4e2a89-8b4a-4d72-a21f-7eb5bfc1e4fa + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 7e4e2a89-8b4a-4d72-a21f-7eb5bfc1e4fa + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 80817cab-feb7-41da-9adb-3634224f4137 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts new file mode 100644 index 00000000..ba5bb4f0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts @@ -0,0 +1,30 @@ +import {Singleton} from "../../Decorators/Singleton" +import HandTrackingAssetProvider from "./HandTrackingAssetProvider" +import {HandType} from "./HandType" + +const LEFT_HAND_ASSET = requireAsset("./LeftHandAsset.handTracking3D") +const RIGHT_HAND_ASSET = requireAsset("./RightHandAsset.handTracking3D") + +/** + * Implementation of the default hand tracking asset provider which is the default + * asset from Lens Studio + */ +@Singleton +export default class DefaultHandTrackingAssetProvider + implements HandTrackingAssetProvider +{ + public static getInstance: () => DefaultHandTrackingAssetProvider + + private leftHandAsset: HandTracking3DAsset + private rightHandAsset: HandTracking3DAsset + + constructor() { + this.leftHandAsset = LEFT_HAND_ASSET as HandTracking3DAsset + this.rightHandAsset = RIGHT_HAND_ASSET as HandTracking3DAsset + } + + /** @inheritdoc */ + get(handType: HandType): Asset { + return handType === "left" ? this.leftHandAsset : this.rightHandAsset + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts.meta new file mode 100644 index 00000000..241f461e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/DefaultHandTrackingAssetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 7ee104f2-686a-4e02-a5de-e94e247eea97 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 7ee104f2-686a-4e02-a5de-e94e247eea97 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 0f13960d-028b-45e5-ade7-728b179428bc + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts new file mode 100644 index 00000000..141bd5bd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts @@ -0,0 +1,41 @@ +import {Singleton} from "../../../Decorators/Singleton" +import NativeLogger from "../../../Utils/NativeLogger" + +/** + * Provides gesture related APIs. + */ +@Singleton +export default class GestureModuleProvider { + public static getInstance: () => GestureModuleProvider + private readonly log: NativeLogger + private loadedModule: GestureModule | undefined + + constructor() { + this.log = new NativeLogger("GestureModuleProvider") + } + + /** + * Tries to create an ScriptObject.GestureModule using {@link ModuleLoader}. + * Stores and returns the created object if it can be successfully created. + * Returns undefined if error happens during creation. + * + * @returns the created {@link GestureModule} or undefined if it cannot be created. + */ + getModule(): GestureModule | undefined { + if (this.loadedModule !== undefined) { + return this.loadedModule + } + + if (GestureModule.HandType === undefined) { + return undefined + } + + try { + this.loadedModule = require("LensStudio:GestureModule") as GestureModule + return this.loadedModule + } catch (error) { + this.log.e(`Error creating module: ${error}`) + return undefined + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts.meta new file mode 100644 index 00000000..5955e4be --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/GestureModuleProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 22e1ef0f-e860-4e8d-b8ea-f9cb204d3637 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 22e1ef0f-e860-4e8d-b8ea-f9cb204d3637 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6bb48623-39a3-4a51-8db6-173a93f575de + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts new file mode 100644 index 00000000..cd8c4151 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts @@ -0,0 +1,43 @@ +import {Singleton} from "../../../Decorators/Singleton" +import NativeLogger from "../../../Utils/NativeLogger" + +/** + * Provides motion related APIs + */ +@Singleton +export default class MotionControllerProvider { + public static getInstance: () => MotionControllerProvider + private readonly log: NativeLogger + private loadedModule: MotionControllerModule | undefined + + constructor() { + this.log = new NativeLogger("MotionControllerProvider") + } + + /** + * Tries to create an ScriptObject.MotionControllerModule using {@link ModuleLoader}. + * Stores and returns the created object if it can be successfully created. + * Returns undefined if error happens during creation. + * + * @returns the created {@link MotionControllerModule} or undefined if it cannot be + * created. + */ + getModule(): MotionControllerModule | undefined { + if (this.loadedModule !== undefined) { + return this.loadedModule + } + + if (MotionController.MotionType === undefined) { + return undefined + } + + try { + this.loadedModule = + require("LensStudio:MotionControllerModule") as MotionControllerModule + return this.loadedModule + } catch (error) { + this.log.e(`Error creating module: ${error}`) + return undefined + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts.meta new file mode 100644 index 00000000..70235c7c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/MotionControllerProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 0e5df912-3ca5-43f0-9133-2c8ca028d919 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 0e5df912-3ca5-43f0-9133-2c8ca028d919 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! fd6f444a-8124-4b25-8946-b184ad30b3e5 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts new file mode 100644 index 00000000..e41837d8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts @@ -0,0 +1,55 @@ +import NativeLogger from "../../../../Utils/NativeLogger" +import GestureModuleProvider from "../../GestureProvider/GestureModuleProvider" +import {PalmTapEventType} from "../PalmTapEvent" +import PalmTapDetectorStateMachine from "./PalmTapDetectorStateMachine" + +const TAG = "PalmTapDetector" +/** + * Handles PalmTap API events with StateMachine + */ +export default class PalmTapDetector { + private gestureModule: GestureModule = (() => { + const gestureModuleProvider: GestureModuleProvider = + GestureModuleProvider.getInstance() + const gestureModule = gestureModuleProvider.getModule() + if (gestureModule === undefined) { + throw new Error("GestureModule is undefined in PalmTapDetector") + } + return gestureModule + })() + + private palmTapDetectorStateMachine: PalmTapDetectorStateMachine = + new PalmTapDetectorStateMachine() + + private log = new NativeLogger(TAG) + + constructor(gestureHandType: GestureModule.HandType) { + this.setupPalmTapApi(gestureHandType) + } + + /** + * returns true if the user is currently tapping + */ + get isTapping(): boolean { + return this.palmTapDetectorStateMachine.isTapping() + } + + private setupPalmTapApi(gestureHandType: GestureModule.HandType) { + this.log.d("Setting up palm tap api") + + try { + this.gestureModule.getPalmTapDownEvent(gestureHandType).add(() => { + this.log.v("Palm tap down event from GestureModule") + this.palmTapDetectorStateMachine.notifyPalmTapEvent( + PalmTapEventType.Down + ) + }) + this.gestureModule.getPalmTapUpEvent(gestureHandType).add(() => { + this.log.v("Palm tap up event from GestureModule") + this.palmTapDetectorStateMachine.notifyPalmTapEvent(PalmTapEventType.Up) + }) + } catch (error) { + throw new Error(`Error setting up palmTap subscriptions ${error}`) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts.meta new file mode 100644 index 00000000..ee791040 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetector.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 4072cb3d-97a2-42ab-92d6-7ed88274b998 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4072cb3d-97a2-42ab-92d6-7ed88274b998 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 728ce951-66c3-424f-bac4-50c21ebef3d1 + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts new file mode 100644 index 00000000..3d35a70c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts @@ -0,0 +1,80 @@ +import Event from "../../../../Utils/Event" +import StateMachine from "../../../../Utils/StateMachine" +import {InteractionConfigurationProvider} from "../../../InteractionConfigurationProvider/InteractionConfigurationProvider" +import {PalmTapEventType} from "../PalmTapEvent" + +const TAG = "PalmTapDetectorStateMachine" + +export enum PalmTapDetectorState { + Idle = "Idle", + Tap = "Tap", +} + +/** + * Tracks states and transitions of palm tapping + */ +export default class PalmTapDetectorStateMachine { + private interactionConfigurationProvider: InteractionConfigurationProvider = + InteractionConfigurationProvider.getInstance() + + private stateMachine = new StateMachine("PalmTapDetectorStateMachine") + + private onPalmTapDownEvent = new Event() + readonly onPalmTapDown = this.onPalmTapDownEvent.publicApi() + + private onPalmTapUpEvent = new Event() + readonly onPalmTapUp = this.onPalmTapUpEvent.publicApi() + + constructor() { + this.setupStateMachine() + } + + /** + * @returns whether the user is tapping + */ + public isTapping(): boolean { + return this.stateMachine.currentState?.name === PalmTapDetectorState.Tap + } + + /** + * Notifies that a palm tap event has been detected + * @param palmTapEventType The type of event that was detected + */ + public notifyPalmTapEvent(palmTapEventType: PalmTapEventType): void { + this.stateMachine.sendSignal(palmTapEventType) + } + + private setupStateMachine() { + this.stateMachine.addState({ + name: PalmTapDetectorState.Idle, + onEnter: () => {}, + transitions: [ + { + nextStateName: PalmTapDetectorState.Tap, + checkOnSignal: (signal: string) => { + return signal === PalmTapEventType.Down + }, + }, + ], + }) + + this.stateMachine.addState({ + name: PalmTapDetectorState.Tap, + onEnter: () => { + this.onPalmTapDownEvent.invoke() + }, + onExit: () => { + this.onPalmTapUpEvent.invoke() + }, + transitions: [ + { + nextStateName: PalmTapDetectorState.Idle, + checkOnSignal: (signal: string) => { + return signal === PalmTapEventType.Up + }, + }, + ], + }) + this.stateMachine.enterState(PalmTapDetectorState.Idle) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts.meta new file mode 100644 index 00000000..c8b8e3b5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetection/PalmTapDetectorStateMachine.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 6205b88a-de58-405f-b074-81ce1dae55cb + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6205b88a-de58-405f-b074-81ce1dae55cb + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 5d7d85df-7afc-44c0-9590-fe8761e7352c + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts new file mode 100644 index 00000000..dbb73886 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts @@ -0,0 +1,11 @@ +/** + * Describes the state of Palm Tap API + */ +export type PalmTapDetectionEvent = + | { + state: "unsupported" + } + | { + state: "available" + data: {isTapping: boolean} + } diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts.meta new file mode 100644 index 00000000..7a5284a2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapDetectionEvent.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 2559d4bf-fb96-4b2d-b3c1-f88e18cc6830 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2559d4bf-fb96-4b2d-b3c1-f88e18cc6830 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 27005ecb-ecdc-4cc8-a529-2b9eca35f95b + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts new file mode 100644 index 00000000..672e3c8d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts @@ -0,0 +1,7 @@ +/** + * Describes the Palm Tap event types + */ +export enum PalmTapEventType { + Down = "Down", + Up = "Up", +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts.meta new file mode 100644 index 00000000..21fa1726 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PalmTapEvent.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 972f1d3e-6e7b-431b-9a81-66a2f77563e1 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 972f1d3e-6e7b-431b-9a81-66a2f77563e1 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 06a77497-8b14-425a-aa57-a3caf182aed8 + ImporterSettings: ! + {} + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts new file mode 100644 index 00000000..6e504e18 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts @@ -0,0 +1,80 @@ +import Event, {PublicApi} from "../../../../../Utils/Event" +import NativeLogger from "../../../../../Utils/NativeLogger" +import GestureModuleProvider from "../../../GestureProvider/GestureModuleProvider" +import {HandType} from "../../../HandType" +import {PinchEventType} from "../../PinchEventType" +import {PinchDetectionStrategy} from "./PinchDetectionStrategy" + +const TAG = "HciPinchDetection" + +export type HciPinchDetectionStrategyConfig = { + handType: HandType +} + +/** + * Class to detect pinch by calling into HCI Gesture APIs at lenscore level + */ +export default class HciPinchDetectionStrategy + implements PinchDetectionStrategy +{ + // Native Logging + private log = new NativeLogger(TAG) + + private gestureModuleProvider: GestureModuleProvider = + GestureModuleProvider.getInstance() + + private gestureModule: GestureModule | undefined = undefined + private _onPinchDetectedEvent = new Event() + private _onPinchDetected = this._onPinchDetectedEvent.publicApi() + + private _onPinchProximityEvent = new Event() + private _onPinchProximity = this._onPinchProximityEvent.publicApi() + + constructor(private config: HciPinchDetectionStrategyConfig) { + this.setupPinchApi() + } + + /** @inheritdoc */ + get onPinchDetected(): PublicApi { + return this._onPinchDetected + } + + /** @inheritdoc */ + get onPinchProximity(): PublicApi { + return this._onPinchProximity + } + + private get gestureHandType(): GestureModule.HandType { + return this.config.handType === "right" + ? GestureModule.HandType.Right + : GestureModule.HandType.Left + } + + private setupPinchApi() { + this.gestureModule = this.gestureModuleProvider.getModule() + if (this.gestureModule !== undefined) { + this.gestureModule.getPinchDownEvent(this.gestureHandType).add(() => { + this._onPinchDetectedEvent.invoke(PinchEventType.Down) + }) + + this.gestureModule.getPinchUpEvent(this.gestureHandType).add(() => { + this._onPinchDetectedEvent.invoke(PinchEventType.Up) + }) + + if (this.gestureModule.getPinchStrengthEvent !== undefined) { + this.gestureModule + .getPinchStrengthEvent(this.gestureHandType) + .add((args: PinchStrengthArgs) => { + const proximity = args.strength + this._onPinchProximityEvent.invoke(proximity) + this.log.v( + "PinchEvent : " + + "Pinch Strength Event" + + " : proximity : " + + proximity + ) + }) + } + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts.meta new file mode 100644 index 00000000..52448489 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HciPinchDetectionStrategy.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 3dd21c91-97ba-49a4-8a1d-9df2a8d18d3f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 3dd21c91-97ba-49a4-8a1d-9df2a8d18d3f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 01d644af-9bff-487c-a623-44242a2ae540 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts new file mode 100644 index 00000000..53fec56c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts @@ -0,0 +1,128 @@ +import BistableThreshold from "../../../../../Utils/BistableThreshold" +import Event, {PublicApi} from "../../../../../Utils/Event" +import {LensConfig} from "../../../../../Utils/LensConfig" +import {clamp, mapValue} from "../../../../../Utils/mathUtils" +import NativeLogger from "../../../../../Utils/NativeLogger" +import WorldCameraFinderProvider from "../../../../CameraProvider/WorldCameraFinderProvider" +import {Keypoint} from "../../../Keypoint" +import {PinchEventType} from "../../PinchEventType" +import {PinchDetectionStrategy} from "../DetectionStrategies/PinchDetectionStrategy" + +const TAG = "HeuristicPinchDetection" +const MIN_PINCH_DISTANCE = 2 +const MAX_PINCH_DISTANCE = 7 + +export type HeuristicPinchDetectionStrategyConfig = { + thumbTip: Keypoint + indexTip: Keypoint + pinchDownThreshold?: number +} + +/** + * Class to detect pinch using a bistable threshold and the distance between index and thumb tips + */ +export default class HeuristicPinchDetectionStrategy + implements PinchDetectionStrategy +{ + // Native Logging + private log = new NativeLogger(TAG) + + private worldCamera = WorldCameraFinderProvider.getInstance() + + private pinchEnterThreshold = new BistableThreshold({ + edgeActivate: this.config.pinchDownThreshold ?? 1.75, + edgeDeactivate: 3.5, + }) + private thumbProjectThreshold = new BistableThreshold({ + edgeActivate: 3.0, + edgeDeactivate: 4.5, + }) + + private currentPinchProximity = 0 + private previousPinchProximity = 0 + + private _onPinchDetectedEvent = new Event() + private _onPinchDetected = this._onPinchDetectedEvent.publicApi() + + private _onPinchProximityEvent = new Event() + private _onPinchProximity = this._onPinchProximityEvent.publicApi() + + constructor(private config: HeuristicPinchDetectionStrategyConfig) { + const lensConfig = LensConfig.getInstance() + const updateDispatcher = lensConfig.updateDispatcher + updateDispatcher + .createUpdateEvent("HeuristicPinchDetectionStrategyUpdate") + .bind(() => { + this.update() + }) + } + + /** @inheritdoc */ + get onPinchDetected(): PublicApi { + return this._onPinchDetected + } + + /** @inheritdoc */ + get onPinchProximity(): PublicApi { + return this._onPinchProximity + } + + private update() { + const adjustedThumbPosition = this.adjustThumbDepthToPointer( + this.config.thumbTip.position, + this.config.indexTip.position + ) + + const pinchDistance = adjustedThumbPosition.sub( + this.config.indexTip.position + ).lengthSquared + const thresholdResult = this.pinchEnterThreshold.update(pinchDistance) + + // thresholdResult will be null if the bistable threshold was not just crossed, false if just crossed to "deactivate" side, and true if just crossed to "activate" side + if (thresholdResult === false) { + this._onPinchDetectedEvent.invoke(PinchEventType.Up) + } else if (thresholdResult === true) { + this._onPinchDetectedEvent.invoke(PinchEventType.Down) + } + + this.updatePinchProximity() + } + + private updatePinchProximity(): void { + const distance = this.config.thumbTip.position.distance( + this.config.indexTip.position + ) + if (distance === null || distance > MAX_PINCH_DISTANCE) { + this.currentPinchProximity = 0 + } + + const mappedDistance = mapValue( + clamp(distance, MIN_PINCH_DISTANCE, MAX_PINCH_DISTANCE), + MAX_PINCH_DISTANCE, + MIN_PINCH_DISTANCE, + 1, + 0 + ) + + this.currentPinchProximity = 1 - mappedDistance + + if (this.currentPinchProximity !== this.previousPinchProximity) { + this.previousPinchProximity = this.currentPinchProximity + this._onPinchProximityEvent.invoke(this.currentPinchProximity) + } + } + + private adjustThumbDepthToPointer(thumb: vec3, pointer: vec3) { + // project the thumb onto the plane that the pointer is on + const cameraPosition = this.worldCamera.getWorldPosition() + const thumbRay = thumb.sub(cameraPosition) + const thumbDir = thumbRay.normalize() + const pointerRay = pointer.sub(cameraPosition) + const pointerDist = pointerRay.length + const adjustedThumb = cameraPosition.add(thumbDir.uniformScale(pointerDist)) + const change = adjustedThumb.sub(thumb).length + this.thumbProjectThreshold.update(change) + const closeEnough = this.thumbProjectThreshold.getState() + return closeEnough === true ? adjustedThumb : thumb + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts.meta new file mode 100644 index 00000000..9c1e09d0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/HeuristicPinchDetectionStrategy.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 9bc1ad7b-53e8-4e3d-a7af-8c2efaca6c23 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 9bc1ad7b-53e8-4e3d-a7af-8c2efaca6c23 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! cae846cd-7853-4616-ada5-1da80fa0e6ba + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts new file mode 100644 index 00000000..c44d9672 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts @@ -0,0 +1,21 @@ +import {PublicApi} from "../../../../../Utils/Event" +import {PinchEventType} from "../../PinchEventType" + +/** + * Interface that all methods of detecting pinch should adhere to in order to be usable in PinchDetector + */ +export interface PinchDetectionStrategy { + /** + * Event invokes when a pinch is down or up or cancelled + */ + onPinchDetected: PublicApi + + /** + * Event invoked when a pinch proximity occurs. + * Normalized value from 0-1, where: + * 0 is the distance from a finger tip to the thumb tip in + * resting/neutral hand pose. + * 1 is when a finger tip to thumb tip are touching/pinching + */ + onPinchProximity: PublicApi +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts.meta new file mode 100644 index 00000000..02b8dfdb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/DetectionStrategies/PinchDetectionStrategy.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 2cbacef9-21a7-415d-a293-544fa86993fe + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2cbacef9-21a7-415d-a293-544fa86993fe + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 39c0b039-eed4-4f30-ba15-b4bf9c10cdd9 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts new file mode 100644 index 00000000..3f1b90d6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts @@ -0,0 +1,120 @@ +import {PublicApi} from "../../../../Utils/Event" +import HciPinchDetectionStrategy, { + HciPinchDetectionStrategyConfig, +} from "./DetectionStrategies/HciPinchDetectionStrategy" +import HeuristicPinchDetectionStrategy, { + HeuristicPinchDetectionStrategyConfig, +} from "./DetectionStrategies/HeuristicPinchDetectionStrategy" +import {PinchDetectionStrategy} from "./DetectionStrategies/PinchDetectionStrategy" +import PinchDetectorStateMachine from "./PinchDetectorStateMachine" + +const TAG = "PinchDetector" + +export enum PinchDetectionSelection { + Heuristic = "Heuristic", + LensCoreML = "LensCore ML", + Mock = "Mock", +} + +export type PinchDetectorConfig = HciPinchDetectionStrategyConfig & + HeuristicPinchDetectionStrategyConfig & { + onHandLost: PublicApi + isTracked: () => boolean + pinchDownThreshold?: number + pinchDetectionSelection?: PinchDetectionSelection + } + +/** + * Wraps PinchDetectionStrategy inside PinchDetectorStateMachine for pinch events + */ +export class PinchDetector { + private pinchDetectionStrategy + private pinchDetectorStateMachine = new PinchDetectorStateMachine() + + private pinchStrength = 0 + + constructor(private config: PinchDetectorConfig) { + config.pinchDownThreshold ??= 1.75 + config.pinchDetectionSelection ??= PinchDetectionSelection.LensCoreML + + this.pinchDetectionStrategy = this.createPinchDetectionStrategy() + + this.setupPinchEventCallback() + } + + /** + * Event called when the user has successfully pinched down. + */ + get onPinchDown(): PublicApi { + return this.pinchDetectorStateMachine.onPinchDown + } + + /** + * Event called when the user has released pinching after they + * have successfully pinched down. + */ + get onPinchUp(): PublicApi { + return this.pinchDetectorStateMachine.onPinchUp + } + + /** + * Event called when the user's pinch is canceled by the system. + */ + get onPinchCancel(): PublicApi { + return this.pinchDetectorStateMachine.onPinchCancel + } + + /** + * Determines if the user is pinching + */ + isPinching(): boolean { + return this.pinchDetectorStateMachine.isPinching() + } + + /** + * Returns a normalized value from 0-1, where: + * 0 is the distance from a finger tip to the thumb tip in + * resting/neutral hand pose. + * 1 is when a finger tip to thumb tip are touching/pinching + */ + getPinchStrength(): number { + if (this.config.isTracked()) { + return this.pinchStrength + } + + return 0 + } + + private createPinchDetectionStrategy(): PinchDetectionStrategy { + const pinchDetection = this.config.pinchDetectionSelection + if (pinchDetection === undefined) { + throw new Error("A PinchDetectionStrategy needs to be specified.") + } + switch (pinchDetection) { + case PinchDetectionSelection.Heuristic: { + return new HeuristicPinchDetectionStrategy({ + ...this.config, + pinchDownThreshold: this.config.pinchDownThreshold, + }) + } + case PinchDetectionSelection.LensCoreML: { + return new HciPinchDetectionStrategy(this.config) + } + default: { + throw new Error( + `${TAG}: No matching PinchDetectionSelection found, could not create strategy` + ) + } + } + } + + private setupPinchEventCallback() { + this.pinchDetectionStrategy.onPinchDetected.add((pinchEvent) => { + this.pinchDetectorStateMachine.notifyPinchEvent(pinchEvent) + }) + + this.pinchDetectionStrategy.onPinchProximity.add((proximity: number) => { + this.pinchStrength = proximity + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts.meta new file mode 100644 index 00000000..ca89104c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetector.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 931e07c3-bb61-4c4b-b404-1a8e937326bf + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 931e07c3-bb61-4c4b-b404-1a8e937326bf + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c0a4f367-2acc-4bae-8842-e9113bfb76a1 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts new file mode 100644 index 00000000..7fa25e50 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts @@ -0,0 +1,95 @@ +import Event from "../../../../Utils/Event" +import NativeLogger from "../../../../Utils/NativeLogger" +import StateMachine from "../../../../Utils/StateMachine" +import {PinchEventType} from "../PinchEventType" + +const TAG = "PinchDetectorStateMachine" + +export enum PinchDetectorState { + Idle = "Idle", + Pinching = "Pinching", +} + +/** + * Tracks states and transitions of pinching + */ +export default class PinchDetectorStateMachine { + // Native Logging + private log = new NativeLogger(TAG) + + private stateMachine = new StateMachine("PinchDetectorStateMachine") + + private onPinchDownEvent = new Event() + readonly onPinchDown = this.onPinchDownEvent.publicApi() + + private onPinchUpEvent = new Event() + readonly onPinchUp = this.onPinchUpEvent.publicApi() + + private onPinchCancelEvent = new Event() + readonly onPinchCancel = this.onPinchCancelEvent.publicApi() + + constructor() { + this.setupStateMachine() + this.stateMachine.enterState(PinchDetectorState.Idle) + } + + /** + * Determines if the user is pinching + * @returns whether the state machine is currently in the Pinching state + */ + public isPinching(): boolean { + return this.stateMachine.currentState?.name === PinchDetectorState.Pinching + } + + /** + * Notifies that a pinch event has been detected + * @param pinchEventType The type of event that was detected + */ + public notifyPinchEvent(pinchEventType: PinchEventType): void { + this.stateMachine.sendSignal(pinchEventType) + } + + private setupStateMachine() { + this.stateMachine.addState({ + name: PinchDetectorState.Idle, + onEnter: () => {}, + transitions: [ + { + nextStateName: PinchDetectorState.Pinching, + checkOnSignal: (signal: string) => { + if (signal === PinchEventType.Down) { + this.onPinchDownEvent.invoke() + this.log.v("PinchEvent : " + "Pinch Down Event") + return true + } + + return false + }, + }, + ], + }) + + this.stateMachine.addState({ + name: PinchDetectorState.Pinching, + onEnter: () => {}, + transitions: [ + { + nextStateName: PinchDetectorState.Idle, + checkOnSignal: (signal: string) => { + if (signal === PinchEventType.Up) { + this.onPinchUpEvent.invoke() + this.log.v("PinchEvent : " + "Pinch Up Event") + return true + } else if (signal === PinchEventType.Cancel) { + this.onPinchCancelEvent.invoke() + this.log.v("PinchEvent : " + "Pinch Cancel Event") + return true + } + + return false + }, + }, + ], + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts.meta new file mode 100644 index 00000000..bfebaf6a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchDetection/PinchDetectorStateMachine.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! d28f0346-01b7-49a1-b667-bba12b26165c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d28f0346-01b7-49a1-b667-bba12b26165c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d208f04d-d94f-4650-a7ac-56d5736286cc + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts new file mode 100644 index 00000000..7476d7f5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts @@ -0,0 +1,15 @@ +import {HandType} from "../HandType" + +/** + * Describes a pinch event. The finger is optional as on an exit event we don't care about the finger. + */ +export type PinchEvent = { + type: "enter" | "exit" + hand: HandType +} + +export enum PinchEventType { + Down = "Down", + Up = "Up", + Cancel = "Cancel", +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts.meta new file mode 100644 index 00000000..51202d91 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/GestureProvider/PinchEventType.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 856a15d1-46cb-4d44-a8d0-b3e4dedba930 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 856a15d1-46cb-4d44-a8d0-b3e4dedba930 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6b4ba523-46c4-412c-8cdb-c1acd322dd05 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts new file mode 100644 index 00000000..9643f064 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts @@ -0,0 +1,76 @@ +import {Singleton} from "../../Decorators/Singleton" +import {HandType} from "./HandType" +import TrackedHand from "./TrackedHand" + +const TAG = "HandInputData" + +export type HandInputDataConfig = { + dominantHand: HandType +} + +/** + * Main class for the hand data provider apis. + * Available apis: + * - getHand(handType: {@link HandType}) => {@link BaseHand} returns BaseHand Object that + * represents {@link HandType} + * - getDominantHand() => {@link BaseHand} returns BaseHand Object that + * represents the dominant hand as specified in the system through a Tweak. + * - getNonDominantHand() => {@link BaseHand} returns BaseHand Object that + * represents the non dominant hand as specified in the system through a Tweak. + */ +@Singleton +export class HandInputData { + public static getInstance: () => HandInputData + + private _enabled = true + + private leftHand: TrackedHand + private rightHand: TrackedHand + private config: HandInputDataConfig + constructor() { + this.config = { + dominantHand: "right", + } + this.leftHand = this.createHand("left") + this.rightHand = this.createHand("right") + } + + /** + * Sets the enabled state of the left and right hand. + * Events will not be called if isEnabled is set to false. + */ + public set enabled(enabled: boolean) { + if (this._enabled === enabled) { + return + } + + this.leftHand.setEnabled(enabled) + this.rightHand.setEnabled(enabled) + this._enabled = enabled + } + + private createHand(handType: HandType): TrackedHand { + return new TrackedHand({ + handType: handType, + isDominantHand: handType === this.config.dominantHand, + }) + } + + public getHand(handType: HandType): TrackedHand { + return handType === "left" ? this.leftHand : this.rightHand + } + public getDominantHand(): TrackedHand { + return this.getHand(this.config.dominantHand) + } + public getNonDominantHand(): TrackedHand { + const nonDominantHandType = + this.config.dominantHand === "right" ? "left" : "right" + return this.getHand(nonDominantHandType) + } + public setDominantHand(dominant: HandType) { + this.config.dominantHand = dominant + + this.getHand("left").setIsDominantHand(dominant === "left") + this.getHand("right").setIsDominantHand(dominant === "right") + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts.meta new file mode 100644 index 00000000..15f2c388 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandInputData.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 127f453d-170d-4c9f-9a49-8318200fe04b + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 127f453d-170d-4c9f-9a49-8318200fe04b + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 88389c08-2cb7-4672-af4c-3fbdd7d95c34 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts new file mode 100644 index 00000000..920bee6e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts @@ -0,0 +1,13 @@ +import {HandType} from "./HandType" + +/** + * Interface defining apis to retrieve hand tracking assets + */ +export default interface HandTrackingAssetProvider { + /** + * Returns the associated {@link Object3DAsset} + * + * @param handType the {@link HandType} for this asset + */ + get(handType: HandType): Asset +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts.meta new file mode 100644 index 00000000..bebe94b5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandTrackingAssetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 279b76a8-0ab3-4f82-9ef1-9bf580a738f9 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 279b76a8-0ab3-4f82-9ef1-9bf580a738f9 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 074ea4f3-fccb-4e50-b706-c3022357d1f6 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts new file mode 100644 index 00000000..29cb147e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts @@ -0,0 +1,5 @@ +/** + * Describes a hand type, can be left or right + */ +export const AllHandTypes = ["left", "right"] as const +export type HandType = typeof AllHandTypes[number] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts.meta new file mode 100644 index 00000000..6826d877 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandType.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 182d99db-0f3e-4259-952f-dcdb096e91fb + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 182d99db-0f3e-4259-952f-dcdb096e91fb + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b0d6d2b8-1058-4920-b3d5-27833ccde075 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts new file mode 100644 index 00000000..7067c039 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts @@ -0,0 +1,154 @@ +/** + * Provides the SceneObject to be attached to the {@link BaseHand} + */ +export interface HandVisuals { + readonly handMesh: RenderMeshVisual | undefined + + /** + * The root {@link SceneObject}, parent of the hand rig and hand mesh + */ + readonly root: SceneObject | undefined + + /** + * The {@link SceneObject} of the wrist joint + */ + readonly wrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the thumbToWrist joint + */ + readonly thumbToWrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the thumbBaseJoint joint + */ + readonly thumbBaseJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the thumbKnuckle joint + */ + readonly thumbKnuckle: SceneObject | undefined + + /** + * The {@link SceneObject} of the thumbMidJoint joint + */ + readonly thumbMidJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the thumbTip joint + */ + readonly thumbTip: SceneObject | undefined + + /** + * The {@link SceneObject} of the indexToWrist joint + */ + readonly indexToWrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the indexKnuckle joint + */ + readonly indexKnuckle: SceneObject | undefined + + /** + * The {@link SceneObject} of the indexMidJoint joint + */ + readonly indexMidJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the indexUpperJoint joint + */ + readonly indexUpperJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the indexTip joint + */ + readonly indexTip: SceneObject | undefined + + /** + * The {@link SceneObject} of the middleToWrist joint + */ + readonly middleToWrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the middleKnuckle joint + */ + readonly middleKnuckle: SceneObject | undefined + + /** + * The {@link SceneObject} of the middleMidJoint joint + */ + readonly middleMidJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the middleUpperJoint joint + */ + readonly middleUpperJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the middleTip joint + */ + readonly middleTip: SceneObject | undefined + + /** + * The {@link SceneObject} of the ringToWrist joint + */ + readonly ringToWrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the ringKnuckle joint + */ + readonly ringKnuckle: SceneObject | undefined + + /** + * The {@link SceneObject} of the ringMidJoint joint + */ + readonly ringMidJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the ringUpperJoint joint + */ + readonly ringUpperJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the ringTip joint + */ + readonly ringTip: SceneObject | undefined + + /** + * The {@link SceneObject} of the pinkyToWrist joint + */ + readonly pinkyToWrist: SceneObject | undefined + + /** + * The {@link SceneObject} of the pinkyKnuckle joint + */ + readonly pinkyKnuckle: SceneObject | undefined + + /** + * The {@link SceneObject} of the pinkyMidJoint joint + */ + readonly pinkyMidJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the pinkyUpperJoint joint + */ + readonly pinkyUpperJoint: SceneObject | undefined + + /** + * The {@link SceneObject} of the pinkyTip joint + */ + readonly pinkyTip: SceneObject | undefined + + /** + * True when this class is ready to use. + * + * @remarks + * {@link initialize} can be used to initialize the instance. + */ + readonly initialized: boolean + + /** + * Sets up all joint {@link Transform}s and sets {@link initialized} to true. + */ + initialize(): void +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts.meta new file mode 100644 index 00000000..4a403ab0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/HandVisuals.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 86bcd2ab-c44c-4f79-a8c7-e14ef1fa78be + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 86bcd2ab-c44c-4f79-a8c7-e14ef1fa78be + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! fdf1f778-d7a8-4f50-8fd3-9d5a2557538f + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts new file mode 100644 index 00000000..8ea0944e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts @@ -0,0 +1,135 @@ +export type JointNode = { + name: string + children: JointNode[] +} + +export const JOINT_HIERARCHY: JointNode = { + name: "LeftHandRig", + children: [ + { + name: "wrist", + children: [ + { + name: "wrist_to_thumb", + children: [ + { + name: "thumb-0", + children: [ + { + name: "thumb-1", + children: [ + { + name: "thumb-2", + children: [ + { + name: "thumb-3", + children: [], + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + name: "wrist_to_index", + children: [ + { + name: "index-0", + children: [ + { + name: "index-1", + children: [ + { + name: "index-2", + children: [ + { + name: "index-3", + children: [], + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + name: "wrist_to_mid", + children: [ + { + name: "mid-0", + children: [ + { + name: "mid-1", + children: [ + { + name: "mid-2", + children: [ + { + name: "mid-3", + children: [], + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + name: "wrist_to_ring", + children: [ + { + name: "ring-0", + children: [ + { + name: "ring-1", + children: [ + { + name: "ring-2", + children: [ + { + name: "ring-3", + children: [], + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + name: "wrist_to_pinky", + children: [ + { + name: "pinky-0", + children: [ + { + name: "pinky-1", + children: [ + { + name: "pinky-2", + children: [ + { + name: "pinky-3", + children: [], + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts.meta new file mode 100644 index 00000000..774cb477 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Joints.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f528c93e-977b-4f09-a88b-8eea5718a577 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f528c93e-977b-4f09-a88b-8eea5718a577 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 96e5ff30-296c-4ee8-ae86-c8a605e349a7 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts new file mode 100644 index 00000000..c4c5433d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts @@ -0,0 +1,125 @@ +import WorldCameraFinderProvider from "../CameraProvider/WorldCameraFinderProvider" +import {validate} from "../../Utils/validate" + +const TAG = "Keypoint" + +/** + * This class represents a keypoint represneting one of the many joints of a Hand in 3D space, providing methods to retrieve its world position, world rotation, and screen-space position. It uses an ObjectTracking3D component to create an attachment point and a WorldCameraFinderProvider to convert world coordinates to screen coordinates. + * + */ +export class Keypoint { + private worldCamera = WorldCameraFinderProvider.getInstance() + private transform: Transform + private attachmentPoint: SceneObject + + constructor( + readonly name: string, + private objectTracking3DComponent: ObjectTracking3D, + ) { + this.attachmentPoint = this.objectTracking3DComponent.createAttachmentPoint( + this.name, + ) + this.transform = this.attachmentPoint.getTransform() + } + + /** + * Returns the world position of this keypoint + */ + get position(): vec3 { + return this.transform.getWorldPosition() + } + + /** + * Returns the world rotation of this keypoint + */ + get rotation(): quat { + return this.transform.getWorldRotation() + } + + /** + * Returns the screen-space position of this keypoint + */ + get screenPosition(): vec2 { + return this.worldCamera.worldSpaceToScreenSpace( + this.position.x, + this.position.y, + this.position.z, + ) + } + + /** + * Returns the normalized right vector of this keypoint + */ + get right(): vec3 { + return this.transform.right + } + + /** + * Returns the normalized right vector of this keypoint + */ + get up(): vec3 { + return this.transform.up + } + + /** + * Returns the normalized right vector of this keypoint + */ + get forward(): vec3 { + return this.transform.forward + } + + /** + * Returns the normalized right vector of this keypoint + */ + get left(): vec3 { + return this.transform.left + } + + /** + * Returns the normalized right vector of this keypoint + */ + get down(): vec3 { + return this.transform.down + } + + /** + * Returns the normalized right vector of this keypoint + */ + get back(): vec3 { + return this.transform.back + } + + /** + * Get the {@link SceneObject} attached to this keypoint + * + * @returns sceneObject - object attached to this keypoint + */ + getAttachmentPoint(): SceneObject { + return this.attachmentPoint + } + + /** + * Overrides the {@link SceneObject} attached to this keypoint + * + * @param sceneObject - object to attach + */ + addAttachmentPoint(sceneObject: SceneObject | undefined): void { + validate(sceneObject) + this.objectTracking3DComponent.removeAttachmentPoint(this.attachmentPoint) + this.attachmentPoint = sceneObject + this.transform = sceneObject.getTransform() + this.objectTracking3DComponent.addAttachmentPoint(this.name, sceneObject) + } + + /** + * Sets the attachment point to the default created one. This function + * is usually called when the {@link HandVisuals} is destroyed, and we don't + * need to remove the attachment point. + */ + clearAttachmentPoint(): void { + this.attachmentPoint = this.objectTracking3DComponent.createAttachmentPoint( + this.name, + ) + this.transform = this.attachmentPoint.getTransform() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts.meta new file mode 100644 index 00000000..da30cfdc --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/Keypoint.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 3e38b411-9333-424e-b075-e67b30ada806 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 3e38b411-9333-424e-b075-e67b30ada806 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 225eeed7-8972-487d-872b-2aee2dc8f135 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts new file mode 100644 index 00000000..dccdeabb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts @@ -0,0 +1,147 @@ +/** + * A handy list of Landmark Names + */ +export enum LandmarkName { + INDEX_0 = "index-0", + INDEX_1 = "index-1", + INDEX_2 = "index-2", + INDEX_3 = "index-3", + + MIDDLE_0 = "mid-0", + MIDDLE_1 = "mid-1", + MIDDLE_2 = "mid-2", + MIDDLE_3 = "mid-3", + + RING_0 = "ring-0", + RING_1 = "ring-1", + RING_2 = "ring-2", + RING_3 = "ring-3", + + PINKY_0 = "pinky-0", + PINKY_1 = "pinky-1", + PINKY_2 = "pinky-2", + PINKY_3 = "pinky-3", + + THUMB_0 = "thumb-0", + THUMB_1 = "thumb-1", + THUMB_2 = "thumb-2", + THUMB_3 = "thumb-3", + + WRIST = "wrist", + + WRIST_TO_THUMB = "wrist_to_thumb", + WRIST_TO_INDEX = "wrist_to_index", + WRIST_TO_MIDDLE = "wrist_to_mid", + WRIST_TO_RING = "wrist_to_ring", + WRIST_TO_PINKY = "wrist_to_pinky", +} + +export const INDEX_BASE = LandmarkName.INDEX_0 +export const INDEX_TIP = LandmarkName.INDEX_3 + +export const MIDDLE_BASE = LandmarkName.MIDDLE_0 +export const MIDDLE_TIP = LandmarkName.MIDDLE_3 + +export const RING_BASE = LandmarkName.RING_0 +export const RING_TIP = LandmarkName.RING_3 + +export const PINKY_BASE = LandmarkName.PINKY_0 +export const PINKY_TIP = LandmarkName.PINKY_3 + +export const THUMB_BASE = LandmarkName.THUMB_0 +export const THUMB_TIP = LandmarkName.THUMB_3 + +export const wristLandmarks = [ + LandmarkName.WRIST, + LandmarkName.WRIST_TO_INDEX, + LandmarkName.WRIST_TO_MIDDLE, + LandmarkName.WRIST_TO_PINKY, + LandmarkName.WRIST_TO_RING, + LandmarkName.WRIST_TO_THUMB, +] +export const thumbLandmarks = [ + LandmarkName.THUMB_3, + LandmarkName.THUMB_2, + LandmarkName.THUMB_1, + LandmarkName.THUMB_0, +] +export const indexLandmarks = [ + LandmarkName.INDEX_3, + LandmarkName.INDEX_2, + LandmarkName.INDEX_1, + LandmarkName.INDEX_0, +] +export const midLandmarks = [ + LandmarkName.MIDDLE_3, + LandmarkName.MIDDLE_2, + LandmarkName.MIDDLE_1, + LandmarkName.MIDDLE_0, +] +export const ringLandmarks = [ + LandmarkName.RING_3, + LandmarkName.RING_2, + LandmarkName.RING_1, + LandmarkName.RING_0, +] +export const pinkyLandmarks = [ + LandmarkName.PINKY_3, + LandmarkName.PINKY_2, + LandmarkName.PINKY_1, + LandmarkName.PINKY_0, +] +export const allLandmarks = [ + thumbLandmarks, + indexLandmarks, + midLandmarks, + ringLandmarks, + pinkyLandmarks, +] + +export const stubLandmarks = [ + LandmarkName.INDEX_0, + LandmarkName.MIDDLE_0, + LandmarkName.RING_0, + LandmarkName.PINKY_0, + LandmarkName.THUMB_0, + LandmarkName.WRIST, +] + +export enum Fingers { + INDEX = "INDEX", + THUMB = "THUMB", + MIDDLE = "MIDDLE", + PINKY = "PINKY", + RING = "RING", +} + +export enum Hands { + RIGHT = "RIGHT", + LEFT = "LEFT", +} + +export const mapLandmarkToFinger: any = {} + +mapLandmarkToFinger[LandmarkName.THUMB_0] = Fingers.THUMB +mapLandmarkToFinger[LandmarkName.THUMB_1] = Fingers.THUMB +mapLandmarkToFinger[LandmarkName.THUMB_2] = Fingers.THUMB +mapLandmarkToFinger[LandmarkName.THUMB_3] = Fingers.THUMB + +mapLandmarkToFinger[LandmarkName.INDEX_0] = Fingers.INDEX +mapLandmarkToFinger[LandmarkName.INDEX_1] = Fingers.INDEX +mapLandmarkToFinger[LandmarkName.INDEX_2] = Fingers.INDEX +mapLandmarkToFinger[LandmarkName.INDEX_3] = Fingers.INDEX + +mapLandmarkToFinger[LandmarkName.MIDDLE_0] = Fingers.MIDDLE +mapLandmarkToFinger[LandmarkName.MIDDLE_1] = Fingers.MIDDLE +mapLandmarkToFinger[LandmarkName.MIDDLE_2] = Fingers.MIDDLE +mapLandmarkToFinger[LandmarkName.MIDDLE_3] = Fingers.MIDDLE + +mapLandmarkToFinger[LandmarkName.RING_0] = Fingers.RING +mapLandmarkToFinger[LandmarkName.RING_1] = Fingers.RING +mapLandmarkToFinger[LandmarkName.RING_2] = Fingers.RING +mapLandmarkToFinger[LandmarkName.RING_3] = Fingers.RING + +mapLandmarkToFinger[LandmarkName.PINKY_0] = Fingers.PINKY +mapLandmarkToFinger[LandmarkName.PINKY_1] = Fingers.PINKY +mapLandmarkToFinger[LandmarkName.PINKY_2] = Fingers.PINKY +mapLandmarkToFinger[LandmarkName.PINKY_3] = Fingers.PINKY diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts.meta new file mode 100644 index 00000000..9ff68480 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 4765d1cc-b5fa-4ba1-908a-e21a86220061 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4765d1cc-b5fa-4ba1-908a-e21a86220061 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! bfc3eaa2-f050-43aa-81e0-bcb82f488e88 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D new file mode 100644 index 00000000..f36c8406 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D @@ -0,0 +1,57 @@ +- ! + PackagePath: "" + AttachmentPoints: + - name: wrist + parentPoint: "" + - name: wrist_to_thumb + parentPoint: wrist + - name: thumb-0 + parentPoint: wrist_to_thumb + - name: thumb-1 + parentPoint: thumb-0 + - name: thumb-2 + parentPoint: thumb-1 + - name: thumb-3 + parentPoint: thumb-2 + - name: wrist_to_index + parentPoint: wrist + - name: index-0 + parentPoint: wrist_to_index + - name: index-1 + parentPoint: index-0 + - name: index-2 + parentPoint: index-1 + - name: index-3 + parentPoint: index-2 + - name: wrist_to_mid + parentPoint: wrist + - name: mid-0 + parentPoint: wrist_to_mid + - name: mid-1 + parentPoint: mid-0 + - name: mid-2 + parentPoint: mid-1 + - name: mid-3 + parentPoint: mid-2 + - name: wrist_to_ring + parentPoint: wrist + - name: ring-0 + parentPoint: wrist_to_ring + - name: ring-1 + parentPoint: ring-0 + - name: ring-2 + parentPoint: ring-1 + - name: ring-3 + parentPoint: ring-2 + - name: wrist_to_pinky + parentPoint: wrist + - name: pinky-0 + parentPoint: wrist_to_pinky + - name: pinky-1 + parentPoint: pinky-0 + - name: pinky-2 + parentPoint: pinky-1 + - name: pinky-3 + parentPoint: pinky-2 + HandType: Left + TrackingMode: SimultaneousTwoHands diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D.meta new file mode 100644 index 00000000..fed178b9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/LeftHandAsset.handTracking3D.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + HandTracking3DAsset: ! 1062714e-cbe6-455d-becf-a2c9ef9ce87d + ImporterName: HandTracking3DAssetImporter + PrimaryAsset: ! 1062714e-cbe6-455d-becf-a2c9ef9ce87d + PackageType: NotAPackage + AssetDataMap: + HandTracking3DAsset: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D new file mode 100644 index 00000000..8f8b3777 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D @@ -0,0 +1,57 @@ +- ! + PackagePath: "" + AttachmentPoints: + - name: wrist + parentPoint: "" + - name: wrist_to_thumb + parentPoint: wrist + - name: thumb-0 + parentPoint: wrist_to_thumb + - name: thumb-1 + parentPoint: thumb-0 + - name: thumb-2 + parentPoint: thumb-1 + - name: thumb-3 + parentPoint: thumb-2 + - name: wrist_to_index + parentPoint: wrist + - name: index-0 + parentPoint: wrist_to_index + - name: index-1 + parentPoint: index-0 + - name: index-2 + parentPoint: index-1 + - name: index-3 + parentPoint: index-2 + - name: wrist_to_mid + parentPoint: wrist + - name: mid-0 + parentPoint: wrist_to_mid + - name: mid-1 + parentPoint: mid-0 + - name: mid-2 + parentPoint: mid-1 + - name: mid-3 + parentPoint: mid-2 + - name: wrist_to_ring + parentPoint: wrist + - name: ring-0 + parentPoint: wrist_to_ring + - name: ring-1 + parentPoint: ring-0 + - name: ring-2 + parentPoint: ring-1 + - name: ring-3 + parentPoint: ring-2 + - name: wrist_to_pinky + parentPoint: wrist + - name: pinky-0 + parentPoint: wrist_to_pinky + - name: pinky-1 + parentPoint: pinky-0 + - name: pinky-2 + parentPoint: pinky-1 + - name: pinky-3 + parentPoint: pinky-2 + HandType: Right + TrackingMode: SimultaneousTwoHands diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D.meta new file mode 100644 index 00000000..cb50e5f2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/RightHandAsset.handTracking3D.meta @@ -0,0 +1,16 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + HandTracking3DAsset: ! 3ec4f93a-30e7-4707-9f7e-895215580cab + ImporterName: HandTracking3DAssetImporter + PrimaryAsset: ! 3ec4f93a-30e7-4707-9f7e-895215580cab + PackageType: NotAPackage + AssetDataMap: + HandTracking3DAsset: ! 00000000-0000-0000-0000-000000000000 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts new file mode 100644 index 00000000..cf9ecdc6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts @@ -0,0 +1,809 @@ +import {CancelToken, setTimeout} from "../../Utils/debounce" +import Event, {PublicApi} from "../../Utils/Event" +import NativeLogger from "../../Utils/NativeLogger" +import { + PinchDetectionSelection, + PinchDetector, +} from "./GestureProvider/PinchDetection/PinchDetector" +import {JointNode, JOINT_HIERARCHY} from "./Joints" + +import {validate} from "../../Utils/validate" +import WorldCameraFinderProvider from "../CameraProvider/WorldCameraFinderProvider" +import {TargetingData} from "../TargetProvider/TargetingData" +import {BaseHand} from "./BaseHand" +import DefaultHandTrackingAssetProvider from "./DefaultHandTrackingAssetProvider" +import GestureModuleProvider from "./GestureProvider/GestureModuleProvider" +import PalmTapDetector from "./GestureProvider/PalmTapDetection/PalmTapDetector" +import {PalmTapDetectionEvent} from "./GestureProvider/PalmTapDetectionEvent" +import {HandType} from "./HandType" +import {HandVisuals} from "./HandVisuals" +import {Keypoint} from "./Keypoint" +import {LandmarkName} from "./LandmarkNames" + +export type BaseHandConfig = { + handType: HandType + isDominantHand: boolean +} + +export enum TrackingEvent { + OnTrackingStarted = "OnTrackingStarted", + OnTrackingLost = "OnTrackingLost", +} + +const TAG = "TrackedHand" +const HAND_FACING_THRESHOLD = 40.0 +const POINTING_PITCH_THRESHOLD = -60.0 + +// GestureModule can take up to 350ms to determine if a pinch has been sustained. +const OBJECT_TRACKING_3D_TIMEOUT_MS = 400 + +export type OrientationVectors = { + forward: vec3 + right: vec3 + up: vec3 + cameraForward: vec3 +} + +/** + * Manages a tracked hand, instantiates fingers and wrists. + * Also manages the {@link ObjectTracking3D} and creates + * the needed scene object hierarchy to achieve hand mesh visualization as well as landmarks tracking + */ +export default class TrackedHand implements BaseHand { + // Dependency injection + private handTrackingAssetProvider: DefaultHandTrackingAssetProvider = + DefaultHandTrackingAssetProvider.getInstance() + protected sceneObjectManager: ScriptScene = global.scene + private worldCamera: WorldCameraFinderProvider = + WorldCameraFinderProvider.getInstance() + private gestureModuleProvider: GestureModuleProvider = + GestureModuleProvider.getInstance() + + // Native Logging + private log = new NativeLogger(TAG) + + // SceneObject + private _enabled = true + private isDestroyed = false + private ownerSceneObject: SceneObject + + private cameraObject: SceneObject + + // Events + private onEnabledChangedEvent = new Event() + readonly onEnabledChanged = this.onEnabledChangedEvent.publicApi() + + private onHandFoundEvent = new Event() + readonly onHandFound = this.onHandFoundEvent.publicApi() + + private onHandLostEvent = new Event() + readonly onHandLost = this.onHandLostEvent.publicApi() + + readonly onPinchDown: PublicApi + readonly onPinchUp: PublicApi + readonly onPinchCancel: PublicApi + + // Tracking + private objectTracking3DComponent: ObjectTracking3D + + // Timeouts for temporary pinch sustain + private objectTracking3DCancelToken: CancelToken | undefined + private objectTracking3DRecentlyFound: boolean = false + + // Keypoints + private keypoints = new Map() + private handVisuals?: HandVisuals + private allPoints: Keypoint[] = [] + private thumbFingerPoints: Keypoint[] = [] + private indexFingerPoints: Keypoint[] = [] + private middleFingerPoints: Keypoint[] = [] + private ringFingerPoints: Keypoint[] = [] + private pinkyFingerPoints: Keypoint[] = [] + + // Pinch + private pinchDetector: PinchDetector + + // Palm Tap + private palmTapDetector?: PalmTapDetector + + private _isDominantHand = this.config.isDominantHand + + private _targetingData: TargetingData | null = null + + constructor(private config: BaseHandConfig) { + this.ownerSceneObject = this.sceneObjectManager.createSceneObject( + this.handType === "left" ? "LeftHandModelOwner" : "RightHandModelOwner" + ) + + this.cameraObject = this.worldCamera.getComponent().getSceneObject() + this.ownerSceneObject.setParent(this.cameraObject) + + this.objectTracking3DComponent = this.ownerSceneObject.createComponent( + "Component.ObjectTracking3D" + ) + + if (this.objectTracking3DComponent === undefined) { + throw new Error("Failed to create Component.ObjectTracking3D") + } + + const asset = this.handTrackingAssetProvider.get(this.config.handType) + if (!isNull(asset)) { + this.objectTracking3DComponent.trackingAsset = asset + } + + this.objectTracking3DComponent.objectIndex = 0 + this.objectTracking3DComponent.trackingMode = + ObjectTracking3D.TrackingMode.Attachment + + const logObjectTrackingEvent = (eventName: TrackingEvent) => { + this.log.d( + `Received event from ObjectTracking3D: handType: ${this.config.handType}, eventType: ${eventName}` + ) + } + this.objectTracking3DComponent.onTrackingStarted = () => { + this.objectTracking3DRecentlyFound = true + + logObjectTrackingEvent(TrackingEvent.OnTrackingStarted) + this.log.v("HandEvent : " + "Hand Found Event") + this.onHandFoundEvent.invoke() + + this.objectTracking3DCancelToken = setTimeout(() => { + this.objectTracking3DRecentlyFound = false + }, OBJECT_TRACKING_3D_TIMEOUT_MS) + } + this.objectTracking3DComponent.onTrackingLost = () => { + this.objectTracking3DRecentlyFound = false + + if (this.objectTracking3DCancelToken !== undefined) { + this.objectTracking3DCancelToken.cancelled = true + } + + this.objectTracking3DCancelToken = undefined + logObjectTrackingEvent(TrackingEvent.OnTrackingLost) + this.onHandLostEvent.invoke() + this.log.v("HandEvent : " + "Hand Lost Event") + } + + this.attachJoints(JOINT_HIERARCHY.children) + + this.setKeypointCollections() + + this.pinchDetector = new PinchDetector({ + handType: this.config.handType, + thumbTip: this.thumbTip, + indexTip: this.indexTip, + onHandLost: this.onHandLost, + isTracked: () => { + return this.isTracked() + }, + pinchDetectionSelection: PinchDetectionSelection.LensCoreML, + }) + this.onPinchDown = this.pinchDetector.onPinchDown + this.onPinchUp = this.pinchDetector.onPinchUp + this.onPinchCancel = this.pinchDetector.onPinchCancel + + const gestureModule = this.gestureModuleProvider.getModule() + + try { + if (gestureModule !== undefined) { + const gestureHandType = + this.handType === "right" + ? GestureModule.HandType.Right + : GestureModule.HandType.Left + gestureModule + .getTargetingDataEvent(gestureHandType) + .add((args: TargetingDataArgs) => { + const rayOriginInCameraParent: vec3 = args.rayOriginInWorld + const rayDirectionInCameraParent: vec3 = args.rayDirectionInWorld + const [rayOriginInWorld, rayDirectionInWorld] = this.rayToWorld( + rayOriginInCameraParent, + rayDirectionInCameraParent + ) + + this._targetingData = { + targetingDirectionInWorld: rayDirectionInWorld, + targetingLocusInWorld: rayOriginInWorld, + intendsToTarget: args.handIntendsToTarget, + } + this.log.v( + "HandEvent : " + + "Targeting Data Event" + + " rayOriginInWorld: " + + rayOriginInWorld + + " rayDirectionInWorld: " + + rayDirectionInWorld + ) + }) + } + } catch (error) { + this.log.e(`Error subscribing to targeting ray event: ${error}`) + } + + try { + if (this.handType === "right") { + this.palmTapDetector = new PalmTapDetector(GestureModule.HandType.Right) + } + } catch (error) { + this.log.w("PalmTapDetector is not supported") + } + } + + get enabled(): boolean { + return this._enabled + } + + setEnabled(isEnabled: boolean) { + if (this._enabled === isEnabled) { + return + } + + this._enabled = isEnabled + this.objectTracking3DComponent.enabled = this.enabled + this.onEnabledChangedEvent.invoke(this._enabled) + this.log.v( + "HandEvent : " + "Hand Enabled Changed Event" + " to " + this._enabled + ) + } + + isFacingCamera(): boolean { + if (!this.isTracked()) { + return false + } + + const facingCameraAngle = this.getFacingCameraAngle() + return Boolean( + facingCameraAngle !== null && facingCameraAngle < HAND_FACING_THRESHOLD + ) + } + + isInTargetingPose(): boolean { + if (!this.isTracked()) { + return false + } + + const pitchAngle = this.getPalmPitchAngle() + + return ( + !this.isFacingCamera() && + pitchAngle !== null && + pitchAngle > POINTING_PITCH_THRESHOLD + ) + } + + getPinchDirection(): quat | null { + if (!this.isTracked()) { + return null + } + + const thumbTipPosition = this.thumbTip.position + const thumbKnucklePosition = this.thumbKnuckle.position + const indexMidJointPosition = this.indexMidJoint.position + + const forward = thumbTipPosition.sub(thumbKnucklePosition).normalize() + const right = indexMidJointPosition.sub(thumbKnucklePosition).normalize() + const up = + this.handType === "right" ? right.cross(forward) : forward.cross(right) + + return quat.lookAt(forward, up) + } + + private getHandOrientation(): OrientationVectors { + /** + * 1. Create a right vector between the index and middle distals + * 2. Create a forward vector between the wrist and middle distal + * 3. Derive an up vector from the previous two vectors + */ + const handRightVector = this.indexMidJoint.position + .sub(this.middleMidJoint.position) + .normalize() + const handForwardVector = this.middleMidJoint.position + .sub(this.wrist.position) + .normalize() + const handUpVector = handRightVector.cross(handForwardVector) + + const handToCameraVector = this.worldCamera + .getWorldPosition() + .sub(this.wrist.position) + .normalize() + + return { + forward: handForwardVector, + right: handRightVector, + up: handUpVector, + cameraForward: handToCameraVector, + } + } + + getFacingCameraAngle(): number | null { + if (!this.isTracked()) { + return null + } + + /** + * Apply the camera to wrist direction against the derived up vector to get facing angle + */ + const handOrientationVectors = this.getHandOrientation() + const dotHandCamera = handOrientationVectors.up.dot( + handOrientationVectors.cameraForward + ) + + const angle = + MathUtils.RadToDeg * + Math.acos( + this.config.handType === "right" ? dotHandCamera : -dotHandCamera + ) + + return angle + } + + getPalmPitchAngle(): number | null { + if (!this.isTracked()) { + return null + } + + /** + * Compare the hand's forward direction to world up + */ + const handOrientationVectors = this.getHandOrientation() + const dotHandUp = handOrientationVectors.forward.dot(vec3.up()) + const angle = 90 - MathUtils.RadToDeg * Math.acos(dotHandUp) + + return angle + } + + getPalmCenter(): vec3 | null { + if (!this.isTracked()) { + return null + } + + return this.indexKnuckle.position + .add(this.pinkyKnuckle.position) + .add(this.middleToWrist.position) + .uniformScale(1.0 / 3.0) + } + + get wrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST) + } + + get thumbProximal(): Keypoint { + return this.thumbToWrist + } + + get thumbToWrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST_TO_THUMB) + } + + get thumbIntermediate(): Keypoint { + return this.thumbBaseJoint + } + + get thumbBaseJoint(): Keypoint { + return this.getKeypoint(LandmarkName.THUMB_0) + } + + /** @inheritdoc */ + get thumbDistal(): Keypoint { + return this.thumbKnuckle + } + + get thumbKnuckle(): Keypoint { + return this.getKeypoint(LandmarkName.THUMB_1) + } + + get thumbPad(): Keypoint { + return this.thumbMidJoint + } + + get thumbMidJoint(): Keypoint { + return this.getKeypoint(LandmarkName.THUMB_2) + } + + get thumbTip(): Keypoint { + return this.getKeypoint(LandmarkName.THUMB_3) + } + + get indexProximal(): Keypoint { + return this.indexToWrist + } + + get indexToWrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST_TO_INDEX) + } + + get indexIntermediate(): Keypoint { + return this.indexKnuckle + } + + get indexKnuckle(): Keypoint { + return this.getKeypoint(LandmarkName.INDEX_0) + } + + get indexDistal(): Keypoint { + return this.indexMidJoint + } + + get indexMidJoint(): Keypoint { + return this.getKeypoint(LandmarkName.INDEX_1) + } + + get indexPad(): Keypoint { + return this.indexUpperJoint + } + + get indexUpperJoint(): Keypoint { + return this.getKeypoint(LandmarkName.INDEX_2) + } + + get indexTip(): Keypoint { + return this.getKeypoint(LandmarkName.INDEX_3) + } + + get middleProximal(): Keypoint { + return this.middleToWrist + } + + get middleToWrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST_TO_MIDDLE) + } + + get middleIntermediate(): Keypoint { + return this.middleKnuckle + } + + get middleKnuckle(): Keypoint { + return this.getKeypoint(LandmarkName.MIDDLE_0) + } + + get middleDistal(): Keypoint { + return this.middleMidJoint + } + + get middleMidJoint(): Keypoint { + return this.getKeypoint(LandmarkName.MIDDLE_1) + } + + get middlePad(): Keypoint { + return this.middleUpperJoint + } + + get middleUpperJoint(): Keypoint { + return this.getKeypoint(LandmarkName.MIDDLE_2) + } + + get middleTip(): Keypoint { + return this.getKeypoint(LandmarkName.MIDDLE_3) + } + + get ringProximal(): Keypoint { + return this.ringToWrist + } + + get ringToWrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST_TO_RING) + } + + get ringIntermediate(): Keypoint { + return this.ringKnuckle + } + + get ringKnuckle(): Keypoint { + return this.getKeypoint(LandmarkName.RING_0) + } + + get ringDistal(): Keypoint { + return this.ringMidJoint + } + + get ringMidJoint(): Keypoint { + return this.getKeypoint(LandmarkName.RING_1) + } + + get ringPad(): Keypoint { + return this.ringUpperJoint + } + + get ringUpperJoint(): Keypoint { + return this.getKeypoint(LandmarkName.RING_2) + } + + get ringTip(): Keypoint { + return this.getKeypoint(LandmarkName.RING_3) + } + + get pinkyProximal(): Keypoint { + return this.pinkyToWrist + } + + get pinkyToWrist(): Keypoint { + return this.getKeypoint(LandmarkName.WRIST_TO_PINKY) + } + + get pinkyIntermediate(): Keypoint { + return this.pinkyKnuckle + } + + get pinkyKnuckle(): Keypoint { + return this.getKeypoint(LandmarkName.PINKY_0) + } + + get pinkyDistal(): Keypoint { + return this.pinkyMidJoint + } + + get pinkyMidJoint(): Keypoint { + return this.getKeypoint(LandmarkName.PINKY_1) + } + + get pinkyPad(): Keypoint { + return this.pinkyUpperJoint + } + + get pinkyUpperJoint(): Keypoint { + return this.getKeypoint(LandmarkName.PINKY_2) + } + + get pinkyTip(): Keypoint { + return this.getKeypoint(LandmarkName.PINKY_3) + } + + get thumbFinger(): Keypoint[] { + return this.thumbFingerPoints + } + + get indexFinger(): Keypoint[] { + return this.indexFingerPoints + } + + get middleFinger(): Keypoint[] { + return this.middleFingerPoints + } + + get ringFinger(): Keypoint[] { + return this.ringFingerPoints + } + + get pinkyFinger(): Keypoint[] { + return this.pinkyFingerPoints + } + + get points(): Keypoint[] { + return this.allPoints + } + + get handType(): HandType { + return this.config.handType + } + + get isDominantHand(): boolean { + return this._isDominantHand + } + + get objectTracking3D(): ObjectTracking3D { + return this.objectTracking3DComponent + } + + get targetingData(): TargetingData | null { + return this._targetingData + } + + isTracked(): boolean { + return this.objectTracking3DComponent.isTracking() + } + + isRecentlyFound(): boolean { + return this.objectTracking3DRecentlyFound + } + + getSceneObject(): SceneObject { + return this.ownerSceneObject + } + + setIsDominantHand(isDominantHand: boolean): void { + this._isDominantHand = isDominantHand + } + + isPinching(): boolean { + return this.pinchDetector.isPinching() + } + + isTapping(): PalmTapDetectionEvent { + if (this.palmTapDetector === undefined) { + return { + state: "unsupported", + } + } else { + return { + state: "available", + data: {isTapping: this.palmTapDetector.isTapping}, + } + } + } + + getPinchStrength(): number | null { + if (!this.isTracked()) { + return null + } + + return this.pinchDetector.getPinchStrength() + } + + /** + * Sets the tracking mode for the hand. + * @param trackingMode - The new mode. + */ + setTrackingMode(trackingMode: ObjectTracking3D.TrackingMode): void { + this.objectTracking3DComponent.trackingMode = trackingMode + } + + public getHandVisuals(): HandVisuals | null { + if (this.handVisuals && !this.handVisuals.initialized) { + this.handVisuals.initialize() + } + + return this.handVisuals ?? null + } + + public attachHandVisuals(handVisuals: HandVisuals): void { + this.handVisuals = handVisuals + } + + public initHandVisuals(): void { + if (!this.handVisuals) { + throw new Error("initHandVisuals called before attachHandVisuals") + } + + this.objectTracking3DComponent.trackingMode = + ObjectTracking3D.TrackingMode.ProportionsAndPose + + validate(this.handVisuals.root) + this.handVisuals.root.setParent(this.ownerSceneObject) + + // Wrist + this.wrist.addAttachmentPoint(this.handVisuals.wrist) + + // Thumb + this.thumbToWrist.addAttachmentPoint(this.handVisuals.thumbToWrist) + this.thumbBaseJoint.addAttachmentPoint(this.handVisuals.thumbBaseJoint) + this.thumbKnuckle.addAttachmentPoint(this.handVisuals.thumbKnuckle) + this.thumbMidJoint.addAttachmentPoint(this.handVisuals.thumbMidJoint) + this.thumbTip.addAttachmentPoint(this.handVisuals.thumbTip) + + // Index + this.indexToWrist.addAttachmentPoint(this.handVisuals.indexToWrist) + this.indexKnuckle.addAttachmentPoint(this.handVisuals.indexKnuckle) + this.indexMidJoint.addAttachmentPoint(this.handVisuals.indexMidJoint) + this.indexUpperJoint.addAttachmentPoint(this.handVisuals.indexUpperJoint) + this.indexTip.addAttachmentPoint(this.handVisuals.indexTip) + + // Middle + this.middleToWrist.addAttachmentPoint(this.handVisuals.middleToWrist) + this.middleKnuckle.addAttachmentPoint(this.handVisuals.middleKnuckle) + this.middleMidJoint.addAttachmentPoint(this.handVisuals.middleMidJoint) + this.middleUpperJoint.addAttachmentPoint(this.handVisuals.middleUpperJoint) + this.middleTip.addAttachmentPoint(this.handVisuals.middleTip) + + // Ring + this.ringToWrist.addAttachmentPoint(this.handVisuals.ringToWrist) + this.ringKnuckle.addAttachmentPoint(this.handVisuals.ringKnuckle) + this.ringMidJoint.addAttachmentPoint(this.handVisuals.ringMidJoint) + this.ringUpperJoint.addAttachmentPoint(this.handVisuals.ringUpperJoint) + this.ringTip.addAttachmentPoint(this.handVisuals.ringTip) + + // Pinky + this.pinkyToWrist.addAttachmentPoint(this.handVisuals.pinkyToWrist) + this.pinkyKnuckle.addAttachmentPoint(this.handVisuals.pinkyKnuckle) + this.pinkyMidJoint.addAttachmentPoint(this.handVisuals.pinkyMidJoint) + this.pinkyUpperJoint.addAttachmentPoint(this.handVisuals.pinkyUpperJoint) + this.pinkyTip.addAttachmentPoint(this.handVisuals.pinkyTip) + } + + detachHandVisuals(handVisuals: HandVisuals): void { + if (this.handVisuals !== handVisuals) { + return + } + + this.objectTracking3DComponent.trackingMode = + ObjectTracking3D.TrackingMode.Attachment + this.keypoints.forEach((keypoint) => keypoint.clearAttachmentPoint()) + this.handVisuals = undefined + } + + /** + * Destroys the hand and associated keypoints + */ + destroy(): void { + if (this.isDestroyed) { + return + } + + this.ownerSceneObject.destroy() + this.isDestroyed = true + } + + private attachJoints(children: JointNode[]) { + for (const joint of children) { + this.keypoints.set( + joint.name, + new Keypoint(joint.name, this.objectTracking3DComponent) + ) + this.attachJoints(joint.children) + } + } + + private getKeypoint(landmarkName: LandmarkName): Keypoint { + const keypoint = this.keypoints.get(landmarkName as string) + if (!keypoint) { + throw new Error(`Keypoint ${landmarkName} is not supported.`) + } + + return keypoint + } + + private setKeypointCollections() { + this.thumbFingerPoints.push( + this.thumbToWrist, + this.thumbBaseJoint, + this.thumbKnuckle, + this.thumbMidJoint, + this.thumbTip + ) + this.indexFingerPoints.push( + this.indexToWrist, + this.indexKnuckle, + this.indexMidJoint, + this.indexUpperJoint, + this.indexTip + ) + this.middleFingerPoints.push( + this.middleToWrist, + this.middleKnuckle, + this.middleMidJoint, + this.middleUpperJoint, + this.middleTip + ) + this.ringFingerPoints.push( + this.ringToWrist, + this.ringKnuckle, + this.ringMidJoint, + this.ringUpperJoint, + this.ringTip + ) + this.pinkyFingerPoints.push( + this.pinkyToWrist, + this.pinkyKnuckle, + this.pinkyMidJoint, + this.pinkyUpperJoint, + this.pinkyTip + ) + this.allPoints.push( + this.wrist, + ...this.thumbFingerPoints, + ...this.indexFingerPoints, + ...this.middleFingerPoints, + ...this.ringFingerPoints, + ...this.pinkyFingerPoints + ) + } + + private rayToWorld( + rayOriginInCameraRootSpace: vec3, + rayDirectionInCameraRootSpace: vec3 + ): [rayOriginWorld: vec3, rayDirectionWorld: vec3] { + const cameraParent = this.cameraObject.getParent() + + if (!cameraParent) { + return [rayOriginInCameraRootSpace, rayDirectionInCameraRootSpace] + } + const cameraRoot = cameraParent.getTransform().getWorldTransform() + const rayEndPointCameraRootSpace = rayOriginInCameraRootSpace.add( + rayDirectionInCameraRootSpace + ) + const rayOriginInWorld = cameraRoot.multiplyPoint( + rayOriginInCameraRootSpace + ) + const rayEndInWorld = cameraRoot.multiplyPoint(rayEndPointCameraRootSpace) + const rayDirectionInWorld = rayEndInWorld.sub(rayOriginInWorld) + return [rayOriginInWorld, rayDirectionInWorld] + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts.meta new file mode 100644 index 00000000..69207e54 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/HandInputData/TrackedHand.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! b8860575-0e52-456a-92a3-9f75ce15c237 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b8860575-0e52-456a-92a3-9f75ce15c237 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 936912d0-441d-4880-a7b5-47c184ae3a96 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts new file mode 100644 index 00000000..39d2f768 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts @@ -0,0 +1,86 @@ +import {Singleton} from "../../Decorators/Singleton" + +export type CustomComponentName = + | "Billboard" + | "HandInteractor" + | "HandVisual" + | "Headlock" + | "Interactable" + | "InteractableManipulation" + | "PinchButton" + | "ScrollView" + | "ScrollBar" + | "Slider" + | "ToggleButton" + | "MouseInteractor" + | "ContainerFrame" + +/** + * This singleton class provides methods to require and retrieve types of custom components based on their names. It uses a switch-case structure to map component names to their respective module paths. + * + */ +@Singleton +export class InteractionConfigurationProvider { + public static getInstance: () => InteractionConfigurationProvider + + requireType(componentName: CustomComponentName): keyof ComponentNameMap { + switch (componentName) { + case "Billboard": + return requireType( + "../../Components/Interaction/Billboard/Billboard", + ) as keyof ComponentNameMap + case "ContainerFrame": + return requireType( + "../../Components/UI/ContainerFrame/ContainerFrame", + ) as keyof ComponentNameMap + case "HandInteractor": + return requireType( + "../../Core/HandInteractor/HandInteractor", + ) as keyof ComponentNameMap + case "HandVisual": + return requireType( + "../../Components/Interaction/HandVisual/HandVisual", + ) as keyof ComponentNameMap + case "Headlock": + return requireType( + "../../Components/Interaction/Headlock/Headlock", + ) as keyof ComponentNameMap + case "Interactable": + return requireType( + "../../Components/Interaction/Interactable/Interactable", + ) as keyof ComponentNameMap + case "InteractableManipulation": + return requireType( + "../../Components/Interaction/InteractableManipulation/InteractableManipulation", + ) as keyof ComponentNameMap + case "PinchButton": + return requireType( + "../../Components/UI/PinchButton/PinchButton", + ) as keyof ComponentNameMap + case "ScrollView": + return requireType( + "../../Components/UI/ScrollView/ScrollView", + ) as keyof ComponentNameMap + case "ScrollBar": + return requireType( + "../../Components/UI/ScrollBar/ScrollBar", + ) as keyof ComponentNameMap + case "Slider": + return requireType( + "../../Components/UI/Slider/Slider", + ) as keyof ComponentNameMap + case "ToggleButton": + return requireType( + "../../Components/UI/ToggleButton/ToggleButton", + ) as keyof ComponentNameMap + case "MouseInteractor": + return requireType( + "../../Core/MouseInteractor/MouseInteractor", + ) as keyof ComponentNameMap + default: + throw new Error( + `Could not find typename for component ${componentName}`, + ) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts.meta new file mode 100644 index 00000000..9686c066 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/InteractionConfigurationProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 4d66dc3c-ad43-4734-875e-219b32561f3f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4d66dc3c-ad43-4734-875e-219b32561f3f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b19bd7d0-6a6f-4675-bc78-adfdaa97588e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts new file mode 100644 index 00000000..2d2b6409 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts @@ -0,0 +1,37 @@ +import {PublicApi} from "../../Utils/Event" +import {LogLevel} from "../../Utils/LogLevel" +import ReplayEvent from "../../Utils/ReplayEvent" + +/** + * Provides the level of logging that we want to allow. + * Provides properties to get and set the log level, and an event that is invoked when the log level changes. + */ +export default abstract class LogLevelProvider { + private _logLevel: LogLevel = LogLevel.Verbose + + private onLogLevelChangedEvent = new ReplayEvent(1) + + onLogLevelChanged: PublicApi = + this.onLogLevelChangedEvent.publicApi() + + /** + * Get the level of logging that we want to allow from this provider. + * @returns 3 for Error, 4 for Warning, 6 for Info, 7 for Debug, 8 for Verbose. + */ + get logLevel(): LogLevel { + return this._logLevel + } + + /** + * Set the level of logging that we want to allow from this provider. + * @param logLevel - 3 for Error, 4 for Warning, 6 for Info, 7 for Debug, 8 for Verbose. + */ + set logLevel(logLevel: LogLevel) { + if (this._logLevel === logLevel) { + return + } + + this._logLevel = logLevel + this.onLogLevelChangedEvent.invoke(this.logLevel) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts.meta new file mode 100644 index 00000000..5f59e073 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/LogLevelProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 2e183eed-5375-4383-879f-dd02855c30ec + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 2e183eed-5375-4383-879f-dd02855c30ec + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 88a9e168-6517-49f5-a31e-2d99322aac4f + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts new file mode 100644 index 00000000..08a5a5e3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts @@ -0,0 +1,14 @@ +import {Singleton} from "../../Decorators/Singleton" +import LogLevelProvider from "./LogLevelProvider" + +/** + * Provides the level of logging that we want to allow from SIK types. + */ +@Singleton +export default class SIKLogLevelProvider extends LogLevelProvider { + public static getInstance: () => SIKLogLevelProvider + + constructor() { + super() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts.meta new file mode 100644 index 00000000..c16af214 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/InteractionConfigurationProvider/SIKLogLevelProvider.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 5214927a-b534-4525-b8bf-4ac1cf9e2ac0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 5214927a-b534-4525-b8bf-4ac1cf9e2ac0 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 09e8fc9e-f9f5-44b2-ab39-d87811790535 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts new file mode 100644 index 00000000..56919cb1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts @@ -0,0 +1,191 @@ +import { + OneEuroFilterConfig, + OneEuroFilterQuat, + OneEuroFilterVec3, +} from "../../Utils/OneEuroFilter" + +import {AnimationManager} from "../../Utils/animate" +import Event from "../../Utils/Event" +import MotionControllerProvider from "../HandInputData/GestureProvider/MotionControllerProvider" +import NativeLogger from "../../Utils/NativeLogger" +import {Singleton} from "../../Decorators/Singleton" + +const TAG = "MobileInputData" + +const TRANSLATE_FILTER_CONFIG: OneEuroFilterConfig = { + frequency: 60, + minCutoff: 3.5, + beta: 0.5, + dcutoff: 1, +} +const ROTATION_FILTER_CONFIG: OneEuroFilterConfig = { + frequency: 60, + minCutoff: 1, + beta: 2, + dcutoff: 1, +} + +/** + * This singleton class manages mobile input data, including motion controller state, position, and rotation. It uses filters to smooth the input data and provides events for tracking quality changes. + * + */ +@Singleton +export class MobileInputData { + public static getInstance: () => MobileInputData + + private log = new NativeLogger(TAG) + + private _motionControllerModule: MotionControllerModule | undefined + private _motionController: MotionController | undefined + + private animationManager: AnimationManager = AnimationManager.getInstance() + private translateFilter = new OneEuroFilterVec3(TRANSLATE_FILTER_CONFIG) + private rotationFilter = new OneEuroFilterQuat(ROTATION_FILTER_CONFIG) + private _position = vec3.zero() + private _rotation = quat.quatIdentity() + + private _trackingQuality: MotionController.TrackingQuality = + MotionController.TrackingQuality?.Unknown + private onTrackingQualityChangeEvent = + new Event() + + /** + * Public API to subscribe to controller state change events. + * + * @returns The public api + */ + readonly onControllerStateChange: event1 | undefined + + /** + * Public API to subscribe to tracking quality change events. + * + * @returns The public api + */ + readonly onTrackingQualityChange = + this.onTrackingQualityChangeEvent.publicApi() + + /** Enables filtering of position and rotation */ + filterPositionAndRotation: boolean = true + + constructor() { + this.initializeMotionController() + if (this._motionController === undefined) { + return + } + + this.onControllerStateChange = + this._motionController?.onControllerStateChange + + this.onControllerStateChange?.add((state) => { + this.log.d("Controller state changed to : " + state) + }) + + this.update(this.filterPositionAndRotation) + } + + private initializeMotionController(): void { + this._motionControllerModule = + MotionControllerProvider.getInstance().getModule() + + if (this._motionControllerModule === undefined) { + return + } + + let options = MotionController.Options.create() + options.motionType = MotionController.MotionType.SixDoF + + this._motionController = this._motionControllerModule.getController( + options, + ) as MotionController + + this._trackingQuality = this._motionController.getTrackingQuality() + } + + private update(useFilter: boolean = true): void { + if ( + this._motionControllerModule === undefined || + this._motionController === undefined + ) { + return + } + + if (this._motionController?.isControllerAvailable()) { + this._position = useFilter + ? this.translateFilter.filter( + this._motionController.getWorldPosition(), + getTime(), + ) + : this._motionController.getWorldPosition() + + this._rotation = useFilter + ? this.rotationFilter.filter( + this._motionController.getWorldRotation(), + getTime(), + ) + : this._motionController.getWorldRotation() + } + + if (this._trackingQuality !== this._motionController.getTrackingQuality()) { + this.onTrackingQualityChangeEvent.invoke( + this._motionController.getTrackingQuality(), + ) + this.log.v( + "Motion Controller Tracking Quality has changed to : " + + this._motionController.getTrackingQuality(), + ) + this.translateFilter.reset() + this.rotationFilter.reset() + } + + this._trackingQuality = this._motionController.getTrackingQuality() + + this.animationManager.requestAnimationFrame(() => + this.update(this.filterPositionAndRotation), + ) + } + + /** + * @returns the current Motion Controller module instance. + */ + get motionController(): MotionController | undefined { + return this._motionController + } + + /** + * @returns the current position. + */ + get position(): vec3 { + return this._position + } + + /** + * @returns the current rotation. + */ + get rotation(): quat { + return this._rotation + } + + /** + * @returns the current tracking quality or undefined is the module is not + * available. + */ + get trackingQuality(): MotionController.TrackingQuality | undefined { + if (this._motionController === undefined) { + return undefined + } + + return this._motionController.getTrackingQuality() + } + + /** + * @returns if the mobile input data provider is available, + * which means that it is receiving data. + */ + isAvailable(): boolean { + if (this._motionController === undefined) { + return false + } + + return this._motionController.isControllerAvailable() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts.meta new file mode 100644 index 00000000..eebe31c0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/MobileInputData/MobileInputData.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 50906809-74b4-408e-8104-e1352534f78c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 50906809-74b4-408e-8104-e1352534f78c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c9882c18-f1be-48e9-b6ef-f69f7b23b69c + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts new file mode 100644 index 00000000..b1ba354b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts @@ -0,0 +1,190 @@ +import {Interactable} from "../../Components/Interaction/Interactable/Interactable" +import {InteractionManager} from "../../Core/InteractionManager/InteractionManager" +import {TargetingMode} from "../../Core/Interactor/Interactor" +import {isDescendantOf} from "../../Utils/SceneObjectUtils" +import CameraProvider from "../CameraProvider/CameraProvider" +import WorldCameraFinderProvider from "../CameraProvider/WorldCameraFinderProvider" + +export type InteractableHitInfo = { + /** + * The {@link Interactable} that was hit + */ + interactable: Interactable + /** + * The {@link vec3} representing the hit position relative to the Interactable's local space. + */ + localHitPosition: vec3 + /** + * The detected hit {@link RayCastHit} from the collision + */ + hit: RayCastHit + /** + * The {@link TargetingMode} that resulted in this collision + */ + targetMode: TargetingMode +} + +/** + * Base class for all target providers + */ +export default abstract class TargetProvider { + abstract readonly targetingMode: TargetingMode + + protected camera = WorldCameraFinderProvider.getInstance() + + protected interactionManager = InteractionManager.getInstance() + + protected _currentInteractableHitInfo: InteractableHitInfo | null = null + + /** + * @returns origin position in world space + */ + abstract get startPoint(): vec3 + + /** + * @returns end position in world space + */ + abstract get endPoint(): vec3 + + /** + * @returns the hit information {@link InteractableHitInfo} for the current interactable or null if there was no hit + */ + get currentInteractableHitInfo(): InteractableHitInfo | null { + return this._currentInteractableHitInfo + } + + /** + * Set the _currentInteractableHitInfo to null, used when an Interactable is deleted from Lens Studio, to keep state in sync + */ + clearCurrentInteractableHitInfo(): void { + this._currentInteractableHitInfo = null + } + + /** + * @returns whether the provider has found a target or not + */ + hasTarget(): boolean { + return this._currentInteractableHitInfo !== null + } + + /** + * Recomputes the target + */ + abstract update(): void + + /** Destroys the provider */ + abstract destroy(): void + + /** + * @param hits - list of {@link RayCastHit} + * @param targetingMode - targeting mode used to filter hits + * @param getInteractableByCollider - function that is used to get the interactable associated to the collider + * (to enable the method to be static) + * @param offset - offset value that defines if the raycast was offset from the start point + * @param camera - camera used to verify FoV + * @param allowOutOfFovInteraction - whether interactions that are out of the camera's field of view are allowed + * @returns the hit corresponding to the target from the list of hits + */ + static getInteractableHitFromRayCast( + hits: RayCastHit[], + targetingMode: TargetingMode, + getInteractableByCollider: ( + collider: ColliderComponent + ) => Interactable | null, + offset = 0, + camera: CameraProvider | null = null, + allowOutOfFovInteraction = true + ): InteractableHitInfo | null { + const hitInfos: InteractableHitInfo[] = [] + for (const hit of hits) { + if ( + !allowOutOfFovInteraction && + camera !== null && + !camera.inFoV(hit.position) + ) { + continue + } + + const interactable = getInteractableByCollider(hit.collider) + + if ( + interactable !== null && + (interactable.targetingMode & targetingMode) !== 0 + ) { + hit.skipRemaining = false + + hitInfos.push({ + interactable: interactable, + localHitPosition: interactable.sceneObject + .getTransform() + .getInvertedWorldTransform() + .multiplyPoint(hit.position), + hit: { + collider: hit.collider, + distance: hit.distance + offset, + normal: hit.normal, + position: hit.position, + skipRemaining: false, + t: 0, + triangle: hit.triangle, + getTypeName: hit.getTypeName, + isOfType: hit.isOfType, + isSame: hit.isSame, + }, + targetMode: targetingMode, + }) + } + } + + return TargetProvider.getNearestDeeplyNestedInteractable(hitInfos) + } + + /** + * The nearest deeply nested interactable, is the latest descendant of a list of + * interactables, when they are ordered by distance. + * @param hitInfos - list of hits + * @returns - the nearest deeply nested interactable + */ + static getNearestDeeplyNestedInteractable( + hitInfos: InteractableHitInfo[] + ): InteractableHitInfo | null { + hitInfos.sort((hitA, hitB) => { + return hitA.hit.distance - hitB.hit.distance + }) + + let targetHitInfo: InteractableHitInfo | null = null + + for (const currentHitInfo of hitInfos) { + if ( + targetHitInfo === null || + isDescendantOf( + currentHitInfo.interactable.sceneObject, + targetHitInfo.interactable.sceneObject + ) + ) { + targetHitInfo = currentHitInfo + } else { + break + } + } + + return targetHitInfo + } + + protected getInteractableHitFromRayCast( + hits: RayCastHit[], + offset = 0, + allowOutOfFovInteraction = true + ): InteractableHitInfo | null { + return TargetProvider.getInteractableHitFromRayCast( + hits, + this.targetingMode, + this.interactionManager.getInteractableByCollider.bind( + this.interactionManager + ), + offset, + this.camera, + allowOutOfFovInteraction + ) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts.meta new file mode 100644 index 00000000..df1cbf4b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetProvider.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 69875b49-bdc0-4584-a2f2-6ac42e5f4982 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 69875b49-bdc0-4584-a2f2-6ac42e5f4982 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 37f3f7da-9c16-455d-9725-c4e7fa0502df + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts new file mode 100644 index 00000000..57ba1379 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts @@ -0,0 +1,10 @@ +/** + * TargetingData structure, received from LensCore's Gesture Module API + * Contains the normalized direction and the locus (origin) point of the ray, + * both interpreted in world coordinate system + */ +export type TargetingData = { + targetingDirectionInWorld: vec3 + targetingLocusInWorld: vec3 + intendsToTarget: boolean +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts.meta new file mode 100644 index 00000000..61d5f3c7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Providers/TargetProvider/TargetingData.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 45740a92-912d-440e-86da-0e324c0b9389 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 45740a92-912d-440e-86da-0e324c0b9389 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6eb495a4-efd3-4db5-989c-847572e44962 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts new file mode 100644 index 00000000..ccc92a24 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts @@ -0,0 +1,39 @@ +import {InteractionManager as InteractionManagerProvider} from "./Core/InteractionManager/InteractionManager" +import {CursorControllerProvider} from "./Providers/CursorControllerProvider/CursorControllerProvider" +import {HandInputData as HandInputDataProvider} from "./Providers/HandInputData/HandInputData" +import {InteractionConfigurationProvider} from "./Providers/InteractionConfigurationProvider/InteractionConfigurationProvider" +import SIKLogLevelProvider from "./Providers/InteractionConfigurationProvider/SIKLogLevelProvider" +import {MobileInputData as MobileInputDataProvider} from "./Providers/MobileInputData/MobileInputData" + +export interface SIKAPI { + SIKLogLevelProvider: SIKLogLevelProvider + InteractionConfiguration: InteractionConfigurationProvider + HandInputData: HandInputDataProvider + MobileInputData: MobileInputDataProvider + InteractionManager: InteractionManagerProvider + CursorController: CursorControllerProvider +} + +export const SIK: SIKAPI = new Proxy( + {}, + { + get: (target, prop: keyof SIKAPI) => { + switch (prop) { + case "SIKLogLevelProvider": + return SIKLogLevelProvider.getInstance() + case "InteractionConfiguration": + return InteractionConfigurationProvider.getInstance() + case "HandInputData": + return HandInputDataProvider.getInstance() + case "MobileInputData": + return MobileInputDataProvider.getInstance() + case "InteractionManager": + return InteractionManagerProvider.getInstance() + case "CursorController": + return CursorControllerProvider.getInstance() + default: + throw new Error(`Property ${String(prop)} does not exist on SIK API`) + } + }, + } +) as SIKAPI diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts.meta new file mode 100644 index 00000000..b06b1ff8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/SIK.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 1fc788e8-d525-4812-8c51-49592c26855c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 1fc788e8-d525-4812-8c51-49592c26855c + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! f6e0dfb2-21ba-4e43-a66c-cd17f346e486 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts new file mode 100644 index 00000000..8164826a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts @@ -0,0 +1,119 @@ +export type BistableThresholdConfig = { + edgeActivate: number + edgeDeactivate: number +} + +export type NullableBoolean = null | boolean + +/** + * BistableThreshold tracks the state of a value over time, + * and determines which side of the threshold the value is + * in. It is superior to a typical single-value threshold + * in being resistant to noise and jitter because it + * "resists" change. + * + * The "edge" of the BistableThreshold has an "activate" side + * and a "deactivate" side, and adjusting the difference + * between them will make the threshold more or less resistant + * to change. + */ +export default class BistableThreshold { + private state: NullableBoolean = null + private direction = + this.config.edgeActivate > this.config.edgeDeactivate ? 1 : -1 + + constructor(private config: BistableThresholdConfig) {} + + /** + * update the Threshold and return a boolean if the state + * changed, or null if it did not + * + * @param newVal + */ + update(newVal: number): NullableBoolean { + switch (this.state) { + case null: + if ( + this.direction * newVal > + this.direction * this.config.edgeActivate + ) { + this.state = true + return true + } else if ( + this.direction * newVal < + this.direction * this.config.edgeDeactivate + ) { + this.state = false + return false + } + return null + case true: + if ( + this.direction * newVal < + this.direction * this.config.edgeDeactivate + ) { + this.state = false + return false + } + return null + case false: + if ( + this.direction * newVal > + this.direction * this.config.edgeActivate + ) { + this.state = true + return true + } + return null + } + } + + /** + * update a system of thresholds together, maininting the bistability + * of each as well as the bistability of the system as a whole + * + * @param {...any} system + */ + static updateSystem( + ...system: [threshold: BistableThreshold, value: number][] + ): NullableBoolean { + // check the first state, if it's null, the system hasn't updated + const [firstThreshold, firstValue] = system[0] + const firstUpdated = firstThreshold.update(firstValue) + const firstState = firstThreshold.getState() + + /* + * update each state, tracking if any of them updated, and if all + * of them have the same state + */ + let anyUpdated = firstUpdated !== null + let allStatesEqual = true + for (let i = 1; i < system.length; i++) { + // update the threshold + const [threshold, value] = system[i] + const update = threshold.update(value) + const state = threshold.getState() + allStatesEqual &&= state === firstState + anyUpdated ||= update !== null + } + + // if any have updated, then the system has updated as a whole + return anyUpdated && allStatesEqual ? firstState : null + } + + /** + * get the current state of the Threshold. This is less useful than the + * update method since it only tells us the current state, not if it + * has changed recently + */ + getState(): NullableBoolean { + return this.state + } + + /** + * Clear the state of the threshold, returning to null for the state + */ + clearState(): void { + this.state = null + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts.meta new file mode 100644 index 00000000..b386e4a3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/BistableThreshold.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! e788acce-8c1a-4079-95ec-31518d2da559 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! e788acce-8c1a-4079-95ec-31518d2da559 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3abba5d8-db02-4542-968c-c743e42d06ac + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts new file mode 100644 index 00000000..088fcd79 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts @@ -0,0 +1,83 @@ +/** + * Event class with typed event arguments + */ + +export type callback = (args: Arg) => void +export type unsubscribe = () => void + +/** + * Represents the public api of an event. + */ +export interface PublicApi { + (cb: callback): unsubscribe + add(cb: callback): unsubscribe + remove(cb: callback): void +} + +export default class Event { + private subscribers: callback[] + + constructor(...callbacks: (callback | undefined)[]) { + this.subscribers = callbacks.filter( + (cb) => cb !== undefined + ) as callback[] + } + + /** + * Register an event handler + * + * @param handler to register + */ + public add(handler: callback) { + this.subscribers.push(handler) + } + + /** + * Unregister an event handler + * + * @param handler to remove + */ + public remove(handler: callback) { + this.subscribers = this.subscribers.filter((h) => { + return h !== handler + }) + } + + /** + * Invoke the event and notify handlers + * + * @param arg Event args to pass to the handlers + */ + public invoke(arg: Arg) { + this.subscribers.forEach((handler) => { + handler(arg) + }) + } + + /** + * Construct an object to serve as the publicApi of this + * event. This makes it so an event can be used as "pre-bound" + * function, and also prevents "invoke" from being called externally + */ + public publicApi(): PublicApi { + const event = this + /** + * @param callback + */ + function add(callback: callback) { + event.add(callback) + return () => event.remove(callback) + } + + /** + * @param callback + */ + function remove(callback: callback) { + event.remove(callback) + } + + add.remove = remove + add.add = add // can be called as a method or directly + return add + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts.meta new file mode 100644 index 00000000..26240e45 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Event.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! ed07102b-7d09-440c-bae1-f02e0ce7beba + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ed07102b-7d09-440c-bae1-f02e0ce7beba + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 9192815c-8877-492e-8d26-9a258b1a1046 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts new file mode 100644 index 00000000..a84a932c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts @@ -0,0 +1,20 @@ +/** + * Represents a filter of some kind. + */ +export default interface Filter { + /** + * Applies filter to a sample + * @param sample - value to be filtered + * @param timestamp - timestamp when the sample was measured + */ + filter(sample: T, timestamp: number): T +} + +/** + * A filter that does nothing. + */ +export class NoOpFilter implements Filter { + filter(sample: T, timestamp: number): T { + return sample + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts.meta new file mode 100644 index 00000000..0a88dd43 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Filter.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 45fde06f-fe79-44e6-9290-c7cf6b8046b5 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 45fde06f-fe79-44e6-9290-c7cf6b8046b5 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 6ce14bfd-9db3-4d0e-89ac-47da8250a1f8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts new file mode 100644 index 00000000..b4b972e0 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts @@ -0,0 +1,66 @@ +import {lazyProperty} from "./lazyProperty" +import NativeLogger from "./NativeLogger" + +const TAG = "InputChecker" + +/** + * Describes the input checker, that check if inputs are valid or not + */ +export class InputChecker { + private log = new NativeLogger(TAG) + + constructor(private sceneObjectName: string) {} + + /** + * Throws an error if an input is undefined, otherwise, returns the input + * without the undefined type + * @param input the input value to check, can be either typed or undefined + * @param inputName the input name for logging + * @returns input with typing + */ + checkUndefined(input: Type | undefined, inputName: string): Type { + if (input === undefined) { + throw new Error( + `${inputName} is not specified in SceneObject: ${this.sceneObjectName}` + ) + } + + return input + } + + /** + * This can be used to delay the fetching of a script property until needed, which is useful for showIf + * properties that may be unused. + * @param getPropertyFunction The function to get the value of the property, when needed. + * @param propertyName The name of the property, for logging. + * @returns a function that will return the value of getPropertyFunction, which will only be called once + */ + lazyScriptProperty( + getPropertyFunction: () => T, + propertyName: string + ): () => T { + return lazyProperty(() => { + return this.checkUndefined(getPropertyFunction(), propertyName) + }) + } + + /** + * Log a warning if an input is undefined, otherwise, returns the input + * without the undefined type + * @param input the input value to check, can be either typed or undefined + * @param inputName the input name for logging + * @returns input with typing + */ + warnIfUndefined( + input: Type | undefined, + inputName: string + ): Type | undefined { + if (input === undefined) { + this.log.w( + `${inputName} is not specified in SceneObject: ${this.sceneObjectName}` + ) + } + + return input + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts.meta new file mode 100644 index 00000000..7687f401 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InputChecker.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! a3ba2ebd-b54d-4179-8059-9e0485253bb0 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! a3ba2ebd-b54d-4179-8059-9e0485253bb0 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! c617d4cd-fa2a-4005-b472-cf4ff2b58ecc + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts new file mode 100644 index 00000000..d954a723 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts @@ -0,0 +1,21 @@ +/** + * Creates callbacks to be passed to UI Kit events from a script in the Inspector panel. + * @param scriptComponent - the script to be used. + * @param functionNames - the names of the functions within the script to be invoked during this callback. + * @returns a callback that will invoke the specified functions in the script provided. + */ +export function createCallback( + scriptComponent: ScriptComponent, + functionNames: string[] +): (args: T) => void { + if (scriptComponent === undefined) { + return () => {} + } + return (args) => { + functionNames.forEach((name) => { + if ((scriptComponent as any)[name]) { + (scriptComponent as any)[name](args) + } + }) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts.meta new file mode 100644 index 00000000..b0023fb5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/InspectorCallbacks.ts.meta @@ -0,0 +1,40 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 6e8ad8c4-be11-465f-9799-a836a048ec19 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 6e8ad8c4-be11-465f-9799-a836a048ec19 + PackageType: NotAPackage + ImporterSettings: ! + {} + AssetDataMap: + TypeScriptAsset: ! 6ba9eba2-ce82-46c7-bec5-ae67edcd662d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + InputLines: + [] + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts new file mode 100644 index 00000000..7abb674f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts @@ -0,0 +1,19 @@ +import {Singleton} from "../Decorators/Singleton" +import {UpdateDispatcher} from "./UpdateDispatcher" + +@Singleton +export class LensConfig { + public static getInstance: () => LensConfig + + private sceneObject: SceneObject + private script: ScriptComponent + + readonly updateDispatcher: UpdateDispatcher + + public constructor() { + this.sceneObject = global.scene.createSceneObject("LensConfig-EventDispatcher") + this.script = this.sceneObject.createComponent("ScriptComponent") + + this.updateDispatcher = new UpdateDispatcher(this.script) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts.meta new file mode 100644 index 00000000..29cdd560 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LensConfig.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 1ba0ef7a-2385-443a-bfc3-5d06b07ffd3f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 1ba0ef7a-2385-443a-bfc3-5d06b07ffd3f + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 8c4d81f6-2d77-432a-a6cd-ddf7ef08f5a9 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts new file mode 100644 index 00000000..65df6636 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts @@ -0,0 +1,10 @@ +/** + * The severity of a log message. + */ +export enum LogLevel { + Error = 3, + Warning = 4, + Info = 6, + Debug = 7, + Verbose = 8, +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts.meta new file mode 100644 index 00000000..1c1f447d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/LogLevel.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 0054f024-aea3-4230-bd26-de520e6e9b3e + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 0054f024-aea3-4230-bd26-de520e6e9b3e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 77f62c39-5bd8-45bd-a86f-95b6f6a50f19 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts new file mode 100644 index 00000000..44885d82 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts @@ -0,0 +1,42 @@ +import Filter from "./Filter" + +const TAG = "MovingAverageFilter" + +/** + * Implements a moving average algorithm. A window of specified length, + * moves over the data, sample by sample, and the average is computed + * over the data in the window. + * + * Source: https://www.mathworks.com/help/dsp/ug/sliding-window-method-and-exponential-weighting-method.html + */ +export class MovingAverageFilter implements Filter { + private samples: T[] = [] + + constructor( + private windowLength: number, + private zero: () => T, + private average: (samples: T[]) => T + ) { + this.clear() + } + + /** + * @inheritdoc + */ + filter(sample: T, _timestamp: number): T { + if (this.samples.length === this.windowLength) { + this.samples.shift() + } + this.samples.push(sample) + + return this.average(this.samples) + } + + clear(): void { + this.samples = [] + } + + averageSample(): T { + return this.average(this.samples) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts.meta new file mode 100644 index 00000000..bbf0e31f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/MovingAverageFilter.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! c31b00f9-657c-487f-8124-20fa110cda10 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c31b00f9-657c-487f-8124-20fa110cda10 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d57bcc69-b39e-45dd-9f36-97d378dbaa01 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts new file mode 100644 index 00000000..f25f076d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts @@ -0,0 +1,70 @@ +import LogLevelProvider from "../Providers/InteractionConfigurationProvider/LogLevelProvider" +import SIKLogLevelProvider from "../Providers/InteractionConfigurationProvider/SIKLogLevelProvider" +import {logWithTag} from "./logger" +import {LogLevel} from "./LogLevel" + +export default class NativeLogger { + private sikLogLevelProvider = SIKLogLevelProvider.getInstance() + + private tag: string + private logger: (...args: any[]) => void + private logLevelFilter: LogLevel + private logLevelProvider: LogLevelProvider + + constructor(tag: string, logLevelProvider?: LogLevelProvider) { + this.tag = tag + this.logger = logWithTag(tag) + + this.logLevelProvider = logLevelProvider ?? this.sikLogLevelProvider + this.logLevelFilter = this.logLevelProvider.logLevel + this.logLevelProvider.onLogLevelChanged.add(this.updateLogLevel.bind(this)) + } + + i(message: string): void { + if (!this.shouldLog(LogLevel.Info)) { + return + } + + this.logger(this.tag, message) + } + + d(message: string): void { + if (!this.shouldLog(LogLevel.Debug)) { + return + } + + this.logger(this.tag, message) + } + + e(message: string): void { + if (!this.shouldLog(LogLevel.Error)) { + return + } + + this.logger(this.tag, message) + } + + w(message: string): void { + if (!this.shouldLog(LogLevel.Warning)) { + return + } + + this.logger(this.tag, message) + } + + v(message: string): void { + if (!this.shouldLog(LogLevel.Verbose)) { + return + } + + this.logger(this.tag, message) + } + + private shouldLog(logLevel: LogLevel): boolean { + return logLevel <= this.logLevelFilter + } + + private updateLogLevel(logLevel: LogLevel): void { + this.logLevelFilter = logLevel + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts.meta new file mode 100644 index 00000000..61fdbc77 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/NativeLogger.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f28dfe31-e86b-4873-a5cc-30ca36fa9967 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f28dfe31-e86b-4873-a5cc-30ca36fa9967 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 2cbd9a67-e8b0-413d-a2da-9611ec49c074 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts new file mode 100644 index 00000000..27bd9025 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts @@ -0,0 +1,519 @@ +/** + * Author: Gery Casiez + * Details: http://cristal.univ-lille.fr/~casiez/1euro/ + * + * Copyright 2019 Inria + * + * BSD License https://opensource.org/licenses/BSD-3-Clause + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions + * and the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or + * promote products derived from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +import {SampleOps, Vec3SampleOps} from "./SampleOps" + +import NativeLogger from "./NativeLogger" + +/** + * + * Modified 2022 Snap Inc. + * + */ + +const TAG = "OneEuroFilter" + +const eps = 0.00001 +const minimumDt = 1.0 / 120.0 + +/** + * Makes sure dt is never 0 or negative + * + * @param dt - number to clamp + * @returns - clamped number + */ +function SafelyClampPeriod(dt: number): number { + return Math.max(dt, minimumDt) +} + +export class LowPassFilter { + private log = new NativeLogger(TAG) + + y: number + s: number + a = 0 + initialized = false + + constructor(alpha: number, initval = 0) { + // eslint-disable-next-line no-self-assign + initval = initval + this.y = this.s = initval + this.setAlpha(alpha) + } + + private setAlpha(alpha: number) { + if (alpha <= 0.0 || alpha > 1.0) { + this.log.w("alpha should be in (0.0., 1.0]") + } + this.a = alpha + } + /** + * Applies a filter to a value. + * + * @param value - The value to filter. + * @returns The filtered value after applying the specified alpha. + */ + filter(value: number) { + let result + if (this.initialized) { + result = this.a * value + (1.0 - this.a) * this.s + } else { + result = value + this.initialized = true + } + this.y = value + this.s = result + return result + } + /** + * Applies a filter to a value with a specified alpha. + * + * @param {number} value - The value to filter. + * @param {number} alpha - The alpha level to set before filtering. + * @returns The filtered value after applying the specified alpha. + */ + filterWithAlpha(value: number, alpha: number) { + this.setAlpha(alpha) + return this.filter(value) + } + /** + * Checks if the last raw value has been initialized or set. + * + * @returns {boolean} True if the last raw value is initialized; false otherwise. + */ + hasLastRawValue() { + return this.initialized + } + /** + * Retrieves the last raw value stored. + * + * @returns The last raw value if it has been set; undefined otherwise. + */ + lastRawValue() { + return this.y + } + /** + * Resets the internal state to uninitialized. + */ + reset() { + this.initialized = false + } +} + +export type OneEuroFilterConfig = { + frequency: number + minCutoff: number + beta: number + dcutoff: number +} + +abstract class OneEuroFilterBase { + private log = new NativeLogger(TAG) + + x: LowPassFilter + dx: LowPassFilter + + lasttime: number | undefined + lastcutoff: number | undefined + + frequency!: number + minCutoff!: number + beta!: number + dcutoff!: number + + constructor(config: OneEuroFilterConfig) { + this.setFrequency(config.frequency) + this.setMinCutoff(config.minCutoff) + this.setBeta(config.beta) + this.setDerivateCutoff(config.dcutoff) + this.x = new LowPassFilter(this.alpha(config.minCutoff)) + this.dx = new LowPassFilter(this.alpha(config.dcutoff)) + this.lasttime = undefined + this.lastcutoff = undefined + } + + /** + * Calculates the alpha value used for smoothing in the filter, based on a cutoff frequency. + * @param {number} cutoff - The cutoff frequency at which the filter should attenuate the signal. + * @returns {number} The calculated alpha value for the filter. + */ + alpha(cutoff: number) { + const te = 1.0 / this.frequency + const tau = 1.0 / (2 * Math.PI * cutoff) + return 1.0 / (1.0 + tau / te) + } + + /** + * Resets the internal state to uninitialized. + */ + reset() { + this.x.reset() + this.dx.reset() + this.lasttime = undefined + this.lastcutoff = undefined + } + + private setFrequency(f: number) { + if (f <= 0) { + this.log.w("freq should be >0") + } + this.frequency = f + } + + private setMinCutoff(mc: number) { + if (mc <= 0) { + this.log.w("mincutoff should be >0") + } + this.minCutoff = mc + } + + private setBeta(b: number) { + this.beta = b + } + + private setDerivateCutoff(dc: number) { + if (dc <= 0) { + this.log.w("dcutoff should be >0") + } + this.dcutoff = dc + } +} + +/** + * `OneEuroFilter` provides a mechanism for filtering noisy signals with a one euro filter algorithm. + * It extends the `OneEuroFilterBase` class. + */ +export class OneEuroFilter extends OneEuroFilterBase { + /** + * Applies the filter to the given value using the current filter configuration and updates the internal state. + * @param {number} value - The new value to be filtered. + * @param {number} timestamp - The timestamp associated with the value, used to calculate the dynamic parameters of the filter. + * @returns {number} The filtered value after applying the filter's algorithm. + */ + filter(value: number, timestamp: number): number { + // Update the sampling frequency based on timestamps + if (this.lasttime !== undefined && timestamp !== undefined) { + this.frequency = 1.0 / SafelyClampPeriod(timestamp - this.lasttime) + } + this.lasttime = timestamp + // Estimate the current variation per second + const dvalue = this.x.hasLastRawValue() + ? (value - this.x.lastRawValue()) * this.frequency + : 0.0 + const edvalue = this.dx.filterWithAlpha(dvalue, this.alpha(this.dcutoff)) + + // Use it to update the cutoff frequency + const cutoff = this.minCutoff + this.beta * Math.abs(edvalue) + this.lastcutoff = cutoff + + // Filter the given value + return this.x.filterWithAlpha(value, this.alpha(cutoff)) + } +} +/** + * OneEuroFilter for vec2 + * It extends the `OneEuroFilterBase` class. + */ +export class OneEuroFilterVec2 extends OneEuroFilterBase { + y: LowPassFilter + dy: LowPassFilter + + constructor(config: OneEuroFilterConfig) { + super(config) + + this.y = new LowPassFilter(this.alpha(config.minCutoff)) + this.dy = new LowPassFilter(this.alpha(config.dcutoff)) + } + /** + * Resets the filter states. + */ + override reset(): void { + super.reset() + + this.y.reset() + this.dy.reset() + } + /** + * Applies the filter to the given value using the current filter configuration and updates the internal state. + * @param {vec2} value - The new value to be filtered. + * @param {number} timestamp - The timestamp associated with the value, used to calculate the dynamic parameters of the filter. + * @returns {vec2} The filtered value after applying the filter's algorithm. + */ + filter(value: vec2, timestamp: number): vec2 { + // Update the sampling frequency based on timestamps + if (this.lasttime !== undefined && timestamp !== undefined) { + this.frequency = 1.0 / SafelyClampPeriod(timestamp - this.lasttime) + } + this.lasttime = timestamp + // Estimate the current variation per second + const dValueX = this.x.hasLastRawValue() + ? (value.x - this.x.lastRawValue()) * this.frequency + : 0.0 + const dValueY = this.y.hasLastRawValue() + ? (value.y - this.y.lastRawValue()) * this.frequency + : 0.0 + + const edValueX = this.dx.filterWithAlpha(dValueX, this.alpha(this.dcutoff)) + const edValueY = this.dy.filterWithAlpha(dValueY, this.alpha(this.dcutoff)) + + const edValueXyNorm = Math.sqrt( + Math.pow(edValueX, 2) + Math.pow(edValueY, 2) + ) + + // Use it to update the cutoff frequency + const cutoff = this.minCutoff + this.beta * Math.abs(edValueXyNorm) + this.lastcutoff = undefined + + // Filter the given value + const xOut = this.x.filterWithAlpha(value.x, this.alpha(cutoff)) + const yOut = this.y.filterWithAlpha(value.y, this.alpha(cutoff)) + return new vec2(xOut, yOut) + } +} +/** + * OneEuroFilter for vec3 + * It extends the `OneEuroFilterBase` class. + */ +export class OneEuroFilterVec3 extends OneEuroFilterBase { + y: LowPassFilter + dy: LowPassFilter + z: LowPassFilter + dz: LowPassFilter + speed: LowPassFilter + + constructor(config: OneEuroFilterConfig) { + super(config) + + this.y = new LowPassFilter(this.alpha(config.minCutoff)) + this.dy = new LowPassFilter(this.alpha(config.dcutoff)) + this.z = new LowPassFilter(this.alpha(config.minCutoff)) + this.dz = new LowPassFilter(this.alpha(config.dcutoff)) + this.speed = new LowPassFilter(this.alpha(config.dcutoff), 0) + } + + /** + * Resets the filter to its initial state. This method is typically called to prepare + * the filter for a new set of data or to clear any existing state. + */ + override reset(): void { + super.reset() + this.y.reset() + this.dy.reset() + this.z.reset() + this.dz.reset() + this.speed.reset() + } + + /** + * Applies the filter to the given value using the current filter configuration and updates the internal state. + * @param {vec3} value - The new value to be filtered. + * @param {number} timestamp - The timestamp associated with the value, used to calculate the dynamic parameters of the filter. + * @returns {vec3} The final filtered value + */ + filter(value: vec3, timestamp: number): vec3 { + // Update the sampling frequency based on timestamps + if (this.lasttime !== undefined && timestamp !== undefined) { + this.frequency = 1.0 / SafelyClampPeriod(timestamp - this.lasttime) + } + this.lasttime = timestamp + // Estimate the current variation per second + const dValueX = this.x.hasLastRawValue() + ? (value.x - this.x.lastRawValue()) * this.frequency + : 0.0 + const dValueY = this.y.hasLastRawValue() + ? (value.y - this.y.lastRawValue()) * this.frequency + : 0.0 + const dValueZ = this.z.hasLastRawValue() + ? (value.z - this.z.lastRawValue()) * this.frequency + : 0.0 + + const edValueXyzNorm = Math.sqrt( + Math.pow(dValueX, 2) + Math.pow(dValueY, 2) + Math.pow(dValueZ, 2) + ) + const newSpeed = this.speed.filterWithAlpha( + edValueXyzNorm, + this.alpha(this.dcutoff) + ) + + // Use it to update the cutoff frequency + const cutoff = this.minCutoff + this.beta * Math.abs(newSpeed) + this.lastcutoff = cutoff + + // Filter the given value + const xOut = this.x.filterWithAlpha(value.x, this.alpha(cutoff)) + const yOut = this.y.filterWithAlpha(value.y, this.alpha(cutoff)) + const zOut = this.z.filterWithAlpha(value.z, this.alpha(cutoff)) + return new vec3(xOut, yOut, zOut) + } +} +/** + * OneEuroFilterQuat provides a mechanism for filtering noisy rotations. + * It extends the `OneEuroFilterBase` class + */ +export class OneEuroFilterQuat extends OneEuroFilterBase { + qPrevRot: quat | undefined + speed: LowPassFilter + + constructor(config: OneEuroFilterConfig) { + super(config) + + this.qPrevRot = undefined + this.speed = new LowPassFilter(this.alpha(config.dcutoff), 0) + } + + /** + * Resets the internal state to uninitialized. + */ + override reset(): void { + super.reset() + this.speed.reset() + } + + /** + * Applies the filter to the given value using the current filter configuration and updates the internal state. + * @param {quat} qNewRot - The new value to be filtered. + * @param {number} timestamp - The timestamp associated with the value, used to calculate the dynamic parameters of the filter. + * @returns {quat} The final filtered value + */ + filter(qNewRot: quat, timestamp: number): quat { + // Update the sampling frequency based on timestamps + if (this.lasttime !== undefined && timestamp !== undefined) { + this.frequency = 1.0 / SafelyClampPeriod(timestamp - this.lasttime) + } + this.lasttime = timestamp + + qNewRot.normalize() + if (this.qPrevRot === undefined) { + this.qPrevRot = qNewRot + } + + const delta = qNewRot.dot(this.qPrevRot) + const mag = Math.max(-1, Math.min(1, 2 * delta * delta - 1)) + const deltaAngle = Math.acos(mag) + const newSpeed = deltaAngle * this.frequency + + const filteredSpeed = this.speed.filterWithAlpha( + newSpeed, + this.alpha(this.dcutoff) + ) + // Use it to update the cutoff frequency + const cutoff = this.minCutoff + this.beta * Math.abs(filteredSpeed) + + this.lastcutoff = cutoff + const rotationAlpha = this.alpha(cutoff) + const newRotation = quat.slerp(this.qPrevRot, qNewRot, rotationAlpha) + + newRotation.normalize() + this.qPrevRot = newRotation + newRotation.normalize() + return newRotation + } +} +/** + * Represents a filter of some kind. + */ +interface Filter { + /** + * Applies filter to a sample + * @param sample - value to be filtered + * @param timestamp - timestamp when the sample was measured + */ + filter(sample: T, timestamp: number): T +} + +/** + * A filter that does nothing. + */ +class NoOpFilter implements Filter { + filter(sample: T, timestamp: number): T { + return sample + } +} + +class LowPassFilter_v2 implements Filter { + private previousValue: T | null = null + private previousRawValue: T | null = null + + constructor(public alpha: number, private sampleOps: SampleOps) {} + + /** + * Set alpha + * @param newAlpha + */ + setAlpha(newAlpha: number) { + this.alpha = newAlpha + } + + hasPreviousRawValue(): boolean { + return this.previousRawValue !== null + } + + getPreviousRawValue(): T { + return this.previousRawValue ?? this.sampleOps.zero() + } + + hasPreviousValue(): boolean { + return this.previousValue !== null + } + + getPreviousValue(): T { + return this.previousValue ?? this.sampleOps.zero() + } + + filter(sample: T): T { + this.previousRawValue = sample + if (this.previousValue === null) { + this.previousValue = sample + } + + const scaledValue = this.sampleOps.uniformScale(sample, this.alpha) + const scaledPrevValue = this.sampleOps.uniformScale( + this.previousValue, + 1 - this.alpha + ) + const smoothedValue = this.sampleOps.add(scaledValue, scaledPrevValue) + + this.previousValue = smoothedValue + return smoothedValue + } + + filterWithAlpha(sample: T, alpha: number): T { + this.alpha = alpha + return this.filter(sample) + } +} + +/** + * Vec3 specialization of LowPassFilter + */ +export class LowPassFilterVec3_v2 extends LowPassFilter_v2 { + constructor(alpha: number) { + super(alpha, new Vec3SampleOps()) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts.meta new file mode 100644 index 00000000..8bcc8508 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/OneEuroFilter.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 896c516c-dcd1-4a3d-a904-ba6051603544 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 896c516c-dcd1-4a3d-a904-ba6051603544 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 730deb28-68b0-41ef-a064-f82c5ae93f68 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts new file mode 100644 index 00000000..84c2ca10 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts @@ -0,0 +1,41 @@ +import Event, {callback} from "./Event" + +/** + * ReplayEvent keeps a buffer of {@link bufferSize} events that are emitted for + * each new subscriber. + */ +export default class ReplayEvent extends Event { + private _buffer: Arg[] = [] + + constructor( + private bufferSize: number = 1, + ...callbacks: (callback | undefined)[] + ) { + super(...callbacks) + if (this.bufferSize < 1) throw new Error("Buffer size can't be < 1") + } + + /** + * Register an event handler + * @param handler to register + */ + public override add(handler: callback) { + super.add(handler) + this._buffer.forEach((value: Arg) => { + handler(value) + }) + } + + public override invoke(arg: Arg): void { + super.invoke(arg) + this._buffer.push(arg) + this.trimBuffer() + } + + private trimBuffer() { + let currentBufferLength = this._buffer.length + if (currentBufferLength > this.bufferSize) { + this._buffer = this._buffer.splice(currentBufferLength - this.bufferSize) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts.meta new file mode 100644 index 00000000..303b33a4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/ReplayEvent.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 175c3d81-b135-4a5b-ae43-7440947d6342 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 175c3d81-b135-4a5b-ae43-7440947d6342 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 858b6819-d41f-407f-a3d6-bed120bd77af + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts new file mode 100644 index 00000000..7ea14d88 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts @@ -0,0 +1,14 @@ +/** + * Used to check if an Object reference has been destroyed on the LensCore side + * @param reference - the reference to check, typically a SceneObject or Component + * @returns - the same reference if not destroyed on the LensCore side, or null if destroyed + */ +export function getSafeReference< + T extends SceneObject | Component | Text | ScriptComponent +>(reference: T | null): T | null { + if (reference && !isNull(reference)) { + return reference + } + + return null +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts.meta new file mode 100644 index 00000000..c1b95a9c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SafeReference.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 448a7f40-db57-4798-a6a7-39ee1b1be974 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 448a7f40-db57-4798-a6a7-39ee1b1be974 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 7e6e7af7-8187-4865-89d1-8f15512aed8e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts new file mode 100644 index 00000000..aa4a5473 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts @@ -0,0 +1,94 @@ +/** + * Represents mathematical operations for + * a filter sample of generic type T + */ +export interface SampleOps { + uniformScale(value: T, scale: number): T + add(first: T, second: T): T + sub(first: T, second: T): T + magnitude(of: T): number + zero(): T +} + +/** + * Defines mathematical operations for + * a scalar filter sample. + */ +export class ScalarSampleOps implements SampleOps { + uniformScale(value: number, scale: number): number { + return value * scale + } + + add(first: number, second: number): number { + return first + second + } + + sub(first: number, second: number): number { + return first - second + } + + magnitude(of: number): number { + return Math.abs(of) + } + + zero(): number { + return 0 + } +} + +/** + * Defines mathematical operations for + * a vec2 filter sample. + */ +export class Vec2SampleOps implements SampleOps { + /** @inheritdoc */ + uniformScale(value: vec2, scale: number): vec2 { + return value.uniformScale(scale) + } + + /** @inheritdoc */ + add(first: vec2, second: vec2): vec2 { + return first.add(second) + } + + /** @inheritdoc */ + sub(first: vec2, second: vec2): vec2 { + return first.sub(second) + } + + /** @inheritdoc */ + magnitude(of: vec2): number { + return of.length + } + + /** @inheritdoc */ + zero(): vec2 { + return vec2.zero() + } +} + +/** + * Defines mathematical operations for + * a vec3 filter sample. + */ +export class Vec3SampleOps implements SampleOps { + uniformScale(value: vec3, scale: number): vec3 { + return value.uniformScale(scale) + } + + add(first: vec3, second: vec3): vec3 { + return first.add(second) + } + + sub(first: vec3, second: vec3): vec3 { + return first.sub(second) + } + + magnitude(of: vec3): number { + return of.length + } + + zero(): vec3 { + return vec3.zero() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts.meta new file mode 100644 index 00000000..5d756cf9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SampleOps.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 1ee7c7a3-89c2-42d7-9004-c52c4138a9ff + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 1ee7c7a3-89c2-42d7-9004-c52c4138a9ff + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d072a335-69f9-4e08-a4c7-d2f15f15eda2 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts new file mode 100644 index 00000000..ddc1205b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts @@ -0,0 +1,61 @@ +/** + * Searches for a SceneObject with the given name in the tree rooted at the given root SceneObject. + * + * @param root - The root SceneObject of the tree to search. + * @param name - The name of the SceneObject to search for. + * @returns The first SceneObject with the given name if it exists in the tree, or undefined otherwise. + */ +export function findSceneObjectByName( + root: SceneObject | null, + name: string +): SceneObject | null { + if (root === null) { + const rootObjectCount = global.scene.getRootObjectsCount() + let current = 0 + while (current < rootObjectCount) { + const result = findSceneObjectByName( + global.scene.getRootObject(current), + name + ) + if (result) { + return result + } + current += 1 + } + } else { + if (root.name === name) { + return root + } + + for (let i = 0; i < root.getChildrenCount(); i++) { + const child = root.getChild(i) + const result = findSceneObjectByName(child, name) + if (result) { + return result + } + } + } + return null +} +/** + * Checks if a {@link SceneObject} is a descendant of another. + * @param sceneObject - the potential descendant. + * @param root - the potential ascendant. + * @returns true, if sceneObject is a descendant of root, + * otherwise, returns false. + */ +export function isDescendantOf( + sceneObject: SceneObject, + root: SceneObject +): boolean { + if (sceneObject === root) { + return true + } + + const parent = sceneObject.getParent() + if (parent === null) { + return false + } + + return isDescendantOf(parent, root) +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts.meta new file mode 100644 index 00000000..4c27a3b8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SceneObjectUtils.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 80337763-4fe6-4c0b-a5fc-da9c01be7453 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 80337763-4fe6-4c0b-a5fc-da9c01be7453 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 735adc92-bc24-42bc-a277-b4dbbf7be3c8 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts new file mode 100644 index 00000000..3415f392 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts @@ -0,0 +1,183 @@ +const TAG = "SeededRandomNumberGenerator" + +/** + * Optimal constant, per: + * Steele, GL, Vigna, S. Computationally easy, spectrally good multipliers for congruential pseudorandom number generators. Softw Pract Exper. 2022; 52( 2): 443– 458. doi:10.1002/spe.3030 + * https://onlinelibrary.wiley.com/doi/10.1002/spe.3030 + */ +const a = 0x915f77f5 + +// The c constant has no effect on the potency of the generator, and can be set to anything +const c = 12345 + +// Choosing a low modulus keeps javascript from losing precision +const m = Math.pow(2, 32) + +/** + * This is a random number generator that allows you to set the seed used, for generating + * consistent random values between runs. + * It is implemented as a linear congruential generator, which is fast but not very random. + * + * NOTE: The seed you pass needs to be an Integer + * + * See: https://en.wikipedia.org/wiki/Linear_congruential_generator + */ +export class SeededRandomNumberGenerator { + // The current seed used by the random number generator for the next call + seed: number + + constructor(seed?: number) { + this.seed = seed ?? 0 + if (!Number.isInteger(this.seed)) { + throw new Error( + `Illegal value: Non-Integer seed passed to SeededRandomNumberGenerator: ${this.seed}` + ) + } + } + + /** + * Returns a random integer between 0 and 2^32 + * @returns A random integer between 0 and 2^32 + */ + public randomInteger(): number { + const x = (a * this.seed + c) % m + this.seed = x + return x + } + + /** + * Generate a floating-point number in the given range + * @param {number} start The lowest value in the range. + * @param {number} end The highest value in the range. + * @returns A function that, when called, returns a number within the given range. + */ + public randomRange(start: number, end: number): () => number { + const range = end - start + return () => { + const x = this.randomInteger() + return (x / m) * range + start + } + } + + /** + * Generate an integer in the given range. + * @param {number} start The lowest value in the range. If this is a decimal, the start of the range will be the floor of the value. + * @param {number} end The highest value in the range. If this is a decimal, the end of the range will be the floor of the value. + * @returns A function that, when called, returns an integer within the given range. + */ + public randomIntegerRange(start: number, end: number): () => number { + const startFloor = Math.floor(start) + const endFloor = Math.floor(end) + const range = endFloor - startFloor + 1 + return () => { + const x = this.randomInteger() + return (x % range) + startFloor + } + } + + /** + * Returns an Array of random numbers within a specified range (no duplicates). + * @param rangeMin - The minimum value of the range (inclusive). + * @param rangeMax - The maximum value of the range (exclusive). + * @param numRandomNumbers - The number of random numbers to generate. + * @returns An Array of random numbers within the specified range. + * @throws Will throw an error if rangeMin >= rangeMax. + * @throws Will throw an error if numRandomNumbers > rangeMax - rangeMin. + */ + public getRandomNumberArrayInRangeNoDuplicates( + rangeMin: number, + rangeMax: number, + numRandomNumbers: number + ): number[] { + if (rangeMin >= rangeMax) { + throw new Error( + `Illegal arguments, rangeMin (${rangeMin}) cannot be >= rangeMax (${rangeMax})` + ) + } + + if (numRandomNumbers > rangeMax - rangeMin) { + throw new Error( + `Illegal arguments, numRandomNumbers (${numRandomNumbers}) cannot be > rangeMax - rangeMin (${ + rangeMax - rangeMin + })` + ) + } + + // To avoid choosing duplicate indexes, populate a list with all possible numbers so we can remove them as they are chosen + const possibleNumbers: number[] = [] + for (let i = rangeMin; i < rangeMax; i++) { + possibleNumbers.push(i) + } + + const chosenNumbers: number[] = [] + for (let i = 0; i < numRandomNumbers; i++) { + const index = this.randomIntegerRange(0, possibleNumbers.length - 1)() + chosenNumbers.push(possibleNumbers[index]) + possibleNumbers.splice(index, 1) + } + + return chosenNumbers + } + + /** + * Generates a random quaternion. + * The resulting quaternion is of unit length and its components range between -1 and 1. + * + * @returns A randomly generated quaternion of unit length. + */ + randomQuaternion(): quat { + const w = MathUtils.remap(this.randomRange(0, 1)(), 1, 0, 1, -1) + const x = MathUtils.remap(this.randomRange(0, 1)(), 1, 0, 1, -1) + const y = MathUtils.remap(this.randomRange(0, 1)(), 1, 0, 1, -1) + const z = MathUtils.remap(this.randomRange(0, 1)(), 1, 0, 1, -1) + + const returnQuat = new quat(w, x, y, z) + returnQuat.normalize() + return returnQuat + } + + /** + * Generates a random point within an Axis-Aligned Bounding Box (AABB). An AABB is a rectangular box + * specified by providing the minimum and maximum x, y, and z coordinates. + * + * @param {vec3} minPoint - The minimum point of the AABB. + * @param {vec3} maxPoint - The maximum point of the AABB. + * @throws Will throw an error if any component of minPoint is greater than the corresponding component of maxPoint. + * @returns A randomly generated point within the specified AABB, where minPoint.x <= x <= maxPont.x etc. + */ + randomPointInAABB(minPoint: vec3, maxPoint: vec3): vec3 { + if ( + minPoint.x > maxPoint.x || + minPoint.y > maxPoint.y || + minPoint.z > maxPoint.z + ) { + throw new Error( + "Illegal arguments, each component of minPoint cannot be greater than the corresponding component of maxPoint" + ) + } + + const x = MathUtils.remap( + this.randomRange(0, 1)(), + 1, + 0, + maxPoint.x, + minPoint.x + ) + const y = MathUtils.remap( + this.randomRange(0, 1)(), + 1, + 0, + maxPoint.y, + minPoint.y + ) + const z = MathUtils.remap( + this.randomRange(0, 1)(), + 1, + 0, + maxPoint.z, + minPoint.z + ) + + return new vec3(x, y, z) + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts.meta new file mode 100644 index 00000000..3624b9b8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/SeededRandomNumberGenerator.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 28c6ead9-fd73-431f-b574-8e81a9e081e2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 28c6ead9-fd73-431f-b574-8e81a9e081e2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 0b6bbc1d-5916-4186-b82b-5ec400696ebc + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts new file mode 100644 index 00000000..bb71232d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts @@ -0,0 +1,23 @@ +import {aabb} from "./aabb" + +/* + * Spatial is an interface that when implemented shows that a View has 3D bounds around which to draw a UI as well as + * a transform which can be used to manipulate that View in 3D space. By implementing ISpatial a view is defining its 3D + * bounds and possesion of a transform, which allow it to be manipulated via the MovableView class + */ +export interface Spatial { + /** + * Returns an axis aligned bounding box which represents the bounds of a view around which a UI can be created + */ + getAABB(): aabb + + /** + * Returns a world-space axis aligned bounding box which represents the bounds of a view around which a UI can be created + */ + getWorldAABB(): aabb + + /** + * Returns a Transform which is used in manipulating the object in 3D space + */ + getTransform(): Transform +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts.meta new file mode 100644 index 00000000..d8660757 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/Spatial.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! a848bbc6-0025-48bb-8d43-fd9d2b756cf8 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! a848bbc6-0025-48bb-8d43-fd9d2b756cf8 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 320a81ff-d476-4eb0-bad8-3cdbf8bc702b + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts new file mode 100644 index 00000000..e97500f5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts @@ -0,0 +1,153 @@ +export type Callback = (state: State) => void + +export type StateConfig = { + name: string +} & Partial<{ + onEnter: Callback + onExit: Callback + onUpdate: Callback + onLateUpdate: Callback + onSignal: Callback + transitions: TransitionConfig[] +}> + +export type CheckUpdateCallback = (state: State) => boolean +export type CheckSignalCallback = (signal: string, data: any) => boolean +export type TransitionExecutionCallback = () => void + +export type TransitionConfig = { + nextStateName: string +} & Partial<{ + checkOnUpdate: CheckUpdateCallback + checkOnSignal: CheckSignalCallback + onExecution: TransitionExecutionCallback +}> + +const TAG = "State" + +/** + * Transition class for a State + */ +export class Transition { + get checkOnUpdate() { + return this.config.checkOnUpdate + } + + get checkOnSignal() { + return this.config.checkOnSignal + } + + get nextStateName() { + return this.config.nextStateName + } + + get onExecution() { + return this.config.onExecution + } + + constructor(private config: TransitionConfig) {} +} + +/** + * State class for a StateMachine + */ +export default class State { + get name() { + return this.config.name + } + + stateStartTime = 0 + stateElapsedTime = 0 + + private updateTransitions: Transition[] = [] + private signalTransitions: Transition[] = [] + + constructor(private config: StateConfig) { + if (config.transitions !== undefined) { + config.transitions.forEach((transitionConfig) => { + const transition = new Transition(transitionConfig) + + if (transition.checkOnSignal !== undefined) { + this.signalTransitions.push(transition) + } + + if (transition.checkOnUpdate !== undefined) { + this.updateTransitions.push(transition) + } + }) + } + } + + /** + * Check if any of the UpdateTransitions are true. Called once per Update + */ + checkUpdate(): Transition | null { + for (const transition of this.updateTransitions) { + if (transition.checkOnUpdate!(this) === true) { + return transition + } + } + return null + } + + /** + * Check if any of SignalTransitions are true. Called once per Signal + * + * @param signal sent + * @param data optional from signal + */ + checkSignal(signal: string, data: any): Transition | null { + for (const transition of this.signalTransitions) { + if (transition.checkOnSignal!(signal, data) === true) { + return transition + } + } + + return null + } + + /** + * Triggers the onEnter callback + */ + onEnter() { + if (this.config.onEnter !== undefined) { + this.config.onEnter(this) + } + } + + /** + * Triggers the onExit callback + */ + onExit() { + if (this.config.onExit !== undefined) { + this.config.onExit(this) + } + } + + /** + * Triggers the onUpdate callback + */ + onUpdate() { + if (this.config.onUpdate !== undefined) { + this.config.onUpdate(this) + } + } + + /** + * Triggers the onLateUpdate callback + */ + onLateUpdate() { + if (this.config.onLateUpdate !== undefined) { + this.config.onLateUpdate(this) + } + } + + /** + * Triggers the onSignal callback + */ + onSignal() { + if (this.config.onSignal !== undefined) { + this.config.onSignal(this) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts.meta new file mode 100644 index 00000000..f3dd5575 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/State.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! f40f8b8e-c408-4015-834b-564d3ad40273 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! f40f8b8e-c408-4015-834b-564d3ad40273 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 7cab456c-ae7b-4c77-be8e-4381fdcf4ada + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts new file mode 100644 index 00000000..227d9045 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts @@ -0,0 +1,140 @@ +/** + * StateMachine + */ + +import NativeLogger from "./NativeLogger" +import State, {StateConfig, Transition} from "./State" + +import {LensConfig} from "./LensConfig" + +const TAG = "StateMachine" + +export default class StateMachine { + private name: string + private _currentState: State | null = null + private states: any = {} + private stateCount = 0 + private verboseLogs = false + + private log = new NativeLogger(TAG) + + constructor(name: string) { + this.name = name ?? "StateMachine" + + let lensConfig = LensConfig.getInstance() + let updateDispatcher = lensConfig.updateDispatcher + updateDispatcher.createUpdateEvent("StateMachineUpdate").bind(() => { + this.update() + }) + updateDispatcher + .createLateUpdateEvent("StateMachineLateUpdate") + .bind(() => { + this.lateUpdate() + }) + } + + get currentState(): State | null { + return this._currentState + } + + /** + * Add a new state to the state machine. + * @param config StateConfig. State names are Unique + */ + addState(config: StateConfig): State { + let newState = new State(config) + this.states[newState.name] = newState + this.stateCount++ + + return newState + } + + /** + * Change states + * @param stateName to enter + * @param skipOnEnter set to true in order to call enterState without calling that state's onEnter() function + */ + enterState(stateName: string, skipOnEnter = false) { + if (this.states[stateName] === undefined) { + // this.log(`Invalid state ${stateName}`) + return + } + + let oldState = this._currentState + if (oldState !== null) { + this.exitState() + } + + // this.log(`Entering State - ${stateName}`) + let newState = this.states[stateName] as State + this._currentState = newState + this._currentState.stateElapsedTime = 0 + this._currentState.stateStartTime = getTime() + + if (skipOnEnter) { + return + } + this._currentState.onEnter() + } + + /** + * Send a signal to the statemachine to possibly change states + * @param signal name of the signal + * @param data optional data + */ + sendSignal(signal: string, data: any = null) { + if (this._currentState === null) { + return + } + + this._currentState.onSignal() + + let transition = this._currentState.checkSignal(signal, data) + if (transition !== null) { + this.executeTransition(transition) + } + } + + private exitState() { + if (this._currentState !== null) { + // this.log(`Exiting State - ${this._currentState.name}`) + this._currentState.onExit() + } + } + + private executeTransition(transition: Transition) { + // this.log(`Executing Transition to ${transition.nextStateName}`) + if (transition.onExecution !== undefined) { + transition.onExecution() + } + + this.enterState(transition.nextStateName) + } + + private update() { + if (this._currentState === null) { + return + } + + this._currentState.stateElapsedTime = + getTime() - this._currentState.stateStartTime + + let transition = this._currentState.checkUpdate() + if (transition !== null) { + this.executeTransition(transition) + } + + this._currentState.onUpdate() + } + + private lateUpdate() { + if (this._currentState === null) { + return + } + + this._currentState.stateElapsedTime = + getTime() - this._currentState.stateStartTime + + this._currentState.onLateUpdate() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts.meta new file mode 100644 index 00000000..051d7e81 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/StateMachine.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 95fa2c46-bcf5-47d0-9f86-0415d020d4a6 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 95fa2c46-bcf5-47d0-9f86-0415d020d4a6 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 0993170e-589d-40ea-81ee-13f3cbcbd354 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts new file mode 100644 index 00000000..19c80c23 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts @@ -0,0 +1,207 @@ +export interface IUpdateDispatcher { + createUpdateEvent(name: string): DispatchedUpdateEvent + + createLateUpdateEvent(name: string): DispatchedUpdateEvent + + setUpdateEventPriority( + updateEvent: DispatchedUpdateEvent, + priority: number + ): void + + removeUpdateEvent(event: DispatchedUpdateEvent): void + + removeLateUpdateEvent(event: DispatchedUpdateEvent): void + + createDelayedEvent(): DispatchedDelayedEvent + + removeDelayedEvent(event: DispatchedDelayedEvent): void +} + +export class UpdateDispatcher implements IUpdateDispatcher { + protected mainUpdateEvent: SceneEvent + protected mainLateUpdateEvent: SceneEvent + protected updateEvents: DispatchedUpdateEvent[] = [] + protected lateUpdateEvents: DispatchedUpdateEvent[] = [] + protected delayedEvents: DispatchedDelayedEvent[] = [] + + constructor(script: ScriptComponent) { + this.mainUpdateEvent = script.createEvent("UpdateEvent") + this.mainUpdateEvent.bind(() => { + this.onUpdate() + }) + this.mainLateUpdateEvent = script.createEvent("LateUpdateEvent") + this.mainLateUpdateEvent.bind(() => { + this.onLateUpdate() + }) + this.dispatchUpdateEvents = this.dispatchUpdateEventsNoDebug + } + + createUpdateEvent(name: string): DispatchedUpdateEvent { + const event = new DispatchedUpdateEvent(name) + this.updateEvents.push(event) + return event + } + + createLateUpdateEvent(name: string): DispatchedUpdateEvent { + const event = new DispatchedUpdateEvent(name) + this.lateUpdateEvents.push(event) + return event + } + + setUpdateEventPriority(updateEvent: DispatchedUpdateEvent, priority: number) { + for (let i = 0; i < this.updateEvents.length; i++) { + if (this.updateEvents[i].id === updateEvent.id) { + this.updateEvents.splice(i, 1) + i-- + } + } + if (priority >= this.updateEvents.length) { + this.updateEvents.push(updateEvent) + } else { + this.updateEvents.splice(priority, 0, updateEvent) + } + } + + removeUpdateEvent(event: DispatchedUpdateEvent): void { + this.removeEventFromPool(event, this.updateEvents) + } + + removeLateUpdateEvent(event: DispatchedUpdateEvent): void { + this.removeEventFromPool(event, this.lateUpdateEvents) + } + + createDelayedEvent(): DispatchedDelayedEvent { + const event = new DispatchedDelayedEvent() + this.delayedEvents.push(event) + return event + } + + removeDelayedEvent(event: DispatchedDelayedEvent): void { + this.removeEventFromPool(event, this.delayedEvents) + } + + private onUpdate() { + this.dispatchUpdateEvents(this.updateEvents, this.timesUpdate, "Update") + this.dispatchDelayedEvents() + } + + private onLateUpdate() { + this.dispatchUpdateEvents( + this.lateUpdateEvents, + this.timesLateUpdate, + "LateUpdate" + ) + } + + protected timesUpdate: {[name: string]: {updCnt: number; time: number}} = {} + protected timesLateUpdate: {[name: string]: {updCnt: number; time: number}} = + {} + protected dispatchUpdateEvents: ( + pool: DispatchedUpdateEvent[], + times: {[name: string]: {updCnt: number; time: number}}, + eventName: string + ) => void + protected dispatchedEvents = 0 + + protected dispatchUpdateEventsNoDebug = (pool: DispatchedUpdateEvent[]) => { + for (let i = 0; i < pool.length; i++) { + if (pool[i].enabled) { + pool[i].eventHappened() + } + } + } + + private removeEventFromPool( + event: BaseDispatchedEvent, + pool: BaseDispatchedEvent[] + ) { + let n = pool.length + for (let i = 0; i < n; i++) { + if (event.id === pool[i].id) { + pool.splice(i, 1) + i-- + n-- + } + } + } + + private dispatchDelayedEvents() { + const curTime = getTime() + for (let i = 0; i < this.delayedEvents.length; i++) { + if ( + this.delayedEvents[i].enabled && + !this.delayedEvents[i].getWasCalled() + ) { + if (this.delayedEvents[i].callAfter < curTime) { + this.delayedEvents[i].eventHappened() + } + } + } + } +} + +export class BaseDispatchedEvent { + enabled: boolean + id: number + static TIMES_CREATED = 0 + constructor() { + this.enabled = true + this.id = BaseDispatchedEvent.TIMES_CREATED++ + } +} + +export class DispatchedUpdateEvent extends BaseDispatchedEvent { + override enabled: boolean = true + + constructor(public readonly name: string) { + super() + this.enabled = true + } + // eslint-disable-next-line + bind(callback: Function) { + this.callback = callback + } + + eventHappened() { + if (this.callback) { + this.callback() + } + } + + // eslint-disable-next-line + private callback: Function | undefined +} + +export class DispatchedDelayedEvent extends BaseDispatchedEvent { + override enabled: boolean = true + constructor() { + super() + this.wasCalled = false + } + reset(time: number): void { + this.wasCalled = false + this.callAfter = getTime() + time + } + + // eslint-disable-next-line + bind(callback: Function) { + this.callback = callback + } + + eventHappened(): void { + this.wasCalled = true + if (this.callback) { + this.callback() + } + } + + getWasCalled(): boolean { + return this.wasCalled + } + + callAfter: number = 0 + + // eslint-disable-next-line + private callback: Function | undefined + private wasCalled: boolean +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts.meta new file mode 100644 index 00000000..cfa9bc23 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/UpdateDispatcher.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! b87ff085-2b9f-49ae-91b2-6187e12e267c + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! b87ff085-2b9f-49ae-91b2-6187e12e267c + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 150953de-e6b1-44b5-927c-d5c117f8c8dd + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts new file mode 100644 index 00000000..76304454 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts @@ -0,0 +1,7 @@ +/** + * Axis-Aligned Bounding-Box representation + */ +export type aabb = { + min: vec3 + max: vec3 +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts.meta new file mode 100644 index 00000000..972d7b44 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/aabb.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! c059923a-fd45-4971-bbcc-782841bd55f4 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! c059923a-fd45-4971-bbcc-782841bd55f4 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! eff603f3-e003-4879-ac81-c9575a0887c2 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts new file mode 100644 index 00000000..3ab82169 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts @@ -0,0 +1,88 @@ +/** + * Performs a BFS on a collection of root objects and their descendants. + * It uses a predicate function to determine if an object in the scene graph meets certain conditions. + * + * @param rootObjects - The root objects to start the BFS from. + * @param predicate - The predicate function to call on each object. + * This function should take a SceneObject as an argument and return a boolean. + * If the function returns true for an object, that object is immediately returned by the BFS function. + * If it returns false, the search continues to the next object. + * @returns the object returned by the predicate function, otherwise null. + */ +export function bfs( + rootObjects: SceneObject[], + predicate: (sceneObject: SceneObject) => T +): T | null { + for (const rootObject of rootObjects) { + const queue = [rootObject] + while (queue.length > 0) { + const currentObject = queue.shift() + if (currentObject !== undefined) { + const result = predicate(currentObject) + if (result !== null) { + return result + } + + const childrenCount = currentObject.getChildrenCount() + for (let i = 0; i < childrenCount; i++) { + queue.push(currentObject.getChild(i)) + } + } + } + } + + return null +} + +/** + * Returns a filtered list of objects based on a collection of root objects and their descendants. + * It uses a predicate function to determine if an object in the scene graph meets certain conditions. + * + * @param rootObjects - The root objects of each tree. + * @param predicate - The predicate function to call on each object. + * This function should take a SceneObject as an argument and return a boolean. + * If the function returns true for an object, that object will be part of the final list. + * If it returns false, the search continues to the next object. + * @returns the collection of objects that match the the predicate function, otherwise an empty list. + */ +export function filterTrees( + rootObjects: SceneObject[], + predicate: (sceneObject: SceneObject) => T +): T[] { + const results: T[] = [] + for (const rootObject of rootObjects) { + const queue = [rootObject] + while (queue.length > 0) { + const currentObject = queue.shift() + if (currentObject !== undefined) { + const result = predicate(currentObject) + if (result !== null) { + results.push(result) + } + + const childrenCount = currentObject.getChildrenCount() + for (let i = 0; i < childrenCount; i++) { + queue.push(currentObject.getChild(i)) + } + } + } + } + + return results +} + +/** + * Applies a function to all descendants of the root object. + * + * @param rootObject The root of the tree to apply the function to. + * @param toApply This function is called with every scene object descended from rootObject as an argument. + */ +export function applyToDescendants( + rootObject: SceneObject, + toApply: (sceneObject: SceneObject) => void +): void { + for (const childObject of rootObject.children) { + applyToDescendants(childObject, toApply) + } + toApply(rootObject) +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts.meta new file mode 100644 index 00000000..6db8e51f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/algorithms.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 45c8fbda-ee1b-4d9a-bfe7-e742045e6956 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 45c8fbda-ee1b-4d9a-bfe7-e742045e6956 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 9ce155b3-292d-42e2-b1ff-738ac142093d + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts new file mode 100644 index 00000000..5a18f174 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts @@ -0,0 +1,427 @@ +import {Singleton} from "../Decorators/Singleton" +import Event from "./Event" + +export type AnimateConfig = { + update: (t: number) => void + cancelSet?: CancelSet + delayFrames?: number +} & ( + | { + duration: number + start?: number + end?: number + easing?: keyof typeof easingFunctions + ended?: () => void + cancelled?: () => void + } + | { + duration: "continuous" + // continuous animations have no start or end and must be linear + easing?: "linear" + start?: undefined + end?: undefined + ended?: undefined + cancelled?: undefined + } +) + +const onAnimationStartEvent = new Event>() +export const onAnimationStart = onAnimationStartEvent.publicApi() + +const onAnimationStopEvent = new Event>() +export const onAnimationStop = onAnimationStopEvent.publicApi() + +export type CancelFunction = () => void +type EasingFunction = (t: number) => number + +export const easingFunctions = { + linear: (t: number) => t, + "ease-in-sine": (t: number) => { + return -Math.cos(t * (Math.PI / 2)) + 1 + }, + "ease-out-sine": (t: number) => { + return Math.sin(t * (Math.PI / 2)) + }, + "ease-in-out-sine": (t: number) => { + return -(Math.cos(Math.PI * t) - 1) / 2 + }, + "ease-in-quad": (t: number) => { + return t * t + }, + "ease-out-quad": (t: number) => { + return t * (2 - t) + }, + "ease-in-out-quad": (t: number) => { + if ((t *= 2) < 1) { + return 0.5 * t * t + } + return -0.5 * (--t * (t - 2) - 1) + }, + "ease-in-cubic": (t: number) => { + return t * t * t + }, + "ease-out-cubic": (t: number) => { + return --t * t * t + 1 + }, + "ease-in-out-cubic": (t: number) => { + if ((t *= 2) < 1) { + return 0.5 * t * t * t + } + return 0.5 * ((t -= 2) * t * t + 2) + }, + "ease-in-quart": (t: number) => { + return t * t * t * t + }, + "ease-out-quart": (t: number) => { + return 1 - --t * t * t * t + }, + "ease-in-out-quart": (t: number) => { + if ((t *= 2) < 1) { + return 0.5 * t * t * t * t + } + return -0.5 * ((t -= 2) * t * t * t - 2) + }, + "ease-in-quint": (t: number) => { + return t * t * t * t * t + }, + "ease-out-quint": (t: number) => { + return --t * t * t * t * t + 1 + }, + "ease-in-out-quint": (t: number) => { + if ((t *= 2) < 1) { + return 0.5 * t * t * t * t * t + } + return 0.5 * ((t -= 2) * t * t * t * t + 2) + }, + "ease-in-expo": (t: number) => { + return t === 0 ? 0 : Math.pow(1024, t - 1) + }, + "ease-out-expo": (t: number) => { + return t === 1 ? 1 : 1 - Math.pow(2, -10 * t) + }, + "ease-in-out-expo": (t: number) => { + if (t === 0 || t === 1) { + return t + } + if ((t *= 2) < 1) { + return 0.5 * Math.pow(1024, t - 1) + } + return 0.5 * (-Math.pow(2, -10 * (t - 1)) + 2) + }, + "ease-in-circ": (t: number) => { + return 1 - Math.sqrt(1 - t * t) + }, + "ease-out-circ": (t: number) => { + return Math.sqrt(1 - --t * t) + }, + "ease-in-out-circ": (t: number) => { + if ((t *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - t * t) - 1) + } + return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1) + }, + "ease-in-back": (t: number) => { + const s = 1.70158 + return t === 1 ? 1 : t * t * ((s + 1) * t - s) + }, + "ease-out-back": (t: number) => { + const s = 1.70158 + return t === 0 ? 0 : --t * t * ((s + 1) * t + s) + 1 + }, + "ease-in-out-back": (t: number) => { + const c1 = 1.70158 + const c2 = c1 * 1.525 + + return t < 0.5 + ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2 + : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2 + }, + "ease-in-elastic": (t: number) => { + if (t === 0 || t === 1) { + return t + } + return -Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI) + }, + "ease-out-elastic": (t: number) => { + if (t === 0 || t === 1) { + return t + } + return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1 + }, + "ease-in-out-elastic": (t: number) => { + if (t === 0 || t === 1) { + return t + } + t *= 2 + if (t < 1) { + return ( + -0.5 * Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI) + ) + } + return ( + 0.5 * Math.pow(2, -10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI) + 1 + ) + }, + "ease-in-bounce": (t: number) => { + return 1 - easingFunctions["ease-out-bounce"](1 - t) + }, + "ease-out-bounce": (t: number) => { + if (t < 1 / 2.75) { + return 7.5625 * t * t + } else if (t < 2 / 2.75) { + return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75 + } else if (t < 2.5 / 2.75) { + return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375 + } else { + return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375 + } + }, + "ease-in-out-bounce": (t: number) => { + return t < 0.5 + ? easingFunctions["ease-in-bounce"](t * 2) * 0.5 + : easingFunctions["ease-out-bounce"](t * 2 - 1) * 0.5 + 0.5 + }, + "ease-out-back-cubic": createCubicBezierEasingFunction(0.34, 1.25, 0.64, 1), + "ease-in-back-cubic": createCubicBezierEasingFunction(0.36, 0, 0.64, -0.25), + "ease-in-out-back-cubic": createCubicBezierEasingFunction( + 0.3, + -0.25, + 0.6, + 1.42 + ), +} as const + +// A simple animation function. It's probably better to use the other animation +// utilities, but I need a quick way to animate that wasn't tied to Scene objects +export default function animate(config: AnimateConfig): CancelFunction { + let running = true + let elapsedTime = 0 + let easingFunction = easingFunctions[config.easing ?? "linear"] + + let start = config.start ?? 0 + let end = config.end ?? 1 + let range = end - start + + onAnimationStartEvent.invoke(config) + + // Create a function to be called for each frame + function frame(delayFrames = 0) { + // Bail out if this animation has been canceled + if (!running) { + onAnimationStopEvent.invoke(config) + return + } + + const deltaTime = getDeltaTime() + + if (deltaTime === 0) { + /** + * Workaround for the fact that current capture implementation uses a double update, + * which means that when in capture mode global update happens once, passing in + * deltaTime of 0 on the second update. + * + * For reference see: https://docs.google.com/document/d/1NT_yadoaSFqWvVkeMCb2qs3Um4pTLfbnW9_ySubsBbw/edit + * + * This code simply skips all updates in the animate function when deltaTime is 0, ensuring + * that the animation does not progress incorrectly when in capture mode. + */ + AnimationManager.getInstance().requestAnimationFrame(() => + frame(delayFrames) + ) + + return + } + + // Time only passes after the delay frames + if (delayFrames === 0) { + elapsedTime += deltaTime + } + + // Calculate the raw and "eased" t + let t: number + let ended = false + if (config.duration === "continuous") { + // continuous animations run until canceled + t = elapsedTime + } else { + let rawT = Math.min(1.0, elapsedTime / config.duration) + let easedT = easingFunction(rawT) + t = start + easedT * range + ended = elapsedTime >= config.duration + } + + // perform the update + config.update(t) + + if (ended === true) { + running = false + config.ended?.() + } + + // continue the animation + AnimationManager.getInstance().requestAnimationFrame(() => + frame(delayFrames === 0 ? 0 : delayFrames - 1) + ) + } + + // Create a Cancelation function to stop this animation at any time + function cancel() { + running = false + config.cancelled?.() + } + + config.cancelSet?.add(cancel) + + frame(config.delayFrames ?? 0) + + return cancel +} + +export type CancelSet = { + add(fn: () => void): void + cancel(): void + (): void +} + +export type CancelSetConfig = { + onCancel?: () => void +} + +export type CancelSetClass = { + new (config?: CancelSetConfig): CancelSet +} + +export const CancelSet: CancelSetClass = class { + constructor(config?: CancelSetConfig) { + let calls: (() => void)[] = [] + function cancelSet() { + for (let call of calls) { + call() + } + calls = [] + config?.onCancel?.() + } + + cancelSet.cancel = cancelSet + + cancelSet.add = (fn: () => void) => { + calls.push(fn) + } + + return cancelSet + } +} as unknown as CancelSetClass + +// mix matches theGLSL mix function , it is overloaded +// for numbers and vec{2,3,4} +// it provides linear interpolation between a and b by the inerpolator t +// this isvery useful in animations +export function mix(a: quat, b: quat, t: number): quat +export function mix(a: vec4, b: vec4, t: number): vec4 +export function mix(a: vec3, b: vec3, t: number): vec3 +export function mix(a: vec2, b: vec2, t: number): vec2 +export function mix(a: number, b: number, t: number): number +export function mix(a: any, b: any, t: number) { + if (typeof a === "number") { + return mixNumbers(a, b, t) + } else if (a instanceof vec2) { + return new vec2(mixNumbers(a.x, b.x, t), mixNumbers(a.y, b.y, t)) + } else if (a instanceof vec3) { + return new vec3( + mixNumbers(a.x, b.x, t), + mixNumbers(a.y, b.y, t), + mixNumbers(a.z, b.z, t) + ) + } else if (b instanceof vec4) { + return new vec4( + mixNumbers(a.x, b.x, t), + mixNumbers(a.y, b.y, t), + mixNumbers(a.z, b.z, t), + mixNumbers(a.w, b.w, t) + ) + } else if (b instanceof quat) { + return quat.slerp(a, b, t) + } + throw new Error(`Illegal arguments`) +} + +function mixNumbers(a: number, b: number, t: number): number { + let range = b - a + return a + range * t +} + +/** + * Copy of the TweenManager bezier implementation: https://docs.snap.com/lens-studio/references/guides/lens-features/adding-interactivity/helper-scripts/tween-manager + * @param x1 the x coordinate of the first point in the bezier curve + * @param y1 the y coordinate of the first point in the bezier curve + * @param x2 the x coordinate of the second point in the bezier curve + * @param y2 the y coordinate of the second point in the bezier curve + * @returns interpolated number + */ +function createCubicBezierEasingFunction( + x1: number, + y1: number, + x2: number, + y2: number +): (t: number) => number { + const p0 = new vec2(0, 0) + const p1 = new vec2(x1, y1) + const p2 = new vec2(x2, y2) + const p3 = new vec2(1, 1) + return (t: number): number => { + const oneMinusT = 1 - t + + return p0 + .uniformScale(oneMinusT * oneMinusT * oneMinusT) + .add(p1.uniformScale(3.0 * oneMinusT * oneMinusT * t)) + .add(p2.uniformScale(3.0 * oneMinusT * t * t)) + .add(p3.uniformScale(t * t * t)).y + } +} + +@Singleton +export class AnimationManager { + public static getInstance: () => AnimationManager + + private sceneObject: SceneObject + private script: ScriptComponent + private animationCallbacks: any[] = [] + private countCallbacks: any[] = [] + + public constructor() { + this.sceneObject = global.scene.createSceneObject("animate-EventDispatcher") + this.script = this.sceneObject.createComponent("ScriptComponent") + + this.requestAnimationFrame = (callback) => { + this.animationCallbacks.push(callback) + } + this.requestAnimationFrame.trackCounts = (callback) => { + this.countCallbacks.push(callback) + } + + this.script.createEvent("UpdateEvent").bind(() => { + let callbacks = this.animationCallbacks + + // report the number of callbacks to the countCallbacks + if (callbacks.length) { + for (let callback of this.countCallbacks) { + callback(callbacks.length) + } + } + + // Animation Frames often reques the next frame + this.animationCallbacks = [] + for (let callback of callbacks) { + callback() + } + }) + } + + requestAnimationFrame: AnimationManager.RequestAnimationFrameType +} +export namespace AnimationManager { + export interface RequestAnimationFrameType { + (callback: () => void): void + trackCounts?: (callback: (count: number) => void) => void + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts.meta new file mode 100644 index 00000000..5e296bf3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/animate.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! bbdf7d87-d773-4fb7-9983-3998dae60ef2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! bbdf7d87-d773-4fb7-9983-3998dae60ef2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! cc3b308f-1c7e-4609-b18d-7c728d36bb60 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts new file mode 100644 index 00000000..c5b69a55 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts @@ -0,0 +1,278 @@ +import {SeededRandomNumberGenerator} from "./SeededRandomNumberGenerator" + +const TAG = "color utils" + +/* + * this file contains some color utilities that make working with lens studio's vec3/vec4 a bit nicer + */ + +/** + * Helper class to define a gradient in [LinearGradientBackground] + */ +export type ColorStop = { + percent?: number + color: vec4 +} + +// Parse the std color format "#RRGGBB" into a lensCore vec3 +export function parseColor(str: string, alpha: number = 1.0): vec4 { + if (str[0] === "#") { + str = str.substr(1) + } + + if (str.length !== 6) { + throw new Error( + `parseColor: can't parse string of length ${str.length} "${str}"` + ) + } + + return new vec4( + parseInt(str.substr(0, 2), 16) / 255, + parseInt(str.substr(2, 2), 16) / 255, + parseInt(str.substr(4, 2), 16) / 255, + alpha + ) +} + +// withAlpha is a simple utility for constructing a color value +// that is the same as the given color value, but with a new +// alpha value. +export function withAlpha(color: vec4 | vec3, alpha: number): vec4 { + return new vec4(color.r, color.g, color.b, alpha) +} + +// withAlpha is a simple utility for constructing a color value +// that is the same as the given color value, but without any +// alpha value. +export function withoutAlpha(color: vec4): vec3 { + return new vec3(color.r, color.g, color.b) +} + +// Known Colors +export const YELLOW = (alpha = 1) => parseColor("#FFFC00", alpha) +export const WHITE = (alpha = 1) => parseColor("#FFFFFF", alpha) +export const RED = (alpha = 1) => parseColor("#FF0000", alpha) +export const BLACK = (alpha = 1) => parseColor("#000000", alpha) +export const GRAY = (alpha = 1) => parseColor("#3A383A", alpha) +export const DARKGRAY = (alpha = 1) => parseColor("#202020", alpha) + +/** + * Defines all [ColorStop] for the default color theme in [LinearGradientBackground] + */ +export const DEFAULT_COLOR_STOPS: [ColorStop, ColorStop, ColorStop] = [ + { + color: parseColor("#E92754"), + percent: 4.42, + }, + { + color: parseColor("#2B7391"), + percent: 52.2, + }, + { + color: parseColor("#FFFC00"), + percent: 98.98, + }, +] + +/** + * Defines all [ColorStop] for the critical color theme in [LinearGradientBackground] + */ +export const CRITICAL_COLOR_STOPS: [ColorStop, ColorStop, ColorStop] = [ + { + color: parseColor("#541858"), + percent: 25.98, + }, + { + color: parseColor("#921633"), + percent: 47.28, + }, + { + color: parseColor("#FFFC0C"), + percent: 106.17, + }, +] + +/** + * This function converts a color from HSL to RGB. Reference: https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB + * @param HSL {vec3} A color expressed as Hue (x [0, 360]), Saturation (y [0, 1]), and Lightness (z [0,1]) + * @returns {vec3} The same color expressed as Red (x [0, 1]), Green (y [0, 1]), and Blue (z [0, 1]) + */ +export function HSLToRGB(HSL: vec3): vec3 { + const vector = new vec3(HSL.x, HSL.y, HSL.z) + HSLToRGBInPlace(vector) + return vector +} + +const ONE_OVER_60 = 0.01666666666 +/** + * This function converts a color from HSL to RGB. Reference: https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB + * @param vector {vec3} A color expressed as Hue (x [0, 360]), Saturation (y [0, 1]), and Lightness (z [0,1]) + * This vector will be modified to express the same color as Red (x [0, 1]), Green (y [0, 1]), and Blue (z [0, 1]) + */ +export function HSLToRGBInPlace(vector: vec3): void { + const h = vector.x + const s = vector.y + const l = vector.z + + const c = (1 - Math.abs(2 * l - 1)) * s + const ho = h * ONE_OVER_60 + const x = c * (1 - Math.abs((ho % 2) - 1)) + + const matchLightness = l - c * 0.5 + + if (ho < 1) { + vector.x = c + matchLightness + vector.y = x + matchLightness + vector.z = matchLightness + } else if (ho < 2) { + vector.x = x + matchLightness + vector.y = c + matchLightness + vector.z = matchLightness + } else if (ho < 3) { + vector.x = matchLightness + vector.y = c + matchLightness + vector.z = x + matchLightness + } else if (ho < 4) { + vector.x = matchLightness + vector.y = x + matchLightness + vector.z = c + matchLightness + } else if (ho < 5) { + vector.x = x + matchLightness + vector.y = matchLightness + vector.z = c + matchLightness + } else if (ho <= 6) { + vector.x = c + matchLightness + vector.y = matchLightness + vector.z = x + matchLightness + } else { + throw "Could not determine HSL conversion" + } +} + +/** + * This function converts a color from RGB to HSL. Reference: https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB + * @param RGB {vec3} A color expressed as Red (x [0, 1]), Green (y [0, 1]), and Blue (z [0, 1]) + * @returns {vec3} The same color expressed as Hue (x [0, 360]), Saturation (y [0, 1]), and Lightness (z [0,1]) + */ +export function RGBToHSL(RGB: vec3): vec3 { + const vector = new vec3(RGB.x, RGB.y, RGB.z) + RGBToHSLInPlace(vector) + return vector +} + +/** + * This function converts a color from RGB to HSL. Reference: https://en.wikipedia.org/wiki/HSL_and_HSV#From_RGB + * @param vector {vec3} A color expressed as Red (x [0, 1]), Green (y [0, 1]), and Blue (z [0, 1]). + * This vector will be modified to express the same color as Hue (x [0, 360]), Saturation (y [0, 1]), and Lightness (z [0,1]) + */ +export function RGBToHSLInPlace(vector: vec3): void { + const rScaled = vector.x + const gScaled = vector.y + const bScaled = vector.z + + const xMax = Math.max(rScaled, gScaled, bScaled) + const xMin = Math.min(rScaled, gScaled, bScaled) + + const c = xMax - xMin + + const l = (xMax + xMin) / 2 + + let h = 0 + if (xMax === rScaled) { + h = 60 * (((gScaled - bScaled) / c) % 6) + } else if (xMax === gScaled) { + h = 60 * ((bScaled - rScaled) / c + 2) + } else if (xMax === bScaled) { + h = 60 * ((rScaled - gScaled) / c + 4) + } + + let s = 0 + if (l > 0 && l < 1) { + s = (2 * (xMax - l)) / (1 - Math.abs(2 * l - 1)) + } + + vector.x = h + vector.y = s + vector.z = l +} + +// How many color buckets to use when calculating the most common hue +const BUCKET_COUNT = 16 + +// How many samples of the image to take when calculating the most common hue +const MOST_COMMON_HUE_SAMPLES = 100 + +// Multiplication is typically much faster than division +const ONE_OVER_255 = 0.00392156862 +const ONE_OVER_360 = 0.00277777777 + +/** + * Returns the most common hue in the texture, using subjective criteria. The algorithm + * used is an artistic decision, and subject to change at any time. + * @param texture The texture to measure + * @returns The most common hue in the texture [0,360] + */ +export function getMostCommonHue(texture: Texture): number { + // Divide the possible colors up into buckets, to limit the number of options + const bucketCount = BUCKET_COUNT + let colors = new Array(bucketCount) + for (let i = 0; i < bucketCount; i++) { + colors[i] = 0 + } + + // Allocate a buffer big enough to store the data from the texture + const width = texture.getWidth() + const height = texture.getHeight() + const pixelBuffer = new Uint8Array(width * height * 4) + + // Extract the data from the texture into the pixel buffer + const proceduralTexture = ProceduralTextureProvider.createFromTexture(texture) + const proceduralTextureControl = + proceduralTexture.control as ProceduralTextureProvider + proceduralTextureControl.getPixels(0, 0, width, height, pixelBuffer) + + const sampleCount = MOST_COMMON_HUE_SAMPLES + const pixels = width * height + const samples = new SeededRandomNumberGenerator( + pixels + ).getRandomNumberArrayInRangeNoDuplicates(0, pixels - 1, sampleCount) + + // Reuse the vector for each loop to reduce allocations + var pixelColor = vec3.zero() + // This loop runs many times, so needs to be efficient + samples.forEach((pixelIndex) => { + const i = pixelIndex * 4 + + // Divide by 255 to convert it to the [0,1] range + pixelColor.x = pixelBuffer[i] * ONE_OVER_255 + pixelColor.y = pixelBuffer[i + 1] * ONE_OVER_255 + pixelColor.z = pixelBuffer[i + 2] * ONE_OVER_255 + + // Convert the color in place to reduce allocations + // Before this function, pixelColor is in RGB. After, it is in HSL + RGBToHSLInPlace(pixelColor) + + // Only count the pixel if it has some saturation (otherwise it will look gray) + // and a middling lightness (otherwise it will look black / white). + if (pixelColor.y > 0.2 && pixelColor.z > 0.2 && pixelColor.z < 0.8) { + // Divide the bucketCount by 360 to get the size of each bucket, then find the one it falls into + const bucket = Math.round(pixelColor.x * bucketCount * ONE_OVER_360) + + // Weight the effect of the pixel by its alpha transparency since + // transparent pixels won't make the texture look more that color + const a = pixelBuffer[i + 3] + + colors[bucket] += a + } + }) + + // Find the bucket with the most pixels in it + const maxBucket = Math.max(...colors) + const maxBucketIndex = colors.findIndex((value: number) => { + return value === maxBucket + }) + + // Return the hue of the biggest bucket + const mostCommonHue = (maxBucketIndex / bucketCount) * 360 + return mostCommonHue +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts.meta new file mode 100644 index 00000000..8c1cfa23 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/color.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 31c8fac9-cc4b-4ba6-a7b3-8bace29079b2 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 31c8fac9-cc4b-4ba6-a7b3-8bace29079b2 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! fefee352-e09f-4254-9bb7-70d4514b8bc0 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts new file mode 100644 index 00000000..e0bb4315 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts @@ -0,0 +1,74 @@ +import {LensConfig} from "./LensConfig" + +export type AnyArg = any[] + +/** + * Debounces a function + * @param debouncedFunction the function that needs debouncing + * @param timeoutInMsecs the timeout for the debounce in milliseconds + * @returns the debounced function + */ +export const debounce = ( + debouncedFunction: (...args: AnyArg) => void, + timeoutInMsecs: number +) => { + let timeoutId: ReturnType + return (...args: AnyArg): void => { + clearTimeout(timeoutId) + timeoutId = setTimeout( + () => debouncedFunction.apply(this, args), + timeoutInMsecs + ) + } +} + +/** + * Throttles a function + * @param throttledFunction the function that needs throttling + * @param delayMsecs the delay for the throttle in milliseconds + * @returns the throttled function + */ +export const throttle = ( + throttledFunction: (...args: AnyArg) => void, + delayMsecs: number +) => { + let timeoutId: ReturnType + let previousTime = 0 + + return (...args: AnyArg): void => { + const currentTime = Date.now() + if (currentTime - previousTime < delayMsecs) { + clearTimeout(timeoutId) + timeoutId = setTimeout( + () => throttledFunction.apply(this, args), + delayMsecs + ) + } else { + previousTime = currentTime + throttledFunction.apply(this, args) + } + } +} +export type CancelToken = { + cancelled: boolean +} +export function setTimeout(callback: () => void, time: number): CancelToken { + let cancelToken: CancelToken = {cancelled: false} + + let updateDispatcher = LensConfig.getInstance().updateDispatcher + + let delayedEvent = updateDispatcher.createDelayedEvent() + delayedEvent.reset(time / 1000) + delayedEvent.bind((eventData: any) => { + if (!cancelToken.cancelled) { + callback() + } + updateDispatcher.removeDelayedEvent(delayedEvent) + }) + return cancelToken +} +export function clearTimeout(timeoutId: CancelToken): void { + if (timeoutId !== undefined && timeoutId.cancelled !== undefined) { + timeoutId.cancelled = true + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts.meta new file mode 100644 index 00000000..219ffb98 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/debounce.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 07ae497f-1205-4368-b5a3-19aed0b1b5e7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 07ae497f-1205-4368-b5a3-19aed0b1b5e7 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! b05dcf8f-1982-4505-bc84-531c0044c4f0 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts new file mode 100644 index 00000000..67beace6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts @@ -0,0 +1,20 @@ +/** + * This can be used to delay the fetching of a property until needed + * + * @param getPropertyFunction The function to get the value of the property, when needed. + * @returns a function that will return the value of getPropertyFunction, which will only be called once + */ + +/** + * @param getPropertyFunction + */ +export function lazyProperty(getPropertyFunction: () => T): () => T { + let lazyProperty: T | undefined + + return () => { + if (lazyProperty === undefined) { + lazyProperty = getPropertyFunction() + } + return lazyProperty + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts.meta new file mode 100644 index 00000000..06aad89a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/lazyProperty.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 818192d6-c2ba-42d4-933b-d507bc137a14 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 818192d6-c2ba-42d4-933b-d507bc137a14 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 02056835-c2a6-4020-81d6-8806c375488f + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts new file mode 100644 index 00000000..25a6679c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts @@ -0,0 +1,11 @@ +const printFn = print + +export const logWithTag = + (tag: string) => + (...args: any[]) => { + let result = `${tag}:` + for (const arg of args) { + result += " " + arg + } + printFn(result) + } diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts.meta new file mode 100644 index 00000000..b6ae1c05 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/logger.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 198fc1b2-1ceb-4bdf-9c2e-489d239efc42 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 198fc1b2-1ceb-4bdf-9c2e-489d239efc42 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! d43e234c-882b-4511-804f-8b028114336e + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts new file mode 100644 index 00000000..b15f7cef --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts @@ -0,0 +1,195 @@ +/** + * Compute the average vector of a list of values + * @param values list of vectors to compute the average from + * @returns the average vectors + */ +export function averageVec3(values: vec3[]): vec3 { + let average = vec3.zero() + if (values.length === 0) { + return average + } + + for (let i = 0; i < values.length; ++i) { + average = average.add(values[i]) + } + return average.uniformScale(1 / values.length) +} + +export const DegToRad = Math.PI / 180 +export const RadToDeg = 180 / Math.PI + +/** + * Compute the average vector of a list of values + * @param values list of vectors to compute the average from + * @returns the average vectors + */ +export function averageVec2(values: vec2[]): vec2 { + let average = vec2.zero() + if (values.length === 0) { + return average + } + + for (let i = 0; i < values.length; ++i) { + average = average.add(values[i]) + } + return average.uniformScale(1 / values.length) +} + +export function inverseLerp(start: number, end: number, value: number) { + if (start === end) { + return 0 + } else { + return (value - start) / (end - start) + } +} +/** + * Interpolate between two vectors using a ratio. + * @param vectorA First vector. + * @param vectorB Second vector. + * @param ratio Proportion of vectorB in the resulting linear combination. + * @returns Interpolated vector between vectorA and vectorB. + */ +export function interpolateVec3( + vectorA: vec3, + vectorB: vec3, + ratio: number +): vec3 { + return vectorA.uniformScale(1 - ratio).add(vectorB.uniformScale(ratio)) +} + +// Transforms `localPoint` from `transform` local space to world space. +export function transformPoint(transform: Transform, localPoint: vec3): vec3 { + let t = mat4.fromTranslation(transform.getWorldPosition()) + let r = mat4.fromRotation(transform.getWorldRotation()) + let s = mat4.fromScale(transform.getWorldScale()) + let m = t.mult(r).mult(s) + return m.multiplyPoint(localPoint) +} + +export function clamp(value: number, min: number, max: number) { + return Math.min(Math.max(value, min), max) +} + +/** + * + * @param val the value that should be mapped + * @param inMax the maximum of the incoming range + * @param inMin the minimum of the outcoming range + * @param outMax the maximum of the outcoming range + * @param outMin the minimum of the incoming range + * @returns the mapped value + */ +export function mapValue( + val: number, + inMax: number, + inMin: number, + outMax: number, + outMin: number +): number { + return ((val - inMax) / (inMin - inMax)) * (outMin - outMax) + outMax +} + +export function lerp(value1: number, value2: number, amount: number) { + amount = amount < 0 ? 0 : amount + amount = amount > 1 ? 1 : amount + return value1 + (value2 - value1) * amount +} + +/** + * Dampens a current value back to a target value with spring-damper behavior. + * @param current - the current value (usually position along an axis) + * @param target - the target value to dampen to + * @param velocity - the current velocity (usually speed along an axis) + * @param smoothTime - the time it should take to smoothen to the desired target + * @param deltaTime - the amount of time passed since last frame + * @returns the smoothened value and new velocity: [position, velocity] + */ +export function smoothDamp( + current: number, + target: number, + velocity: number, + smoothTime: number, + deltaTime: number +): [number, number] { + // https://en.wikipedia.org/wiki/Mass-spring-damper_model + // m * x''(t) + c * x'(t) + k * x(t) = 0 + + // undamped natural frequency + // ωₙ = √(k / m) + + // damping ratio + // ζ = c / (2 * m * ωₙ) + + // critical damping (ζ = 1) + // c = 2 * m * ωₙ + + // smooth damp equation + // k * x(t) + 2 * √(k) * x'(t) + x''(t) = 0 + + // analytical solutions + // x(t) = e^(-√(k) * t) * (t * x'(0) + x(0) + √(k) * t * x(0)) + // x'(t) = e^(-√(k) * t) * (x'(0) + √(k) * x(0)) - + // e^(-√(k) * t) * √(k) * (t * x'(0) + x(0) + √(k) * t * x(0)) + + // value of k to settle in t seconds + // x(t) = 0.01 * x(0), x'(0) = 0 + // k = 44.0677 / t^2 + + const x0 = current - target + const sqrtk = 6.63835 / smoothTime + const ensqrtkt = Math.exp(-sqrtk * deltaTime) + const sqrtktx0 = sqrtk * deltaTime * x0 + const pos = ensqrtkt * (deltaTime * velocity + x0 + sqrtktx0) + const vel = ensqrtkt * (velocity + sqrtk * x0) - sqrtk * pos + + return [target + pos, vel] +} + +export function smoothDampAngle( + current: number, + target: number, + velocity: number, + smoothTime: number, + deltaTime: number +): [number, number] { + if (target - current > Math.PI) current += 2 * Math.PI + if (target - current < -Math.PI) current -= 2 * Math.PI + return smoothDamp(current, target, velocity, smoothTime, deltaTime) +} + +/** + * Smoothens a current value based on velocity while reducing the velocity. + * @param current - the current value + * @param velocity - the current velocity of the value + * @param smoothTime - the time it should take to smoothen the velocity to 0 + * @param deltaTime - the amount of time passed since last frame + * @returns the smoothened value and new velocity: [position, velocity] + */ +export function smoothSlide( + current: number, + velocity: number, + smoothTime: number, + deltaTime: number +): [number, number] { + // smooth slide equation (k = 0) + // c * x'(t) + x''(t) = 0 + + // analytical solutions + // x(t) = (e^(-c * t) * (-x'(0) + e^(c * t) * x'(0) + c * e^(c * t) * x(0))) / c + // x'(t) = -e^(-c * t) * (-x'(0) + e^(c * t) * x'(0) + c * e^(c * t) * x(0)) + + // (e^(-c * t) * (c * e^(c * t) * x'(0) + (c^2 * e^(c * t) * x(0)))) / c + + // value of c to settle in t seconds + // x(t) = 0.01 * x(0), x'(0) = 0 + // c = 4.60517 / t + + const c = 4.60517 / smoothTime + const enct = Math.exp(-c * deltaTime) + const ect = Math.exp(c * deltaTime) + const cectx0 = c * ect * current + const env0ev0c = enct * (-velocity + ect * velocity + cectx0) + const pos = env0ev0c / c + const vel = -env0ev0c + (enct * (c * ect * velocity + c * cectx0)) / c + + return [pos, vel] +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts.meta new file mode 100644 index 00000000..1ff29b65 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/mathUtils.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 15f12cd1-c4ad-4330-801d-7c42b77d7385 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 15f12cd1-c4ad-4330-801d-7c42b77d7385 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 66fd5c8a-a412-4bdb-9f02-09d7c0af9b79 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts new file mode 100644 index 00000000..8760b6de --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts @@ -0,0 +1,12 @@ +/** + * Checks for null or undefined and asserts that the value is neither. + * Designed to be used as part of a {@link Array.Filter} call. + * + * @param value - Value to be tested. + * @returns - True if it is neither null not undefined. + */ +export function notEmpty( + value: TValue | null | undefined +): value is TValue { + return value !== null && value !== undefined +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts.meta new file mode 100644 index 00000000..874fdd2c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/notEmpty.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 0b088d26-7880-4945-92db-3ed2c053d0b1 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 0b088d26-7880-4945-92db-3ed2c053d0b1 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 14c5c806-ad53-4058-a439-bb1ecdfdfc35 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts new file mode 100644 index 00000000..59a1be31 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts @@ -0,0 +1,52 @@ +export class SpringAnimate { + + // Spring constant + k: number + // Damping constant + damp: number + // Mass of the object + mass: number + + velocity: vec3 + + constructor(k: number, damp: number, mass: number) { + this.k = k + this.damp = damp + this.mass = mass + this.velocity = vec3.zero() + } + + /** + * Evaluates the new position of the object based on the spring dynamics. + * @param currentValue The current position of the object. + * @param targetValue The target position of the object. + * @returns The updated position of the object. + */ + public evaluate(currentValue: vec3, targetValue: vec3): vec3 { + // Calculate the spring force for each axis + const forceX = -this.k * (currentValue.x - targetValue.x) + const forceY = -this.k * (currentValue.y - targetValue.y) + const forceZ = -this.k * (currentValue.z - targetValue.z) + const force = new vec3(forceX, forceY, forceZ) + + // Damping for each axis + const damping = this.velocity.uniformScale(-this.damp) + + // Acceleration + const acceleration = force.add(damping).uniformScale(1 / this.mass) + + // Update velocity + this.velocity = this.velocity.add(acceleration.uniformScale(getDeltaTime())) + + // Update position + const updatedValue = currentValue.add( + this.velocity.uniformScale(getDeltaTime()) + ) + + return updatedValue + } + + public reset(): void { + this.velocity = vec3.zero() + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts.meta new file mode 100644 index 00000000..74b82595 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/springAnimate.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 09ba6d83-077d-4fda-9c19-704187455bde + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 09ba6d83-077d-4fda-9c19-704187455bde + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 3128028d-b3a6-4afc-b1ac-61d35389be51 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts new file mode 100644 index 00000000..ac053a5c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts @@ -0,0 +1,19 @@ +/** + * A one line solution to checking if an object is undefined or null that + * asserts this so that strict compilers flag the variable as potentially + * undefined or null. + * + * @param object - The object that should be checked if it is undefined or null. + */ +export function validate( + object: T | undefined | null, + message: string | undefined = undefined +): asserts object is T { + if (object === undefined) { + throw new Error(message ?? "Attempted operation on undefined object.") + } + + if (object === null) { + throw new Error(message ?? "Attempted operation on null object.") + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts.meta new file mode 100644 index 00000000..b897a1b8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/validate.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! d619ef41-c9af-4fbd-a7d4-2d00af1474ea + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d619ef41-c9af-4fbd-a7d4-2d00af1474ea + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 0f75c1b7-6726-44c3-a6fc-be19a6c9978c + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts new file mode 100644 index 00000000..08536c61 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts @@ -0,0 +1,117 @@ +//Line vertices have 11 coords - 3 position, 3 previous, 3 tangent, and 2 uv +export type lineVertex = [ + number, + number, + number, + + number, + number, + number, + + number, + number, + number, + + number, + number +] + +/** + * Shifts vertices so that we can join corners of line segments w/ miter + * @param prevSegment direction of previous vertex + * @param nextSegment direction of next vertex + * @param widthOffset offset of the width + * @returns miterOffset - add or subtract this from a vertex to get offset needed + */ +export function getMiterOffset( + prevSegment: vec3, + nextSegment: vec3, + widthOffset: number +): vec3 { + let tangent = prevSegment.add(nextSegment).normalize() + let miter = new vec3(-tangent.y, tangent.x, 0) + let normalA = new vec3(-prevSegment.y, prevSegment.x, 0) + let scaleWidth = widthOffset / miter.dot(normalA) + return miter.uniformScale(scaleWidth) +} + +export function getSegmentNormalized(currentPoint: vec3, nextPoint: vec3) { + return currentPoint.sub(nextPoint).normalize() +} + +export function getTangent(prevSegment: vec3, nextSegment: vec3) { + return prevSegment.add(nextSegment).normalize() +} + +export function getEndWidth(current: vec3, next: vec3, widthAtVertex: number) { + let direction = next.sub(current) + let normalizedDir = new vec3(-direction.y, direction.x, 0).normalize() + return normalizedDir.uniformScale(widthAtVertex) +} + +/** + * Builds a segment of the line using its MeshBuilder + * @param point the position coordinates for the point + * @param tangent of the connecting line segments + * @param uv_v desired v coordinate for the vertex's uv map + * vertices are shifted for thickness in the shader + */ +export function buildSegment( + point: vec3, + prevSegment: vec3, + tangent: vec3, + uv_v: number +): number[] { + return [ + //left vertices and tangent + point.x, + point.y, + point.z, + prevSegment.x, + prevSegment.y, + prevSegment.z, + tangent.x, + tangent.y, + tangent.z, + //left uv + 0, + uv_v, + + //right vertices and tangent + point.x, + point.y, + point.z, + prevSegment.x, + prevSegment.y, + prevSegment.z, + tangent.x, + tangent.y, + tangent.z, + //right uv + 1, + uv_v, + ] +} + +// Sets up data for a single line vertex, for use in setVertexInterleaved +export function buildVertex( + position: vec3, + prevSegment: vec3, + tangent: vec3, + uv_u: number, + uv_v: number +): lineVertex { + return [ + position.x, + position.y, + position.z, + prevSegment.x, + prevSegment.y, + prevSegment.z, + tangent.x, + tangent.y, + tangent.z, + uv_u, + uv_v, + ] +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts.meta new file mode 100644 index 00000000..eae9e9cb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineMeshUtils.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 81f3d4d4-bd15-403f-ab7c-d1e6873de1dc + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 81f3d4d4-bd15-403f-ab7c-d1e6873de1dc + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! 3763f10c-62bf-47d1-9eb5-9f727a625e04 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts new file mode 100644 index 00000000..d97389d6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts @@ -0,0 +1,369 @@ +import * as utils from "./LineMeshUtils" + +import View, {ViewConfig} from "../View" + +import {YELLOW} from "../../color" +import NativeLogger from "../../NativeLogger" + +const DEFAULT_WIDTH = 1 +const UV_V_POSITION = 4 +const VERTEX_DATA_SIZE = 11 +const VERTICES_PER_POINT = 2 +const SEGMENT_DATA_SIZE = VERTEX_DATA_SIZE * VERTICES_PER_POINT +const DEFAULT_RENDER_ORDER = 20 + +const TAG = "LineRenderer" + +export type LineViewConfig = ViewConfig & { + material: Material + startColor?: vec4 + endColor?: vec4 + points: vec3[] + startWidth?: number + endWidth?: number + lookAtCamera?: boolean +} + +/** + * The LineRenderer is a custom component that draws a line in 3D space with RenderMeshVisual. + * It uses MeshBuilder to programmatically generate a line strip given a list of points provided by the user. + */ +export default class LineRenderer extends View { + private log = new NativeLogger(TAG) + + private _points: vec3[] = this.config.points ?? [] + private _startWidth: number = this.config.startWidth ?? DEFAULT_WIDTH + private _endWidth: number = this.config.endWidth ?? DEFAULT_WIDTH + private _startColor = this.config.startColor ?? YELLOW(1) + private _endColor = this.config.endColor ?? YELLOW(1) + private _lookAtCamera = this.config.lookAtCamera ?? false + + private meshBuilder = this.setupMeshBuilder() + private meshVertexData: number[] = [] + + protected material = this.config.material.clone() + private meshComponent: RenderMeshVisual + private mesh: RenderMesh + + constructor(config: LineViewConfig) { + super(config) + // Create a container for the line mesh and parent it immediately to the scene object containing this component + // Prevent hierarchy issues, such as having a component attached to a SceneObject that is parented to another scene object + // Transformations should be done on the parent object rather than directly on the line renderer + + this.meshComponent = this.container.createComponent( + "Component.RenderMeshVisual" + ) + this.mesh = this.buildMesh() + + // Set up mesh component and material + this.meshComponent.mesh = this.mesh + this.meshComponent.mainMaterial = this.material + this.meshComponent.mainMaterial.mainPass.blendMode = 0 + this.meshComponent.setRenderOrder(DEFAULT_RENDER_ORDER) + this.setupMaterial() + } + + /** + * Returns a shallow copy of the array of points that the LineRenderer will draw a line between. + */ + get points(): vec3[] { + return this._points.slice() + } + + /** + * Set the array of points that the LineRenderer will draw a line between. + */ + set points(points: vec3[]) { + this._points = points + //clear existing mesh data before rebuilding with provided points + this.clearMesh() + this.buildMesh() + } + + /** + * Gets the color of the line at the start. + */ + get startColor(): vec4 { + return this._startColor + } + + /** + * Sets the color of the line at the start. + */ + set startColor(color: vec4) { + this._startColor = color + this.material.mainPass.startColor = this._startColor + } + + /** + * Gets the color of the line at the end. + */ + get endColor(): vec4 { + return this._endColor + } + + /** + * Sets the color of the line at the end. + */ + set endColor(color: vec4) { + this._endColor = color + this.material.mainPass.endColor = this._endColor + } + + /** + * Gets the width of the line at the start. + */ + get startWidth(): number { + return this._startWidth + } + + /** + * Sets the width of the line at the start. + */ + set startWidth(newWidth: number) { + this._startWidth = newWidth + this.material.mainPass.startWidth = this._startWidth + } + + /** + * Gets the width of the line at the end. + */ + get endWidth(): number { + return this._endWidth + } + + /** + * Sets the width of the line at the end. + */ + set endWidth(newWidth: number) { + this._endWidth = newWidth + this.material.mainPass.endWidth = this._endWidth + } + + get lookAtCamera() { + return this._lookAtCamera + } + + set lookAtCamera(isEnabled: boolean) { + this._lookAtCamera = isEnabled + this.material.mainPass.billboarding = this._lookAtCamera + } + + /** + * Sets line to a single solid color instead of a gradient + * @param color color of the line + */ + setSolidColor(color: vec4) { + this.startColor = color + this.endColor = color + } + + /** + * Updates position of point (in this._points) at the indicated index + * @param index (index in the points[] array) of the vertex to be changed + * @param newPos the vertex's new position + */ + updateVertexPosition(index: number, newPos: vec3) { + if (index >= this._points.length) { + this.log.w( + `Index ${index} not in range for line with ${this._points.length} points!` + ) + return + } + + // Modify points array + this._points[index] = newPos + + // Calculate where to shift mesh vertices at point + var tangent: vec3 + var prevPoint: vec3 + var uv_v: number + if (index === 0) { + prevPoint = this.points[index] + tangent = this._points[index + 1].sub(this._points[index]).normalize() + uv_v = 0 + } else if (index === this._points.length - 1) { + prevPoint = this.points[index - 1] + tangent = this._points[index].sub(this._points[index - 1]).normalize() + uv_v = 1 + } else { + // Get uv_v coords from mesh vertex data, use it to calculate uv, width, and miter + prevPoint = this.points[index - 1] + uv_v = + this.meshVertexData[ + index * VERTICES_PER_POINT * VERTEX_DATA_SIZE + UV_V_POSITION + ] + let prevSegment = utils.getSegmentNormalized( + this._points[index - 1], + this._points[index] + ) + let nextSegment = utils.getSegmentNormalized( + this._points[index], + this._points[index + 1] + ) + tangent = utils.getTangent(prevSegment, nextSegment) + } + let leftVertexData = utils.buildVertex(newPos, prevPoint, tangent, 0, uv_v) + let rightVertexData = utils.buildVertex(newPos, prevPoint, tangent, 1, uv_v) + + this.meshBuilder.setVertexInterleaved( + index * VERTICES_PER_POINT, + leftVertexData + ) + this.meshBuilder.setVertexInterleaved( + index * VERTICES_PER_POINT + 1, + rightVertexData + ) + this.meshBuilder.updateMesh() + } + + /** + * Sets up mesh builder as a triangle strip with position coordinates and additional parameters: previous segment, direction, and uv. + * These parameters are used to calculate thickness offset in the vertex shader, allowing us to avoid calls to the native layer when billboarding or changing width. + * @returns meshBuilder with vertex configuration: position (3), prevSegment (3), direction (3), textureO (2) + */ + private setupMeshBuilder(): MeshBuilder { + var meshBuilder = new MeshBuilder([ + {name: "position", components: 3}, + {name: "prevSegment", components: 3}, + {name: "direction", components: 3}, + {name: "texture0", components: 2}, + ]) + + meshBuilder.topology = MeshTopology.TriangleStrip + meshBuilder.indexType = MeshIndexType.None + return meshBuilder + } + + /** + * Builds the line as a triangle strip mesh using MeshBuilder + * @returns the mesh created by buildGeometry() + */ + private buildMesh(): RenderMesh { + this.buildGeometry() + if (this.meshBuilder.isValid()) { + this.meshBuilder.updateMesh() + return this.meshBuilder.getMesh() + } else { + throw new Error("LineRenderer: mesh data invalid") + } + } + + /** + * Clears all existing mesh data, used for when we want to reset points + */ + private clearMesh() { + if (this.meshBuilder.isValid()) { + this.meshVertexData = [] + } + if (this.meshBuilder.getVerticesCount()) { + this.meshBuilder.eraseVertices(0, this.meshBuilder.getVerticesCount()) + } + } + + /** + * Builds geometry of a line as a triangle strip, using coordinates provided for segments + * Updates the MeshBuilder with vertex information + */ + private buildGeometry() { + if (this._points === undefined || this._points.length <= 1) { + this.log.w( + "2 or more vertices must be provided in order to render a line!" + ) + return + } + + // Used to calculate uvs + let totalLineLength = this.getLineLength() + let lengthAtVertex = 0 + + // Used to calculate miter for bends in segments + let segmentBefore = null + let segmentAfter = null + + // Append all vertex data in one large array + let vertexArraySize = this._points.length * SEGMENT_DATA_SIZE + let vertexData: number[] = Array(vertexArraySize) + + // Build each line segment + let dataIndex = 0 + for (let i = 0; i < this._points.length; i++) { + let tangent: vec3 + let prevSegment: vec3 + let uv_v: number + + // Start point - calculate width offset direction based on next vertex only + if (i === 0) { + prevSegment = tangent = this._points[i + 1] + .sub(this._points[i]) + .normalize() + uv_v = 0 + } + + // End point - calculate width offset direction based on previous vertex only + else if (i === this._points.length - 1) { + prevSegment = tangent = this._points[i] + .sub(this._points[i - 1]) + .normalize() + uv_v = 1 + } + + // Middle points + else { + // Calculate width at vertex, assuming linear change + lengthAtVertex += this._points[i].distance(this._points[i - 1]) + uv_v = lengthAtVertex / totalLineLength + + // Get segment vectors to calculate miter + if (segmentBefore === null) { + segmentBefore = this._points[i].sub(this._points[i - 1]).normalize() + } + segmentAfter = this._points[i + 1].sub(this._points[i]).normalize() + prevSegment = segmentBefore + tangent = utils.getTangent(segmentBefore, segmentAfter) + // Increment to next segment + segmentBefore = segmentAfter + } + + vertexData.splice( + dataIndex, + SEGMENT_DATA_SIZE, + ...utils.buildSegment(this._points[i], prevSegment, tangent, uv_v) + ) + + if (i <= this._points.length - 1) { + dataIndex += SEGMENT_DATA_SIZE + } + } + + // Do only one call to native layer to save costs + this.meshVertexData = vertexData + this.meshBuilder.appendVerticesInterleaved(this.meshVertexData) + + // Update mesh with changes once line building is complete + this.meshBuilder.updateMesh() + } + + /** + * Calculates length of current line, used to interpolate gradients & width + * @returns total length of line with segments indicated + */ + private getLineLength(numSegments = this._points.length) { + var length = 0 + for (let i = 0; i < numSegments - 1; i++) { + length += this._points[i].distance(this._points[i + 1]) + } + return length + } + + /** + * Sets up line material to enable gradients along the line + */ + private setupMaterial() { + this.startColor = this._startColor + this.endColor = this._endColor + this.startWidth = this._startWidth + this.endWidth = this._endWidth + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts.meta new file mode 100644 index 00000000..fe7736a3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/LineRenderer/LineRenderer.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 1901cbf7-8f8d-4faa-b2a3-cbdeed65e144 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 1901cbf7-8f8d-4faa-b2a3-cbdeed65e144 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! f07b081f-d186-472d-ba94-701d29c0f1ee + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts new file mode 100644 index 00000000..54f28922 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts @@ -0,0 +1,162 @@ +import * as color from "../color" + +import View, {ViewConfig} from "./View" + +import {aabb} from "../aabb" +import {Spatial} from "../Spatial" + +// import * as color from "../../util/color" + +// import {Asset, Component, vec3, vec4} from "../../platform/LensCore" +// import View, {ViewConfig} from "../View" + +// import {Spatial} from "../../Spatial/Spatial" +// import {aabb} from "../../primitives/aabb" + +/** + * The config for the MeshView + */ +export type MeshViewConfig = ViewConfig & { + mesh: RenderMesh + material?: Material + renderOrder?: number + texture?: Texture +} + +/** + * A subclass of View that has a RenderMeshVisual Component. + * You must provide the RenderMesh and Material via the MeshViewConfig. + * NOTE: that the blendMode is set to `0` on the material by default. + * This is almost always the right choice, and it's easy to change + * it to something else if your usecase is different + */ +export default class MeshView extends View implements Spatial { + private component: RenderMeshVisual + + get aabbMin(): vec3 { + return this.component.mesh.aabbMin + } + get aabbMax(): vec3 { + return this.component.mesh.aabbMax + } + + get aabbSize(): vec3 { + return this.component.mesh.aabbMax.sub(this.component.mesh.aabbMin) + } + + get worldAabbMax(): vec3 { + return this.worldPosition.add(this.component.mesh.aabbMax) + } + + get worldAabbMin(): vec3 { + return this.worldPosition.add(this.component.mesh.aabbMin) + } + + get worldAabbSize(): vec3 { + return this.worldAabbMax.sub(this.worldAabbMin) + } + + get material() { + return this.component.mainMaterial + } + + get mainPass() { + return this.component.mainPass + } + + getAABB(): aabb { + return {min: this.component.mesh.aabbMin, max: this.component.mesh.aabbMax} + } + + getWorldAABB(): aabb { + return { + min: this.component.worldAabbMin(), + max: this.component.worldAabbMax(), + } + } + + /** + * @inheritdoc + */ + override setAlpha(a: number) { + super.setAlpha(a) + if ( + this.component.mainPass !== undefined && + this.component.mainPass.baseColor !== undefined + ) { + // otherwise, set the alpha directly + this.component.mainPass.baseColor = color.withAlpha( + this.component.mainPass.baseColor, + a + ) + } + } + + constructor(config: MeshViewConfig) { + super(config) + this.component = this.container.createComponent( + "Component.RenderMeshVisual" + ) + + let material + if (this.config.material) { + material = this.config.material.clone() + } else { + throw new Error("No material specified.") + } + + this.component.mesh = config.mesh + this.component.mainMaterial = material + + this.component.mainMaterial.mainPass.blendMode = + this.config.material?.mainPass.blendMode ?? 0 + + if (this.config.renderOrder) { + this.component.setRenderOrder(this.config.renderOrder) + } + + if (this.config.texture) { + this.component.mainMaterial.mainPass.baseTex = this.config.texture + } + } + + get baseColor(): vec4 { + return this.component.mainMaterial.mainPass.baseColor + } + + set baseColor(color: vec4) { + this.component.mainMaterial.mainPass.baseColor = color + } + + set renderOrder(order: number) { + this.component.setRenderOrder(order) + } + + /** + * Adds a new material after cloning it. The cloned material is returned. + * @param material the material to be added + * @returns the cloned material + */ + addMaterial(material: Material): Material { + // Clones material so we can modify it within this MeshView only - otherwise changing this will modify all instances of the material + let clonedMaterial = material.clone() + this.component.addMaterial(clonedMaterial) + return clonedMaterial + } + + getMaterialByIndex(index: number): Material { + return this.component.getMaterial(index) + } + + getMaterialsCount(): number { + return this.component.getMaterialsCount() + } + + clearMaterials() { + this.component.clearMaterials() + } + + updateMesh(mesh: RenderMesh) { + this.component.mesh = mesh + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts.meta new file mode 100644 index 00000000..49552a42 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/MeshView.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 0f043e88-0d32-42a4-86bf-1cd6fa23c720 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 0f043e88-0d32-42a4-86bf-1cd6fa23c720 + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! df3df642-c80a-47a8-8b2a-72fab1a6be48 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts new file mode 100644 index 00000000..14be9cde --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts @@ -0,0 +1,445 @@ +/* + * View implements a generic baseclass with useful utilities that many + * subclasses can take advantage of. + * + * Views are meant to be hierarchical, where each parent view is passed to + * the constructor of the child views. However, a lensCore SceneObject may + * also be passed as a valid parent + */ +import Event from "../Event" +import ReplayEvent from "../ReplayEvent" + +export type Defaults = Partial<{ + font: Font + fontSize: number + textColor: vec4 + colorMask: vec4b +}> + +export type ViewConfig = Partial<{ + position: vec3 + rotation: quat + scale: number + enabled: boolean + name: string + defaults: Defaults +}> + +export type OnDestroyCallback = () => void + +export default class View { + protected container: SceneObject + private _defaults: Defaults | null + protected childViews: View[] = [] + private transform: Transform + protected attachedToScene = false + private onDestroyCallbacks: OnDestroyCallback[] = [] + + private static onCreateViewEvent = new Event>() + public static onCreateView = View.onCreateViewEvent.publicApi() + + private static onDestroyViewEvent = new Event>() + public static onDestroyView = View.onDestroyViewEvent.publicApi() + + private onEnabledEvent = new ReplayEvent() + public onEnabled = this.onEnabledEvent.publicApi() + + isDestroyed: boolean = false + + // Internally track the current alpha of the view + protected _alpha = 1 + + /** + * Returns the current alpha of the view + */ + get alpha() { + return this._alpha + } + + /** + * @inheritdoc + */ + set alpha(a: number) { + this.setAlpha(a) + } + + /** + * Set the alpha of the View to a, and recursively apply this alpha to all descendents. + * The alpha will be applied by setting the .a component of baseColor to a. + * @param a The value to set the alpha of the view to, from 0 to 1 + */ + setAlpha(a: number) { + this.setAlphaInternal(a) + } + + constructor(private _config: Config) { + this.container = global.scene.createSceneObject(this._config.name ?? "View") + this.transform = this.container.getTransform() + //this.addComponent("ScreenTransform"). + + if (this._config.position !== undefined) { + this.position = this._config.position + } + + if (this._config.rotation !== undefined) { + this.localRotation = this._config.rotation + } + + if (this._config.scale !== undefined) { + this.localScale = this._config.scale + } + + if (this._config.enabled === false) { + this.setEnabled(false) + } else { + this.onEnabledEvent.invoke(true) + } + + this._defaults = this.config.defaults ?? null + + View.onCreateViewEvent.invoke(this) + } + + destroy() { + if (this.isDestroyed === true) { + return + } + + View.onDestroyViewEvent.invoke(this) + + /* + this.getSceneObject().destroy() will clean up all the scene objects but not the view objects + */ + this.isDestroyed = true + this.cascadeDestroy() + this.getSceneObject().destroy() + + for (let callback of this.onDestroyCallbacks) { + callback() + } + } + + private cascadeDestroy() { + for (let child of this.childViews) { + child.destroy() + } + } + + /** + * addOnDestroyCallback adds a callback to call when the view is destroyed + */ + addOnDestroyCallback(callback: OnDestroyCallback) { + this.onDestroyCallbacks.push(callback) + } + + /** + * Actually sets the alpha internally on the view, and cascades the call to + * the view's children + */ + private setAlphaInternal(a: number) { + this._alpha = a + // also set alpha on all of the child views + for (let child of this.childViews) { + child.setAlpha(a) + } + } + + set localPosition(position: vec3) { + this.transform.setLocalPosition(position) + } + + get localPosition(): vec3 { + return this.transform.getLocalPosition() + } + + /** + * @deprecated pleasre use localPosition + */ + set position(position: vec3) { + this.transform.setLocalPosition(position) + } + + /** + * @deprecated use localPosition instead + */ + get position(): vec3 { + return this.transform.getLocalPosition() + } + + // set the world position of an object + set worldPosition(position: vec3) { + this.transform.setWorldPosition(position) + } + + get worldPosition(): vec3 { + return this.transform.getWorldPosition() + } + + /** + * @deprecated use localScale instead + */ + set scale(scale: number) { + this.transform.setLocalScale(new vec3(scale, scale, scale)) + } + + /** + * Return the local scale of an object, assuming uniform scaling + */ + get localScale(): number { + return this.transform.getLocalScale().x + } + + // set the scale of an object, enforcing uniform scaling + set localScale(scale: number) { + this.transform.setLocalScale(new vec3(scale, scale, scale)) + } + + get localScaleVec3(): vec3 { + return this.transform.getLocalScale() + } + + set localScaleVec3(vec: vec3) { + this.transform.setLocalScale(vec) + } + + // set the world scale of an object, enforcing uniform scaling + set worldScale(scale: number) { + this.transform.setWorldScale(new vec3(scale, scale, scale)) + } + + // get the world scale, assuming uniform scaling + get worldScale() { + return this.transform.getWorldScale().x + } + + set worldScaleVec3(scale: vec3) { + this.transform.setWorldScale(scale) + } + + get worldScaleVec3() { + return this.transform.getWorldScale() + } + + set localRotation(rotation: quat) { + this.transform.setLocalRotation(rotation) + } + + get localRotation() { + return this.transform.getLocalRotation() + } + + set worldRotation(rotation: quat) { + this.transform.setWorldRotation(rotation) + } + + get worldRotation() { + return this.transform.getWorldRotation() + } + + get name(): string { + return this.container.name + } + + // Attach this view to a lensCore SceneObject + public attachToScene(parent: SceneObject): this { + // attach the scene + this.attachToParent(parent) + + // then, fire the onAttachToScene callbacks recursively + this.cascadeAttachToSceneCallbacks() + return this + } + + // Get the underlying scene object. This should be viewed as an "escape hatch" + // for doing advanced things + public getSceneObject() { + return this.container + } + + // Get the underlying transform for this object. + public getTransform() { + return this.transform + } + + /** + * @param worldPos - a point representing something's world position + * @returns the point's position relative to this view + */ + public getRelativePosOfPoint(worldPos: vec3) { + return this.transform.getInvertedWorldTransform().multiplyPoint(worldPos) + } + + // isVisible returns true if this component is both enabled and its alpha is not zero + public isVisible(): boolean { + return this.getSceneObject().enabled && this.alpha !== 0 + } + + public setEnabled(enabled: boolean) { + if (enabled === this.getSceneObject().enabled) return + this.getSceneObject().enabled = enabled + this.onEnabledEvent.invoke(enabled) + } + + public isEnabled(): boolean { + return this.getSceneObject().enabled + } + + public addComponent(typeName: K) { + return this.container.createComponent(typeName) as ComponentNameMap[K] + } + + public getComponent(typeName: K) { + return this.container.getComponent(typeName) as ComponentNameMap[K] + } + + // Add a child view to this view + protected addChild>( + child: Child, + configure?: (c: Child) => void, + preserveWorldTransform: boolean = false + ): Child { + child.attachToParent(this, preserveWorldTransform) + this.childViews.push(child) + if (configure !== undefined) { + configure(child) + } + + // the child is being attached after the parent, so it needs + // to have its onAttachToScene hook called, recursively + if (this.attachedToScene) { + child.cascadeAttachToSceneCallbacks(this._defaults) + } + + return child + } + + // construct and add a child + protected newChild< + Conf, + Child extends View + >( + ctor: {new (conf: Conf): Child}, + conf: Conf, + customize?: (c: Child) => void + ): Child { + return this.addChild(new ctor(conf), customize) + } + + /** + * @deprecated use destroyChild or detachChild instead. + */ + protected removeChild>(child: Child): void { + child.destroy() + let index = this.childViews.indexOf(child) + if (index === -1) { + return + } + this.childViews.splice(index, 1) + } + + /** + * Destroys and removes the child from this View + * @param child the child to be destroyed + * @returns whether the child was destroyed + */ + protected destroyChild>(child: Child): boolean { + let index = this.childViews.indexOf(child) + if (index === -1) { + return false + } + child.destroy() + this.childViews.splice(index, 1) + return true + } + + /** + * Detaches child from parent and removes the child from this View + * @param child the child to be detached + * @returns whether the child was detached + */ + protected detachChild>(child: Child): boolean { + let index = this.childViews.indexOf(child) + if (index === -1) { + return false + } + child.getSceneObject().removeParent() + this.childViews.splice(index, 1) + return true + } + + protected get config(): Config { + return this._config + } + + // onAttachToScene is a lifecycle hook that happens when a view is attached + // to its parent. It is the place where "defaults" should be used, since they + // will not cascade prior to this hook + protected onAttachToScene(defaults: Defaults, parentView: View | null) { + // default is noop + } + + // Set a a property on all child views. If a View already has the property, + // it is assumed that View will handle setting the property on its child + // views, or (more likely) is a leaf node in the View tree. If a View does + // not have a property, that view's children will be added to this (pre-order) + // traversal + protected recursivelySetChildProperty< + FieldName extends keyof this, + FieldType extends this[FieldName] + >(fieldName: FieldName, newValue: FieldType) { + let viewStack: any[] = [...this.childViews] + while (viewStack.length > 0) { + let view = viewStack.pop() + + if (fieldName in view) { + view[fieldName] = newValue + } else { + viewStack.push(...view.childViews) + } + } + } + + private attachToParent( + parent: View | SceneObject, + preserveWorldTransform: boolean = false + ) { + // set the scene object parent + let parentSceneObject: SceneObject = + parent instanceof View ? parent.getSceneObject() : parent + if (preserveWorldTransform) { + this.container.setParentPreserveWorldTransform(parentSceneObject) + } else { + this.container.setParent(parentSceneObject) + } + } + + private cascadeAttachToSceneCallbacks( + parentDefaults: Defaults | null = null, + parentView: View | null = null + ) { + // creates a prototype cain so that defaults will "fall back" + // to the parent's defaults + const objectWithFallback = (obj: any, fallback: any) => { + let result = Object.create(fallback, {}) + Object.assign(result, obj) + return result + } + + // compute the defaults as either a prototype chain of the available + // defaults, or the first non-null default + let defaults = + parentDefaults !== null && this._defaults !== null + ? objectWithFallback(this._defaults, parentDefaults) + : parentDefaults ?? this._defaults ?? {} + + // cache the computed defaults for any future attaches + this._defaults = defaults + + this.attachedToScene = true + this.onAttachToScene(defaults, parentView) + + for (let child of this.childViews) { + child.cascadeAttachToSceneCallbacks(defaults, this) + } + } +} diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts.meta new file mode 100644 index 00000000..489700e3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/Utils/views/View.ts.meta @@ -0,0 +1,40 @@ +- ! + ImporterSettings: ! + {} + ImportedAssetIds: + TypeScriptAsset: ! 1a552a17-fe98-4bcf-ac13-8dd76d97a0ea + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 1a552a17-fe98-4bcf-ac13-8dd76d97a0ea + PackageType: NotAPackage + AssetDataMap: + TypeScriptAsset: ! f1a85e72-fcc9-47d7-9750-858556824976 + PackagePolicy: CannotBeUnpacked + DependentFiles: + [] + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} +- ! + Icon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] + SvgIcon: "" diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native new file mode 100644 index 00000000..eec49341 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native @@ -0,0 +1,40 @@ +- ! + PackagePath: "" + StudioVersion: + major: 5 + minor: 4 + patch: 0 + build: 24121004 + type: Unset + Description: |- + Release + + Documentation: + https://docs.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/get-started + + https://docs.snap.com/lens-studio/api/interfaces/Lens_Scripting.Packages_SpectaclesInteractionKit_SIK.SIKAPI.html + + Preliminary Setup: + - Ensure the main camera has a Device Tracking component (w/ tracking mode set to World). + - Ensure the device type override is set to Spectacles (cogwheel at the top-right of the preview panel > Device Type Override > Spectacles). + - Ensure that this package is unpacked in your scene (right-click the package in Asset Browser and unpack if given the option). + SvgIcon: "" + InternalVersion: 1 + VersionMajor: 0 + VersionMinor: 10 + VersionPatch: 0 + UpdateCheckpoint: 52 + ExportUid: be6fd4cf-737d-41f1-adeb-b97e6d34b3c4 + ComponentUid: 0f7a0bbe-777c-41a5-b979-0b0430f25836 + CurrentVisibility: Editable + MaxVisibility: Editable + Instantiable: ! 00000000-0000-0000-0000-000000000000 + AssetLibraryDependencyStructure: ! + Name: SpectaclesInteractionKit + AssetId: 1aPW5eMfMPeP1615dXiqyN + Hash: 6d766edbbf734c74c19e233d32d7b22c + Version: + major: 0 + minor: 10 + patch: 0 + build: 0 diff --git a/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native.meta b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native.meta new file mode 100644 index 00000000..e56e66ec --- /dev/null +++ b/Spectacles-2-Unitree/Assets/SpectaclesInteractionKit/package.native.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + NativePackageDescriptor: ! 58bd1d70-15ee-48cb-8387-796cc9151440 + ImporterName: NativePackageDescriptorImporter + PrimaryAsset: ! 58bd1d70-15ee-48cb-8387-796cc9151440 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + {} diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat new file mode 100644 index 00000000..fd23d910 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 04260b77-6a88-405b-a413-f02f2cb6f291 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 0.470130, z: 0.267262, w: 0.749996} + baseTex: + typeIdx: 9 + value: + id: 6bc87d79-7748-4da4-8f90-a036bb6ada55 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat.meta new file mode 100644 index 00000000..3a8352bf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscFinal.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 101c21e9-bd2b-4a29-a0ed-308188a11740 + ImporterName: MaterialImporter + PrimaryAsset: ! 101c21e9-bd2b-4a29-a0ed-308188a11740 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat new file mode 100644 index 00000000..21fdfa32 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! ce8eb075-84b7-4543-9481-f09c5e335cf4 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: false + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.450000} + baseTex: + typeIdx: 9 + value: + id: 6bc87d79-7748-4da4-8f90-a036bb6ada55 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! ed11a32f-2415-41b3-8eac-cfb2cd729437 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat.meta new file mode 100644 index 00000000..d403df75 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Materials/DiscTemp.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 59f3fc28-f592-4a3e-9415-1ffad3884598 + ImporterName: MaterialImporter + PrimaryAsset: ! 59f3fc28-f592-4a3e-9415-1ffad3884598 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab new file mode 100644 index 00000000..d4203504 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab @@ -0,0 +1,54 @@ +- ! + PackagePath: "" + objects: + - ! 1364a1e6-3aa4-449c-9f55-7a84ff433746 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: PrefabFinalPosition + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! cdf24e23-0bba-42e4-bb71-cc2ba5ccce6a + Components: + [] +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 10 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 101c21e9-bd2b-4a29-a0ed-308188a11740 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Texture + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -90.000000, z: 0.000000} + scale: {x: 20.000000, y: 20.000000, z: 20.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cda3df6d-5e66-471c-8fbd-d6305a8eb190 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab.meta new file mode 100644 index 00000000..5492e4db --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabFinalPosition.prefab.meta @@ -0,0 +1,77 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! aab7eac5-7070-4adf-a352-c52c8e12c818 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! aab7eac5-7070-4adf-a352-c52c8e12c818 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + ObjectPrefab: ! d855fde8-15fe-45e1-90cc-e6bfcf8a7258 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: PrefabFinalPosition + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 5d6c5cb2-ee6e-4456-bf55-f89d4d9b24d8 + Components: + [] +- ! + PackagePath: "" + objects: + - ! 1dea88b1-5cc1-462d-9990-b3a172a8341b + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: Texture + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -90.000000, z: 0.000000} + scale: {x: 20.000000, y: 20.000000, z: 20.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 92968060-4253-4989-8906-5142bcfe9848 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 10 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 101c21e9-bd2b-4a29-a0ed-308188a11740 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + SourceRemaps: + - 1364a1e6-3aa4-449c-9f55-7a84ff433746: 1dea88b1-5cc1-462d-9990-b3a172a8341b + - aab7eac5-7070-4adf-a352-c52c8e12c818: 35ddfb3f-d702-42c9-a5e1-de8ddae81b29 + - cda3df6d-5e66-471c-8fbd-d6305a8eb190: 92968060-4253-4989-8906-5142bcfe9848 + - cdf24e23-0bba-42e4-bb71-cc2ba5ccce6a: 5d6c5cb2-ee6e-4456-bf55-f89d4d9b24d8 + SourceState: ! 35ddfb3f-d702-42c9-a5e1-de8ddae81b29 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab new file mode 100644 index 00000000..69e3ebb6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab @@ -0,0 +1,54 @@ +- ! + PackagePath: "" + objects: + - ! 20279135-6ec9-43cd-8a29-d4917aa18978 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: PrefabTemporaryPosition + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 2b6ecde6-54c7-4f1a-a408-1bf9e2d59a51 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Texture + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: -90.000000, y: -90.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! eb98e120-6ce8-4482-bd07-d40d36f6f4e5 +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 59f3fc28-f592-4a3e-9415-1ffad3884598 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab.meta new file mode 100644 index 00000000..9aaea84e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Prefab/PrefabTemporaryPosition.prefab.meta @@ -0,0 +1,77 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! 6c356ea2-7d6b-4fa2-8bba-efc695359cbd + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! 6c356ea2-7d6b-4fa2-8bba-efc695359cbd + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + ObjectPrefab: ! 7dd96ec9-1d11-476d-8d9c-0799eed0fee6 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + PrefabRemaps: + [] + Name: Texture + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: -20.000000} + rotation: {x: -90.000000, y: -90.000000, z: 0.000000} + scale: {x: 10.000000, y: 10.000000, z: 10.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 56042a37-da14-45d6-a7d6-f9a6c98b000c +- ! + PrefabRemaps: + [] + Name: Image + Enabled: true + RenderOrder: 0 + StretchMode: Fit + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 59f3fc28-f592-4a3e-9415-1ffad3884598 + FlipX: false + FlipY: false + Pivot: {x: 0.000000, y: 0.000000} + ExtentsTarget: ! 00000000-0000-0000-0000-000000000000 +- ! + SourceRemaps: + - 20279135-6ec9-43cd-8a29-d4917aa18978: b3cfdd55-ce49-455b-a91b-e1d566528bda + - 2b6ecde6-54c7-4f1a-a408-1bf9e2d59a51: 1c1bdfbd-c5dd-4fe1-9088-5112538bfc9f + - 6c356ea2-7d6b-4fa2-8bba-efc695359cbd: 8dde2477-efa4-4c33-b238-13ea6fe2670f + - eb98e120-6ce8-4482-bd07-d40d36f6f4e5: 56042a37-da14-45d6-a7d6-f9a6c98b000c + SourceState: ! 8dde2477-efa4-4c33-b238-13ea6fe2670f +- ! + PackagePath: "" + objects: + - ! b3cfdd55-ce49-455b-a91b-e1d566528bda + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: PrefabTemporaryPosition + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 1c1bdfbd-c5dd-4fe1-9088-5112538bfc9f + Components: + [] diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts new file mode 100644 index 00000000..9429ca8f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts @@ -0,0 +1,518 @@ +import { HandType } from "SpectaclesInteractionKit/Providers/HandInputData/HandType"; +import { allLandmarks, LandmarkName, wristLandmarks } from "SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames"; +import TrackedHand from "SpectaclesInteractionKit/Providers/HandInputData/TrackedHand"; +import * as FunctionTimingUtils from "SpectaclesInteractionKit/Utils/debounce"; +import { SimulationImageController } from "./SimulationImage"; +import { flat, tr } from "Unitree2Spectacles/Scripts/TS/Utils"; + +// Define the CancelToken type to match what's returned by FunctionTimingUtils +type CancelToken = ReturnType; + +/** + * Client for communicating with the Spectacles-2-Unitree Coordination server. + */ +@component +export class CoordinationClient extends BaseScriptComponent { + + @input + serverUrl: string = "wss://spectaclexr.com/ws"; + + @input + private logs: Text; + + @input + private img_sim: Image; + + private socket: WebSocket; + private clientId: string = null; + public pairingStatus: "disconnected" | "waiting" | "paired" = "disconnected"; + private pairedWithId: string = null; + private pairedWithType: string = null; + private reconnectTimer: CancelToken = null; + // Delay between reconnection attempts in milliseconds + private reconnect_delay: number = 1000; + // Remote service module for fetching data + private remoteServiceModule: RemoteServiceModule = require("LensStudio:RemoteServiceModule"); + + // Timer for connection health checks + private connectionCheckTimer: CancelToken = null; + + private simImgController: SimulationImageController = null; + + async onAwake() { + try { + await this.connectToServer(); + this.simImgController = new SimulationImageController(this.img_sim); + // Start periodic connection health checks + this.startConnectionHealthChecks(); + } catch (e) { + print("Error: " + e); + } + } + + onDestroy() { + + if (this.simImgController) { + this.simImgController.dispose(); + this.simImgController = null; + } + + // Clean up connection check timer when component is destroyed + if (this.connectionCheckTimer !== null) { + FunctionTimingUtils.clearTimeout(this.connectionCheckTimer); + this.connectionCheckTimer = null; + } + + // Also clean up reconnect timer + if (this.reconnectTimer !== null) { + FunctionTimingUtils.clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + } + + // Close socket if open + if (this.socket) { + this.socket.close(); + this.socket = null; + } + } + + /** + * Starts periodic connection health checks to detect disconnections + */ + private startConnectionHealthChecks() { + // Clear any existing timer + if (this.connectionCheckTimer !== null) { + FunctionTimingUtils.clearTimeout(this.connectionCheckTimer); + } + + // Set up recurring check + this.connectionCheckTimer = FunctionTimingUtils.setTimeout(() => { + this.checkConnectionHealth(); + // Schedule next check if component is still active + if (this.enabled) { + this.startConnectionHealthChecks(); + } + }, this.reconnect_delay); + } + + /** + * Checks if the connection is healthy and initiates reconnection if needed + */ + private checkConnectionHealth() { + const socketClosed = !this.socket || + this.socket.readyState === 2 || // closing + this.socket.readyState === 3; // closed + + if (socketClosed) { + // Only log if we were previously connected + if (this.pairingStatus !== "disconnected") { + this.log("Connection lost. Attempting to reconnect..."); + this.pairingStatus = "disconnected"; + this.pairedWithId = null; + this.pairedWithType = null; + + this.simImgController.showStatic(); + } + + // Initiate reconnection if not already scheduled + if (this.reconnectTimer === null) { + this.scheduleReconnect(); + } + } + } + + private async connectToServer() { + try { + // Close existing socket if present + if (this.socket) { + this.socket.close(); // NOTE: not sure if this is actually working or if there is an issue with Lens Studio's Spectacles simulation. + this.socket = null; + } + + // Clear any existing reconnect timer + if (this.reconnectTimer !== null) { + FunctionTimingUtils.clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + } + + // Check if server is available before attempting to connect + const serverBase = this.serverUrl.replace("wss://", "https://").replace("/ws", ""); + try { + const response = await this.remoteServiceModule.fetch(serverBase, { + method: "GET" + }); + if (response.status >= 400) { + print(`Server returned error status: ${response.status}`); + this.log(`Server unavailable (status: ${response.status}). Retrying in ${this.reconnect_delay / 1000} seconds...`); + this.scheduleReconnect(); + return; + } else if (response.status == null) { + throw new Error(`Status was not OK: ${response.status}`) + } + + print(`Server check succeeded with status: ${response.status}`); + } catch (e) { + print(`Server availability check failed: ${e}`); + this.log(`Failed to reach server. Retrying in ${this.reconnect_delay / 1000} seconds...`); + this.scheduleReconnect(); + return; + } + + // Create new WebSocket connection + this.socket = this.remoteServiceModule.createWebSocket(this.serverUrl); + this.socket.binaryType = "blob"; + + // Set up event handlers + this.socket.onopen = (event: WebSocketEvent) => { + print("Socket connected! Identifying as spectacles client..."); + this.log("Connected to server"); + + // Send identification message + this.socket.send(JSON.stringify({ + "type": MessageType.CLIENT_TYPE + })); + }; + + this.socket.onmessage = async (event: WebSocketMessageEvent) => { + await this.processMessage(event.data); + }; + + this.socket.onclose = (event: WebSocketCloseEvent) => { + if (event.wasClean) { + print("Connection closed cleanly"); + this.log("Connection closed"); + } else { + print("Connection died: " + event.code); + this.log(`Connection lost. Retrying in ${this.reconnect_delay / 1000} seconds...`); + } + + this.pairingStatus = "disconnected"; + this.pairedWithId = null; + this.pairedWithType = null; + + // Schedule reconnection + this.scheduleReconnect(); + }; + + this.socket.onerror = (event: WebSocketErrorEvent) => { + print("WebSocket error: " + event); + this.log("Connection error occurred"); + }; + } catch (e) { + print("Error connecting to server: " + e); + this.log(`Connection error: ${e}. Retrying in ${this.reconnect_delay / 1000} seconds...`); + this.scheduleReconnect(); + } + } + + /** + * Schedule a reconnection attempt after the specified delay + */ + private scheduleReconnect() { + // Clear any existing reconnect timer + if (this.reconnectTimer !== null) { + FunctionTimingUtils.clearTimeout(this.reconnectTimer); + } + + // Schedule a reconnection attempt + this.reconnectTimer = FunctionTimingUtils.setTimeout(() => { + this.log(`Attempting to reconnect...`); + this.connectToServer(); + }, this.reconnect_delay); + } + + private async processMessage(data: string | Blob) { + try { + if (data instanceof Blob) { + // Try to unpack the message: [1 byte type][4 bytes payload length][image bytes...] + // data.bytes() is a Promise, so we need to wait for it to resolve + const uint8 = await data.bytes(); + // Wait for the promise to resolve + if (uint8 === null) { + print("Error reading bytes"); + return; + } + const headerSize = 5; // 1 byte type + 4 bytes length + if (uint8.length < headerSize) { + print("header too short"); + return; + } + const view = new DataView(uint8.buffer); + const type = String.fromCharCode(uint8[0]); + const length = view.getUint32(1, false); + if (uint8.length < headerSize + length) { + print("payload length mismatch"); + return; + }; + + const payloadBytes = uint8.slice(headerSize, headerSize + length); + this.handleBytes(type, payloadBytes) + } else { + const message = JSON.parse(data); + // Handle different message types + if (message.type === "status_update") { + this.handleStatusUpdate(message); + } else if (message.type === "ping") { + this.handlePing(message); + } else if (message.type === "robot_status") { + this.handleRobotStatus(message); + } else { + this.log("Unknown message type: " + message); + } + } + } catch (e) { + print("Error processing message: " + e); + } + } + + private handleStatusUpdate(message: any) { + this.pairingStatus = message.status; + + if (message.client_id) { + this.clientId = message.client_id; + } + + if (message.status === "paired") { + const pairedWith = message.paired_with || {}; + this.pairedWithId = pairedWith.id || null; + this.pairedWithType = pairedWith.type || null; + this.log("Paired with " + this.pairedWithType + " (ID: " + this.pairedWithId + ")"); + this.socket.send(JSON.stringify({ + "type": MessageType.ACTION_WAVE // Wave to confirm pairing. + })) + } else if (message.status === "waiting") { + // Record our client ID. + this.clientId = message.client_id; + this.log(`ID: ${this.clientId}\nWaiting: ${message.message}`); + this.pairedWithId = null; + this.pairedWithType = null; + this.simImgController.showStatic(); + } else if (message.status === "disconnected") { + this.log("Disconnected: " + message.message); + this.pairedWithId = null; + this.pairedWithType = null; + this.simImgController.showStatic(); + } + } + + private handlePing(message: any) { + // Respond to ping with pong for latency measurement + if (message.timestamp && this.socket?.readyState === 1) { + this.socket.send(JSON.stringify({ + type: "pong", + ping_timestamp: message.timestamp + })); + } + } + + private handleRobotStatus(message: any) { + // Handle robot status updates (battery, position, etc.) + print("Robot status: Battery=" + message.battery + "%"); + + // Here you could update UI elements displaying robot status + // or use the position/orientation data for visualization + } + + private handleBytes(type: string, payload: Uint8Array) { + if (type === "s") { + // Simulation image data. + this.simImgController.showLiveFeed(payload); + } + } + + private log(message: string) { + this.logs.text = message; + } + + // Public method to check if connected and paired + public isPaired(): boolean { + return this.pairingStatus === "paired" && this.pairedWithId !== null; + } + + /** + * Send a discrete action to the robot. + * @param action The action to send to the robot. + */ + public sendAction(action: ActionMessage) { + if (this.socket?.readyState === 1) { + this.socket.send(JSON.stringify({ + type: action + })); + } + } + + /** + * Send a movement command to the robot. + * @param long Forward/backward movement in meters per second. + * @param lat Lateral movement in meters per second. + * @param yaw Rotation in radians per second. + */ + public sendMovement(long: number, lat: number, yaw: number) { + if (this.socket?.readyState === 1) { + this.socket.send(JSON.stringify({ + type: MessageType.WALK, + long: long, + lat: lat, + yaw: yaw + })); + } + } + + /** + * Send a hand movement command to the robot. + * @param message The hand movement message to send. + */ + public sendHandMovement(movement: HandMovementMessage) { + if (this.socket?.readyState === 1) { + this.socket.send(JSON.stringify(movement)); + } + } + + /** + * Unpair from a robot on the server. + * + * If a robot is currently paired, it will be sent a movement command to stop. + */ + public disconnect() { + if (this.socket?.readyState === 1) { + this.sendMovement(0, 0, 0); + this.socket.send(JSON.stringify({ + type: "unpair" + })); + } + } + + StandUp() { + this.sendAction(MessageType.ACTION_STAND); + } + + SitDown() { + this.sendAction(MessageType.ACTION_SIT); + } + + HighStand() { + this.sendAction(MessageType.ACTION_STAND_HIGH); + } + + LowStand() { + this.sendAction(MessageType.ACTION_STAND_LOW); + } + + ZeroTorque() { + this.sendAction(MessageType.ACTION_ZERO_TORQUE); + } + + WaveHand() { + this.sendAction(MessageType.ACTION_WAVE); + } + + WaveHandTurn() { + this.sendAction(MessageType.ACTION_WAVE_TURN); + } + + ShakeHand() { + this.sendAction(MessageType.ACTION_SHAKE_HAND); + } + + StopDamp() { + this.sendAction(MessageType.ACTION_DAMP); + } + + Quit() { + this.disconnect(); + } +} + +/** + * Maximum forward/backward speed in meters per second. + */ +export const FORWARD_SPEED_MAX = 0.3; +/** + * Maximum lateral speed in meters per second. + */ +export const LATERAL_SPEED_MAX = 0.2; +/** + * Maximum rotation speed in radians per second. + */ +export const ROTATION_SPEED_MAX = 0.6; + +export enum MessageType { + // Incoming messages + STATUS_UPDATE = "status_update", + PING = "ping", + ROBOT_STATUS = "robot_status", + // Outgoing messages + CLIENT_TYPE = "spectacles", + PONG = "pong", + WALK = "walk", + ACTION_STAND = "stand", + ACTION_STAND_LOW = "stand_low", + ACTION_STAND_HIGH = "stand_high", + ACTION_SIT = "sit", + ACTION_WAVE = "wave", + ACTION_WAVE_TURN = "wave_turn", + ACTION_SHAKE_HAND = "shake_hand", + ACTION_ZERO_TORQUE = "zero_torque", + ACTION_DAMP = "damp", + ACTION_SQUAT_TO_STAND = "squat2stand", + ACTION_STAND_TO_SQUAT = "stand2squat", + ACTION_LIE_TO_STAND = "lie2stand", + GESTURE_PINCH_DOWN = "gesture_pinch_down", + GESTURE_PINCH_UP = "gesture_pinch_up", + GESTURE_PINCH_STRENGTH = "gesture_pinch_strength", + GESTURE_PALM_TAP_UP = "gesture_palm_tap_up", + GESTURE_PALM_TAP_DOWN = "gesture_palm_tap_down", + GESTURE_TARGETING = "gesture_targeting", + GESTURE_GRAB_BEGIN = "gesture_grab_begin", + GESTURE_GRAB_END = "gesture_grab_end", + GESTURE_PHONE_IN_HAND_BEGIN = "gesture_phone_in_hand_begin", + GESTURE_PHONE_IN_HAND_END = "gesture_phone_in_hand_end", + HAND_MOVEMENT = "hand_movement", +} + +/** + * Pre-programmed discrete actions that the robot can perform. + */ +type ActionMessage = MessageType.ACTION_STAND | MessageType.ACTION_STAND_LOW | MessageType.ACTION_STAND_HIGH | MessageType.ACTION_SIT | MessageType.ACTION_WAVE | MessageType.ACTION_WAVE_TURN | MessageType.ACTION_SHAKE_HAND | MessageType.ACTION_ZERO_TORQUE | MessageType.ACTION_DAMP; + +/** + * A hand movement message. + */ +export class HandMovementMessage { + readonly type: MessageType.HAND_MOVEMENT = MessageType.HAND_MOVEMENT; + readonly handType: HandType; + readonly timestamp: number = Date.now(); + /** + * Array of wrist transform (4x4 matrix column-major), positions [X,Y,Z] for each finger joint, and finally the head transform (4x4 matrix row-major). + * + * The order is as follows: + * wrist, thumb-0, thumb-1, thumb-2, thumb-3, index-0, index-1, index-2, index-3, middle-0, middle-1, middle-2, middle-3, ring-0, ring-1, ring-2, ring-3, pinky-0, pinky-1, pinky-2, pinky-3, head + */ + readonly transform: number[][]; + + constructor(hand: TrackedHand, headTransform: mat4) { + const keypoints = hand.points; + this.handType = hand.handType; + // Make sure we have all the keypoints. + const missingLandmarks = allLandmarks.flat().filter(l => !keypoints.some(k => k.name === l)); + if (missingLandmarks.length > 0) { + throw new Error(`Missing keypoints with name: ${missingLandmarks.join(", ")}`); + } + // First we need to transform all of the hand keypoints relative to the wrist position and (inverse) rotation + // This way they're wrist-local coordinates as expected by URDF / Pinocchio. + const wrist = keypoints.find(k => k.name === LandmarkName.WRIST); + const wristPos = wrist?.position; + const wristRot = wrist?.rotation; + // Important to filter out the wrist and the wrist-to-fingertip landmarks provided by Snap. + const handPositions = keypoints.filter(k => !wristLandmarks.includes(k.name as LandmarkName)).map(k => { + const relativePos = k.position.sub(wristPos); + const localPos = wristRot.invert().multiplyVec3(relativePos); + return localPos; + }); + this.transform = [ + flat(tr(wristPos, wristRot)), + ...handPositions.map(p => flat(p)), + flat(headTransform) + ]; + } +} diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts.meta new file mode 100644 index 00000000..1500b686 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/CoordinationClient.ts.meta @@ -0,0 +1,44 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 7fa9f4e5-b8c5-4245-a654-0357c26aaddf + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 7fa9f4e5-b8c5-4245-a654-0357c26aaddf + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! 994dba3d-7204-490a-b09b-50623e426fc2 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + img_sim: false + logs: false + serverUrl: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - serverUrl: "wss://spectaclexr.com/ws" + logs: ! 00000000-0000-0000-0000-000000000000 + img_sim: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - '// @input string serverUrl = "wss://spectaclexr.com/ws"' + - // @input Component.Text logs + - // @input Component.Image img_sim diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts new file mode 100644 index 00000000..95085d32 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts @@ -0,0 +1,326 @@ +import { HandInputData } from "SpectaclesInteractionKit/Providers/HandInputData/HandInputData"; +import { CoordinationClient, HandMovementMessage } from "./CoordinationClient"; +import { SIK } from "SpectaclesInteractionKit/SIK"; +import { AllHandTypes } from "SpectaclesInteractionKit/Providers/HandInputData/HandType"; +import TrackedHand from "SpectaclesInteractionKit/Providers/HandInputData/TrackedHand"; +import { HandVisual, HandVisualSelection } from "SpectaclesInteractionKit/Components/Interaction/HandVisual/HandVisual"; +import * as FunctionTimingUtils from "SpectaclesInteractionKit/Utils/debounce"; +import { Keypoint } from "SpectaclesInteractionKit/Providers/HandInputData/Keypoint"; +import { flat } from "Unitree2Spectacles/Scripts/TS/Utils"; +import { LandmarkName, wristLandmarks } from "SpectaclesInteractionKit/Providers/HandInputData/LandmarkNames"; + + +declare global { + interface mat4 { + // Returns the up vector of the matrix. + up(): vec3; + // Returns the down vector of the matrix. + down(): vec3; + // Returns the left vector of the matrix. + left(): vec3; + // Returns the right vector of the matrix. + right(): vec3; + // Returns the forward vector of the matrix. + forward(): vec3; + // Returns the back vector of the matrix. + back(): vec3; + // Construct from a 4x4 number[][]. + fromArray(numbers: number[][]): mat4; + } + + interface mat3 { + // Construct from a 3x3 number[][]. + fromArray(numbers: number[][]): mat3; + } +} + +mat4.prototype.up = function () { + return new vec3(this.column0.x, this.column0.y, this.column0.z); +} + +mat4.prototype.down = function () { + return new vec3(-this.column0.x, -this.column0.y, -this.column0.z); +} + +mat4.prototype.left = function () { + return new vec3(this.column1.x, this.column1.y, this.column1.z); +} + +mat4.prototype.right = function () { + return new vec3(-this.column1.x, -this.column1.y, -this.column1.z); +} + +mat4.prototype.forward = function () { + return new vec3(this.column2.x, this.column2.y, this.column2.z); +} + +mat4.prototype.back = function () { + return new vec3(-this.column2.x, -this.column2.y, -this.column2.z); +} + +mat4.prototype.fromArray = function (numbers: number[][]): mat4 { + let m = new mat4(); + if (!numbers || numbers.length !== 4 || numbers[0].length !== 4) { + throw new Error("Invalid matrix size, expected 4x4"); + } + let [c0, c1, c2, c3] = numbers.map((r) => new vec4(r[0], r[1], r[2], r[3])); + m.column0 = c0; + m.column1 = c1; + m.column2 = c2; + m.column3 = c3; + return m; +} + +mat3.prototype.fromArray = function (numbers: number[][]): mat3 { + let m = new mat3(); + if (!numbers || numbers.length !== 3 || numbers[0].length !== 3) { + throw new Error("Invalid matrix size, expected 3x3"); + } + let [c0, c1, c2] = numbers.map((r) => new vec3(r[0], r[1], r[2])); + m.column0 = c0; + m.column1 = c1; + m.column2 = c2; + return m; +} + +@component +export class HandControl extends BaseScriptComponent { + public enabled = false; + private gestureModule: GestureModule = require("LensStudio:GestureModule"); + private handInputData: HandInputData; + private rightHand: TrackedHand; + private leftHand: TrackedHand; + private trackingTimeout: FunctionTimingUtils.CancelToken; + private trackingInterval = 32; // About 30 FPS + private axesMap: Map = new Map(); + private axesUpdateTimeout: FunctionTimingUtils.CancelToken; + private axesUpdateInterval = 16; // About 60 FPS + + @input + private camera: Camera; + @input + private handTrackingStatus: Text; + @input + private tempLog: Text; + @input + private axesSceneObject: SceneObject; + @input('Component.ScriptComponent') + private coordinationClient: CoordinationClient; + + async onAwake() { + try { + this.enabled = false; + this.handInputData = SIK.HandInputData; + this.leftHand = this.handInputData.getHand("left"); + this.leftHand.setTrackingMode(ObjectTracking3D.TrackingMode.ProportionsAndPose); + this.rightHand = this.handInputData.getHand("right"); + this.rightHand.setTrackingMode(ObjectTracking3D.TrackingMode.ProportionsAndPose); + this.handTrackingStatus.text = "Hand Tracking: Disabled"; + this.gestureModule.getPalmTapDownEvent(GestureModule.HandType.Right).add(() => { + this.enabled = !this.enabled; + this.handTrackingStatus.text = this.enabled ? "Hand Tracking: Enabled" : "Hand Tracking: Disabled"; + + if (this.enabled) { + // Start periodic tracking when enabled + this.sendHandUpdates(); + } else { + // Clear the timeout when disabled + if (this.trackingTimeout) { + FunctionTimingUtils.clearTimeout(this.trackingTimeout); + } + } + }); + + this.createAxes("head"); + Promise.all([ + this.createHandAxes(this.leftHand), + this.createHandAxes(this.rightHand) + ]).then(() => { + this.startAxesUpdates(this.leftHand, this.rightHand); + }).catch((error) => { + this.log("Error creating axes: " + error + " " + error.stack); + }); + this.log("HandControl initialized"); + } catch (error) { + this.handTrackingStatus.text = "Error: " + error + " " + error.stack; + this.log("Error: " + error + " " + error.stack); + } + } + + /** + * Update the keypoints of the hands + */ + private sendHandUpdates() { + if (this.enabled) { + try { + if (this.leftHand.isTracked()) { + const movement = new HandMovementMessage(this.leftHand, this.camera.getTransform().getWorldTransform()); + this.coordinationClient.sendHandMovement(movement); + } + if (this.rightHand.isTracked()) { + const movement = new HandMovementMessage(this.rightHand, this.camera.getTransform().getWorldTransform()); + this.coordinationClient.sendHandMovement(movement); + } + + // Schedule the next update + this.trackingTimeout = FunctionTimingUtils.setTimeout(() => { + this.sendHandUpdates(); + }, this.trackingInterval); + + } catch (error) { + this.handTrackingStatus.text = "Error: " + error + " " + error.stack; + this.log("Error: " + error + " " + error.stack); + } + } + } + + /** + * Create axes for the keypoints of the hands + */ + private async createHandAxes(hand: TrackedHand): Promise { + if (!hand?.isTracked() || !hand?.points || hand.points.length === 0) { + this.log(`${hand.handType} is not tracked, waiting to set up axes...`); + return new Promise((resolve) => { + FunctionTimingUtils.setTimeout(async () => { + const result = await this.createHandAxes(hand); + resolve(result); + }, 1000); + }); + } + const keypoints = this.filterKeypoints(hand.points); + for (let i = 0; i < keypoints.length; i++) { + const keypoint = keypoints[i]; + let sceneObjectName = `${hand.handType}_${keypoint.name}`; + this.createAxes(sceneObjectName); + } + } + + /** + * Create axes scene objects and mesh builders. + * @param name The name of the axes to create + */ + private createAxes(name: string) { + let axes = this.axesSceneObject.getParent().copySceneObject(this.axesSceneObject); + axes.name = name; + let meshBuilder = new MeshBuilder([ + { name: "position", components: 3 }, + { name: "color", components: 4 }, + ]); + meshBuilder.topology = MeshTopology.Lines; + meshBuilder.indexType = MeshIndexType.UInt16; + this.axesMap.set(name, [axes, meshBuilder]); + } + + /** + * Start the axes update cycle + */ + private startAxesUpdates(left: TrackedHand, right: TrackedHand) { + const updateLoop = () => { + try { + this.updateAxes(); // Update the head axis. + if (left.isTracked()) this.updateAxes(left); + if (right.isTracked()) this.updateAxes(right); + } catch (error) { + this.log("Error updating axes: " + error + " " + error.stack); + } + this.axesUpdateTimeout = FunctionTimingUtils.setTimeout(updateLoop, this.axesUpdateInterval); + }; + updateLoop(); + } + + /** + * Update the axes for a given hand. + * @param hand The hand to update the axes for. + */ + private updateAxes(hand: TrackedHand | null = null) { + if (hand !== null && hand?.isTracked()) { + try { + this.filterKeypoints(hand.points).forEach((k) => { + let sceneObjectName = `${hand.handType}_${k.name}`; + let [sceneObject, meshBuilder] = this.axesMap.get(sceneObjectName); + let transform = k.getAttachmentPoint().getTransform(); + + this.updateMesh(meshBuilder, sceneObject, transform); + }); + } catch (error) { + this.log("Error updating axes: " + error + " " + error.stack); + } + } + } + + private updateMesh(meshBuilder: MeshBuilder, sceneObject: SceneObject, transform: Transform) { + if (meshBuilder !== undefined && sceneObject !== undefined) { + let v = meshBuilder.getVerticesCount(); + let i = meshBuilder.getIndicesCount(); + + let origin = transform.getWorldPosition(); + + let length = 1; + + let RIGHT = origin.add(transform.getWorldTransform().right().normalize().uniformScale(length)); + let UP = origin.add(transform.getWorldTransform().up().normalize().uniformScale(length)); + let BACK = origin.add(transform.getWorldTransform().back().normalize().uniformScale(length)); + + let red = [1, 0, 0, 1]; + let green = [0, 1, 0, 1]; + let blue = [0, 0, 1, 1]; + + let x = [ + origin, RIGHT + ].map((v) => flat(v).concat(red)); + + let y = [ + origin, UP + ].map((v) => flat(v).concat(green)); + + let z = [ + origin, BACK + ].map((v) => flat(v).concat(blue)); + + let vertices = [ + x, + y, + z + ].flat(); + + let indices = [0, 1, 2, 3, 4, 5]; + + if (i === 0 && v === 0) { + // First time creating the mesh + meshBuilder.appendVerticesInterleaved(vertices.flat()); + meshBuilder.appendIndices(indices); + } else { + for (let i = 0; i < vertices.length; i++) { + meshBuilder.setVertexInterleaved(i, vertices[i]); + } + } + if (meshBuilder.isValid()) { + sceneObject.getComponent("Component.RenderMeshVisual").mesh = meshBuilder.getMesh(); + meshBuilder.updateMesh(); + } else { + this.log("MeshBuilder is not valid"); + } + } + } + + private log(message: string) { + Studio.log(message); + if (this.tempLog) { + // Limit lines to 10 + let lines = this.tempLog.text.split("\n"); + if (lines.length > 10) { + lines = lines.slice(1); + } + lines.push(`${getTime().toFixed(2)}: ${message}`); + this.tempLog.text = lines.join("\n"); + } + } + + /** + * Filter out the wrist-to-* keypoints from the list of keypoints. + * @param keypoints The keypoints to filter + */ + private filterKeypoints(keypoints: Keypoint[]): Keypoint[] { + return keypoints.filter(k => !wristLandmarks.includes(k.name as LandmarkName) || k.name === LandmarkName.WRIST); + } +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts.meta new file mode 100644 index 00000000..4ba5f5e8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/HandControl.ts.meta @@ -0,0 +1,50 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! bf0dcaf4-1705-45b7-9755-24fab97ebdb4 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! bf0dcaf4-1705-45b7-9755-24fab97ebdb4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! a7aaa04f-5dd7-4b2e-a7bc-6104d1740e1f + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + axesSceneObject: false + camera: false + coordinationClient: false + handTrackingStatus: false + tempLog: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - handTrackingStatus: ! 00000000-0000-0000-0000-000000000000 + camera: ! 00000000-0000-0000-0000-000000000000 + coordinationClient: ! 00000000-0000-0000-0000-000000000000 + axesSceneObject: ! 00000000-0000-0000-0000-000000000000 + tempLog: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input Component.Camera camera + - // @input Component.Text handTrackingStatus + - // @input Component.Text tempLog + - // @input SceneObject axesSceneObject + - // @input Component.ScriptComponent coordinationClient diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts new file mode 100644 index 00000000..8af3505b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts @@ -0,0 +1,20 @@ +@component +export class JoystickToggle extends BaseScriptComponent { + + @input joystick: SceneObject + @input joystickPlane: SceneObject + + awake() { + this.joystickPlane.enabled = false; + this.joystick.enabled = false; + } + + // Function to toggle the world query's enabled state + toggleJoystick() { + print("Toggle function called!"); + // If currently enabled, disable it; if disabled, enable it + this.joystick.enabled = !this.joystick.enabled; + this.joystickPlane.enabled = !this.joystickPlane.enabled; + } + +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts.meta new file mode 100644 index 00000000..3e95fb21 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/JoystickToggle.ts.meta @@ -0,0 +1,41 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 8bcd5be4-b37d-4c4f-805f-127ba98222d3 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 8bcd5be4-b37d-4c4f-805f-127ba98222d3 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! 229cda1c-d38e-421f-8928-b9b2417d73bd + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + joystick: false + joystickPlane: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - joystick: ! 00000000-0000-0000-0000-000000000000 + joystickPlane: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input SceneObject joystick + - // @input SceneObject joystickPlane diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts new file mode 100644 index 00000000..2cbbda90 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts @@ -0,0 +1,238 @@ +import { Interactable } from "SpectaclesInteractionKit/Components/Interaction/Interactable/Interactable"; +import { CoordinationClient } from "./CoordinationClient"; + +@component +export class RobotDecoyController extends BaseScriptComponent { + @input robotDecoy: SceneObject; + @input mainCamera: Camera; + @input toggleButton: SceneObject; + @input connectToRobot: boolean = false; + + @input moveSpeedTitle: Text; + @input rotationSpeedTitle: Text; + + @input('Component.ScriptComponent') + private coordinationClient: CoordinationClient; + + private decoyMovementSpeed: number = 100.0; + private decoyRotationSpeed: number = 1.0; + + private interactor: Interactable; + private targetPosition: vec3 = null; + private isMoving: boolean = false; + private movementPhase: 'rotating' | 'moving' | 'idle' = 'idle'; + private updateEvent; + private targetMovement: boolean = false; + + onAwake() { + this.createEvent('OnStartEvent').bind(() => { + this.onStart(); + }); + } + + onStart() { + this.interactor = this.toggleButton.getComponent(Interactable.getTypeName()); + this.interactor.onTriggerEnd.add(this.toggleDecoy.bind(this)); + + this.updateEvent = this.createEvent("UpdateEvent"); + this.updateEvent.bind(this.processMovement.bind(this)); + } + + public sendNewPositionToDecoy(targetPosition: vec3) { + // prevent sending new position to robot if decoy not enabled + if (!this.robotDecoy || !this.robotDecoy.enabled || this.targetMovement) { + return; + } + this.targetPosition = targetPosition; + this.movementPhase = 'rotating'; + this.isMoving = true; + } + + sendMovement(decoyLong: number, decoyLat: number, decoyYaw: number, + realLong: number, realLat: number, realYaw: number, + deltaTime?: number) { + + if (!this.robotDecoy || !this.robotDecoy.enabled || this.targetMovement) { + return; + } + + // Compute final actual movement for decoy inside sendMovement + const dt = deltaTime === undefined ? 1.0 : deltaTime; + + const finalDecoyLong = decoyLong * this.decoyMovementSpeed * dt; + const finalDecoyLat = decoyLat * this.decoyMovementSpeed * dt; + const finalDecoyYaw = decoyYaw * this.decoyRotationSpeed * dt; + + // If connected, call the real robot exactly once: + if (this.connectToRobot) { + const scaledLong = realLong; + const scaledLat = realLat; + const scaledYaw = realYaw; + + // print("[sendMovement] Real Robot -> long=" + scaledLong.toFixed(3) + // + ", lat=" + scaledLat.toFixed(3) + // + ", yaw=" + scaledYaw.toFixed(3)); + this.coordinationClient.sendMovement(scaledLong, scaledLat, scaledYaw); + } + + // === Decoy movement === + // print("[sendMovement] Decoy -> long=" + decoyLong.toFixed(3) + // + ", lat=" + decoyLat.toFixed(3) + // + ", yaw=" + decoyYaw.toFixed(3)); + + const robotTransform = this.robotDecoy.getTransform(); + const currentPosition = robotTransform.getWorldPosition(); + const currentRotation = robotTransform.getWorldRotation(); + + // Yaw rotation + if (finalDecoyYaw !== 0) { + const yawRotation = quat.angleAxis(finalDecoyYaw, new vec3(0, 1, 0)); + const newRotation = currentRotation.multiply(yawRotation); + robotTransform.setWorldRotation(newRotation); + } + + // Forward/backward + if (finalDecoyLong !== 0) { + const forward = robotTransform.forward; + const movement = new vec3(forward.x * finalDecoyLong, 0, forward.z * finalDecoyLong); + const newPosition = currentPosition.add(movement); + if (this.targetPosition) { + newPosition.y = this.targetPosition.y; + } + robotTransform.setWorldPosition(newPosition); + } + + // Lateral + if (finalDecoyLat !== 0) { + const right = robotTransform.right; + const movement = new vec3(right.x * finalDecoyLat, 0, right.z * finalDecoyLat); + const newPosition = currentPosition.add(movement); + if (this.targetPosition) { + newPosition.y = this.targetPosition.y; + } + robotTransform.setWorldPosition(newPosition); + } + } + + processMovement(eventData: UpdateEvent) { + if (!this.isMoving || !this.targetPosition || !this.robotDecoy || !this.robotDecoy.enabled) return; + const deltaTime = eventData.getDeltaTime(); + + const robotTransform = this.robotDecoy.getTransform(); + const robotPosition = robotTransform.getWorldPosition(); + + if (this.movementPhase === 'rotating') { + const directionToTarget = new vec3( + this.targetPosition.x - robotPosition.x, + 0, + this.targetPosition.z - robotPosition.z + ).normalize(); + + const forward = robotTransform.forward; + const currentForward = new vec3( + forward.x, + 0, + forward.z + ).normalize(); + + const dot = currentForward.dot(directionToTarget); + const clampedDot = Math.max(Math.min(dot, 1.0), -1.0); + const angle = Math.acos(clampedDot); + + const cross = currentForward.cross(directionToTarget); + const rotationDirection = cross.y > 0 ? 1 : -1; + + const rotationThreshold = 0.05; + + if (angle < rotationThreshold) { + this.movementPhase = 'moving'; + this.sendMovement(0, 0, 0, 0, 0, 0, 1.0); + + const lookDirection = new vec3( + this.targetPosition.x - robotPosition.x, + 0, + this.targetPosition.z - robotPosition.z + ).normalize(); + + const worldForward = new vec3(0, 0, 1); + const dotProduct = worldForward.dot(lookDirection); + const exactAngle = Math.acos(Math.max(Math.min(dotProduct, 1), -1)); + + const exactCross = worldForward.cross(lookDirection); + const exactRotationDirection = exactCross.y >= 0 ? 1 : -1; + + const exactRotation = quat.angleAxis(exactAngle * exactRotationDirection, new vec3(0, 1, 0)); + + robotTransform.setWorldRotation(exactRotation); + } else { + const baseRotationSpeed = this.decoyRotationSpeed; + const angleRatio = Math.min(angle / (Math.PI / 4), 1.0); + const adjustedRotationSpeed = baseRotationSpeed * angleRatio; + + // Single call for both decoy + real robot + this.sendMovement( + 0, 0, rotationDirection * 1.0, // decoy + 0, 0, rotationDirection * 1.0, // real + deltaTime + ); + } + } else if (this.movementPhase === 'moving') { + const xzDistance = Math.sqrt( + Math.pow(this.targetPosition.x - robotPosition.x, 2) + + Math.pow(this.targetPosition.z - robotPosition.z, 2) + ); + + // print("Current position (x,z): " + robotPosition.x + ", " + robotPosition.z); + // print("Distance to target XZ = " + xzDistance); + + const arrivalThreshold = 2.0; + + if (xzDistance < arrivalThreshold) { + this.sendMovement( + 0, 0, 0, // decoy + 0, 0, 0, // real + 1.0 + ); + this.movementPhase = 'idle'; + this.isMoving = false; + } else { + this.sendMovement( + 1.0, 0, 0, // decoy logs as "1.000" + 1.0, 0, 0, // real + deltaTime + ); + } + } + } + + instanciateRobot() { + var cameraTransform = this.mainCamera.getTransform(); + this.robotDecoy.getTransform().setWorldPosition(cameraTransform.getWorldPosition()); + + const cameraForward = cameraTransform.forward; + const horizontalForward = new vec3(cameraForward.x, 0, cameraForward.z).normalize(); + const worldUp = new vec3(0, 1, 0); + const rotation = quat.lookAt(horizontalForward, worldUp); + + this.robotDecoy.getTransform().setWorldRotation(rotation); + } + + toggleDecoy() { + this.instanciateRobot(); + this.robotDecoy.enabled = !this.robotDecoy.enabled; + } + + public updateMoveSpeed(value: number) { + this.moveSpeedTitle.text = "Movement Speed: " + value.toString(); + this.decoyMovementSpeed = value * 100.0; + } + + public updateRotationSpeed(value: number) { + this.rotationSpeedTitle.text = "Rotation speed: " + value.toString(); + this.decoyRotationSpeed = value; + } + + public toggleTargetMovement() { + this.targetMovement = !this.targetMovement; + } +} diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts.meta new file mode 100644 index 00000000..555824df --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/RobotDecoyController.ts.meta @@ -0,0 +1,56 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! ed8de5e7-d591-4775-8fe0-e8285af6851a + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ed8de5e7-d591-4775-8fe0-e8285af6851a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! 328594c1-74b4-4454-bd86-29cb18c96b3a + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + connectToRobot: false + coordinationClient: false + mainCamera: false + moveSpeedTitle: false + robotDecoy: false + rotationSpeedTitle: false + toggleButton: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - robotDecoy: ! 00000000-0000-0000-0000-000000000000 + mainCamera: ! 00000000-0000-0000-0000-000000000000 + toggleButton: ! 00000000-0000-0000-0000-000000000000 + connectToRobot: false + moveSpeedTitle: ! 00000000-0000-0000-0000-000000000000 + rotationSpeedTitle: ! 00000000-0000-0000-0000-000000000000 + coordinationClient: ! 00000000-0000-0000-0000-000000000000 + ScriptTypes: + - + {} + InputLines: + - // @input SceneObject robotDecoy + - // @input Component.Camera mainCamera + - // @input SceneObject toggleButton + - // @input bool connectToRobot + - // @input Component.Text moveSpeedTitle + - // @input Component.Text rotationSpeedTitle + - // @input Component.ScriptComponent coordinationClient diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts new file mode 100644 index 00000000..b409c152 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts @@ -0,0 +1,112 @@ +import * as FunctionTimingUtils from "SpectaclesInteractionKit/Utils/debounce"; + +/** + * Controller for the simulation image display + * Handles transitions between static and live feed + */ +export class SimulationImageController { + private image: Image; + private staticTextures: Texture[] = []; + private staticAnimationToken: ReturnType = null; + private isStatic: boolean = false; + private currentStaticFrame: number = 0; + private static STATIC_REFRESH_RATE: number = 100; // ms + private static STATIC_FRAME_COUNT: number = 8; // Number of precomputed static frames + + /** + * Creates a new simulation image controller + * @param image The image component to control + */ + constructor(image: Image) { + if (!image) { + throw new Error("SimulationImageController requires a valid Image component"); + } + this.image = image; + this.generateStaticFrames(); + this.showStatic(); + } + + /** + * Generate all static frames in advance + */ + private generateStaticFrames(): void { + const width = 512; + const height = 512; + + for (let frame = 0; frame < SimulationImageController.STATIC_FRAME_COUNT; frame++) { + const texture = ProceduralTextureProvider.create(width, height, Colorspace.RGBA); + const pixels = new Uint8Array(width * height * 4); + + // Fill with random static noise + for (let i = 0; i < pixels.length; i += 4) { + const value = Math.floor(Math.random() * 255); + pixels[i] = value; // R + pixels[i + 1] = value; // G + pixels[i + 2] = value; // B + pixels[i + 3] = 200; // A (some transparency) + } + + (texture.control as ProceduralTextureProvider).setPixels(0, 0, width, height, pixels); + this.staticTextures.push(texture); + } + } + + /** + * Display static noise on the image + */ + public showStatic(): void { + if (this.isStatic) return; + + this.isStatic = true; + this.currentStaticFrame = 0; + this.image.mainPass.baseTex = this.staticTextures[this.currentStaticFrame]; + this.startStaticAnimation(); + } + + /** + * Display a live feed image on the display + * @param data Image data to display + */ + public showLiveFeed(data: Uint8Array): void { + this.stopStaticAnimation(); + this.isStatic = false; + + const texture = ProceduralTextureProvider.create(512, 512, Colorspace.RGBA); + (texture.control as ProceduralTextureProvider).setPixels(0, 0, 512, 512, data); + this.image.mainPass.baseTex = texture; + } + + /** + * Start animating the static texture + */ + private startStaticAnimation(): void { + this.stopStaticAnimation(); + + this.staticAnimationToken = FunctionTimingUtils.setTimeout(() => { + if (this.isStatic) { + // Cycle through precomputed static frames + this.currentStaticFrame = (this.currentStaticFrame + 1) % SimulationImageController.STATIC_FRAME_COUNT; + this.image.mainPass.baseTex = this.staticTextures[this.currentStaticFrame]; + this.startStaticAnimation(); + } + }, SimulationImageController.STATIC_REFRESH_RATE); + } + + /** + * Stop the static animation + */ + private stopStaticAnimation(): void { + if (this.staticAnimationToken !== null) { + FunctionTimingUtils.clearTimeout(this.staticAnimationToken); + this.staticAnimationToken = null; + } + } + + /** + * Clean up resources + */ + public dispose(): void { + this.stopStaticAnimation(); + this.staticTextures = []; + } +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts.meta new file mode 100644 index 00000000..5d054266 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SimulationImage.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! ab0a1f33-d53a-474f-956a-ace3c55cd333 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! ab0a1f33-d53a-474f-956a-ace3c55cd333 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! ee34721d-38ba-4069-b7a5-60a8f5de23ab + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts new file mode 100644 index 00000000..14bf8133 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts @@ -0,0 +1,321 @@ +import { RobotDecoyController } from "./RobotDecoyController"; + +const WorldQueryModule = require("LensStudio:WorldQueryModule") +const SIK = require("SpectaclesInteractionKit/SIK").SIK; +const InteractorTriggerType = require("SpectaclesInteractionKit/Core/Interactor/Interactor").InteractorTriggerType; +const EPSILON = 0.01; + + +@component +export class SingleObjectRaycaster extends BaseScriptComponent { + private primaryInteractor; + private hitTestSession: HitTestSession; + private transform: Transform; + private targetInstance: SceneObject = null; + + @input + targetObject: ObjectPrefab; + + @input + objectToSpawn: ObjectPrefab; + + @input + filterEnabled: boolean; + + @input + isEnabled: boolean = true; // New bool to enable/disable functionality + + @input('Component.ScriptComponent') + decoyController: any; + + // For some reason changing the type of the above to RobotDecoyController -- or even just adding a commment to that line -- will cause the Lens to crash + + @input + objectsToCheck: SceneObject[]; + + private spawnedObject: SceneObject = null; + private hasSpawned: boolean = false; + private updateEvent; + private intersectingObjects: SceneObject[] = []; + private isIntersectingWithOther: boolean = false; + + onAwake() { + // create new hit session + this.hitTestSession = this.createHitTestSession(this.filterEnabled); + if (!this.targetObject) { + print("Please set Target Object input"); + return; + } + + // Instantiate the target object from prefab with no parent (same as objectToSpawn) + this.targetInstance = this.targetObject.instantiate(null); + this.transform = this.targetInstance.getTransform(); + + // disable target object when surface is not detected + this.targetInstance.enabled = false; + + // create update event + this.updateEvent = this.createEvent("UpdateEvent"); + this.updateEvent.bind(this.onUpdate.bind(this)); + } + + createHitTestSession(filterEnabled) { + // create hit test session with options + var options = HitTestSessionOptions.create(); + options.filter = filterEnabled; + + var session = WorldQueryModule.createHitTestSessionWithOptions(options); + return session; + } + + onHitTestResult(results) { + if (!this.isEnabled) { + this.targetInstance.enabled = false; + return; + } + + if (results === null || this.isIntersectingWithOther) { + this.targetInstance.enabled = false; + } else { + this.targetInstance.enabled = true; + // get hit information + const hitPosition = results.position; + const hitNormal = results.normal; + + //identifying the direction the object should look at based on the normal of the hit location. + var lookDirection; + if (1 - Math.abs(hitNormal.normalize().dot(vec3.up())) < EPSILON) { + lookDirection = vec3.forward(); + } else { + lookDirection = hitNormal.cross(vec3.up()); + } + + const toRotation = quat.lookAt(lookDirection, hitNormal); + //set position and rotation + this.transform.setWorldPosition(hitPosition); + this.transform.setWorldRotation(toRotation); + + // Only spawn or move on trigger release (click/tap) + if ( + this.primaryInteractor.previousTrigger !== InteractorTriggerType.None && + this.primaryInteractor.currentTrigger === InteractorTriggerType.None + ) { + if (!this.hasSpawned) { + // First time spawning - instantiate from prefab + this.spawnedObject = this.objectToSpawn.instantiate(null); + this.spawnedObject.getTransform().setWorldPosition(hitPosition); + this.spawnedObject.getTransform().setWorldRotation(toRotation); + this.hasSpawned = true; + // Call the decoy controller to update the robot's position + if (this.decoyController) { + this.decoyController.sendNewPositionToDecoy(hitPosition); + } + } else { + // Already spawned, just move the existing object on click + if (this.spawnedObject) { + this.spawnedObject.getTransform().setWorldPosition(hitPosition); + this.spawnedObject.getTransform().setWorldRotation(toRotation); + } + // Call the decoy controller to update the robot's position + if (this.decoyController) { + this.decoyController.sendNewPositionToDecoy(hitPosition); + } + } + } + } + } + + onUpdate() { + if (!this.isEnabled) { + this.targetInstance.enabled = false; + return; + } + + this.primaryInteractor = SIK.InteractionManager.getTargetingInteractors().shift(); + + if (this.primaryInteractor && + this.primaryInteractor.isActive() && + this.primaryInteractor.isTargeting() + ) { + const rayStartOffset = new vec3(this.primaryInteractor.startPoint.x, this.primaryInteractor.startPoint.y, this.primaryInteractor.startPoint.z + 30); + const rayStart = rayStartOffset; + const rayEnd = this.primaryInteractor.endPoint; + + // Clear previous intersections + this.intersectingObjects = []; + + // Check for objects intersecting with the ray + if (this.objectsToCheck && this.objectsToCheck.length > 0) { + this.checkRayIntersections(rayStart, rayEnd); + } else { + print("[SingleObjectRaycaster] No objects to check for intersection"); + } + + this.hitTestSession.hitTest(rayStart, rayEnd, this.onHitTestResult.bind(this)); + } else { + this.targetInstance.enabled = false; + } + } + + // Method to reset the spawned object if needed + resetSpawnedObject() { + if (this.spawnedObject) { + this.spawnedObject.destroy(); + this.spawnedObject = null; + this.hasSpawned = false; + } + } + + // Function to enable or disable the functionality + setEnabled(enabled: boolean) { + this.isEnabled = enabled; + + if (!enabled) { + // Hide the target instance when disabled + this.targetInstance.enabled = false; + } + } + + // Function to toggle the enabled status + toggleEnabled() { + this.isEnabled = !this.isEnabled; + + if (!this.isEnabled) { + // Hide the target instance when disabled + this.targetInstance.enabled = false; + } + + return this.isEnabled; // Return the new status if needed + } + + // Check if a ray intersects with a plane centered at each object's position + checkRayIntersections(rayStart: vec3, rayEnd: vec3) { + // Direction of the ray + const rayDirection = rayEnd.sub(rayStart).normalize(); + const rayLength = rayEnd.distance(rayStart); + + // Reset the intersecting objects array + this.intersectingObjects = []; + + // Check each object in the objectsToCheck array + for (let i = 0; i < this.objectsToCheck.length; i++) { + const object = this.objectsToCheck[i]; + if (!object || !object.enabled) { + continue; + } + + // Get object's transform + const objectTransform = object.getTransform(); + const objectPosition = objectTransform.getWorldPosition(); + const objectRotation = objectTransform.getWorldRotation(); + + // Define the plane normal based on the object's rotation (using forward vector) + let planeNormal = vec3.forward(); + planeNormal = objectRotation.multiplyVec3(planeNormal); + planeNormal = planeNormal.normalize(); + + // Calculate the dot product of ray direction and plane normal + let dirDotNormal = rayDirection.x * planeNormal.x; + dirDotNormal += rayDirection.y * planeNormal.y; + dirDotNormal += rayDirection.z * planeNormal.z; + + // Check if ray is parallel to the plane (or nearly parallel) + if (Math.abs(dirDotNormal) < 0.0001) { + // Ray is parallel to the plane, no intersection + continue; + } + + // Calculate the vector from ray start to plane point + const toPlane = new vec3( + objectPosition.x - rayStart.x, + objectPosition.y - rayStart.y, + objectPosition.z - rayStart.z + ); + + // Calculate the dot product of toPlane and plane normal + let planeDotNormal = toPlane.x * planeNormal.x; + planeDotNormal += toPlane.y * planeNormal.y; + planeDotNormal += toPlane.z * planeNormal.z; + + // Calculate the distance along the ray to the intersection point + const t = planeDotNormal / dirDotNormal; + + // Check if intersection is within the ray segment + if (t >= 0 && t <= rayLength) { + // Calculate the intersection point + const intersectionPoint = new vec3( + rayStart.x + rayDirection.x * t, + rayStart.y + rayDirection.y * t, + rayStart.z + rayDirection.z * t + ); + + // Check if the intersection point is within a rectangular area on the plane + const objectScale = objectTransform.getWorldScale(); + + // Define half-width and half-height of the rectangle + const halfWidth = objectScale.x * 0.65; // 65% of the object's width + const halfHeight = objectScale.y * 0.65; // 65% of the object's height + + // Calculate the vector from object position to intersection point + const toIntersection = new vec3( + intersectionPoint.x - objectPosition.x, + intersectionPoint.y - objectPosition.y, + intersectionPoint.z - objectPosition.z + ); + + // Calculate the component of toIntersection along the normal (perpendicular to plane) + let normalComponent = toIntersection.x * planeNormal.x; + normalComponent += toIntersection.y * planeNormal.y; + normalComponent += toIntersection.z * planeNormal.z; + + // Calculate the vector along the normal + const normalVector = new vec3( + planeNormal.x * normalComponent, + planeNormal.y * normalComponent, + planeNormal.z * normalComponent + ); + + // Calculate the component on the plane + const planeComponent = new vec3( + toIntersection.x - normalVector.x, + toIntersection.y - normalVector.y, + toIntersection.z - normalVector.z + ); + + // Get the right vector (x-axis) of the object + const rightVector = objectRotation.multiplyVec3(vec3.right()).normalize(); + + // Get the up vector (y-axis) of the object + const upVector = objectRotation.multiplyVec3(vec3.up()).normalize(); + + // Project the plane component onto the right and up vectors to get local x and y coordinates + let localX = planeComponent.x * rightVector.x; + localX += planeComponent.y * rightVector.y; + localX += planeComponent.z * rightVector.z; + + let localY = planeComponent.x * upVector.x; + localY += planeComponent.y * upVector.y; + localY += planeComponent.z * upVector.z; + + // Check if the point is within the rectangle + if (Math.abs(localX) <= halfWidth && Math.abs(localY) <= halfHeight) { + // We have a hit within the rectangular area of the plane + this.intersectingObjects.push(object); + print("[RayIntersection] PLANE HIT: " + object.name + " at distance " + t); + } + } + } + + this.isIntersectingWithOther = false; + if (this.intersectingObjects.length > 0) { + this.isIntersectingWithOther = true; + print("[RayIntersection] Found " + this.intersectingObjects.length + " intersecting objects"); + } + return this.intersectingObjects; + } + + // Get the list of objects currently intersecting with the ray + getIntersectingObjects(): SceneObject[] { + return this.intersectingObjects; + } +} diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts.meta new file mode 100644 index 00000000..61cc7542 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/SingleObjectRaycaster.ts.meta @@ -0,0 +1,54 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 4a953906-5131-40bb-8522-f05a0d213b4f + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4a953906-5131-40bb-8522-f05a0d213b4f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! 375fedea-e7d9-43cc-887c-7a1974328630 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + decoyController: false + filterEnabled: false + isEnabled: false + objectToSpawn: false + objectsToCheck: false + targetObject: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - targetObject: ! 00000000-0000-0000-0000-000000000000 + objectToSpawn: ! 00000000-0000-0000-0000-000000000000 + filterEnabled: false + isEnabled: true + decoyController: ! 00000000-0000-0000-0000-000000000000 + objectsToCheck: ! + [] + ScriptTypes: + - + {} + InputLines: + - // @input Asset.ObjectPrefab targetObject + - // @input Asset.ObjectPrefab objectToSpawn + - // @input bool filterEnabled + - // @input bool isEnabled = true + - // @input Component.ScriptComponent decoyController + - "// @input SceneObject[] objectsToCheck" diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts new file mode 100644 index 00000000..60b59f33 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts @@ -0,0 +1,63 @@ +/** + * Flatten a vec3, quat, or mat4. + * @param data The data to flatten. Can be a vec3, quat, or mat4. + * @returns Flattened array of numbers. + */ +export function flat(data: vec3 | vec4 | quat | mat4): number[] { + if (data instanceof vec3) { + return [data.x, data.y, data.z]; + } else if (data instanceof quat) { + return [data.x, data.y, data.z, data.w]; + } else if (data instanceof vec4) { + return [data.x, data.y, data.z, data.w]; + } else if (data instanceof mat4) { + return [data.column0, data.column1, data.column2, data.column3].flatMap(c => flat(c)); + } + throw new Error("Unknown type"); +} + +/** + * Create a 4x4 homogeneous transformation matrix from a position and rotation. + * @param pos Position of the transform. + * @param rot Rotation of the transform. + * @returns A 4x4 transformation matrix. + */ +export function tr(pos: vec3, rot: quat): mat4 { + // Create a new matrix + const matrix = new mat4(); + // Extract quaternion components + const x = rot.x; + const y = rot.y; + const z = rot.z; + const w = rot.w; + // Calculate rotation matrix components + // First column + matrix.column0 = new vec4( + 1 - 2 * (y * y + z * z), + 2 * (x * y + w * z), + 2 * (x * z - w * y), + 0 + ); + // Second column + matrix.column1 = new vec4( + 2 * (x * y - w * z), + 1 - 2 * (x * x + z * z), + 2 * (y * z + w * x), + 0 + ); + // Third column + matrix.column2 = new vec4( + 2 * (x * z + w * y), + 2 * (y * z - w * x), + 1 - 2 * (x * x + y * y), + 0 + ); + // Fourth column (translation) + matrix.column3 = new vec4( + pos.x, + pos.y, + pos.z, + 1 + ); + return matrix; +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts.meta new file mode 100644 index 00000000..0cb9252a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Scripts/TS/Utils.ts.meta @@ -0,0 +1,39 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! d6b68a5e-411f-4f10-9f7e-e47c49e2cd97 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! d6b68a5e-411f-4f10-9f7e-e47c49e2cd97 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + TypeScriptAsset: ! e940097f-198e-4a84-b74b-9414b09e843a + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + {} + ScriptTypesHidden: + {} + DefaultScriptInputs: + - + {} + ScriptTypes: + - + {} + InputLines: + [] diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat new file mode 100644 index 00000000..082e80c2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 6ed0b06e-a715-4bf2-af25-a4e128e69dc5 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 0.500000} + baseTex: + typeIdx: 9 + value: + id: 6bc87d79-7748-4da4-8f90-a036bb6ada55 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! d331a7aa-ff7b-4e86-ac1e-52679d144976 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat.meta new file mode 100644 index 00000000..413c5454 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial 1.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! a0b66315-3fae-4fb3-adc8-1b841065361b + ImporterName: MaterialImporter + PrimaryAsset: ! a0b66315-3fae-4fb3-adc8-1b841065361b + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat new file mode 100644 index 00000000..05e97b21 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat @@ -0,0 +1,73 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 32a9cc2d-eee6-4e4b-b3e2-bb5d297c55a1 +- ! + CachedProperties: + - Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: PremultipliedAlphaAuto + Properties: + Port_Default_N204: + typeIdx: 1 + value: 0.000000 + PreviewEnabled: + typeIdx: 0 + value: 0 + baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTex: + typeIdx: 9 + value: + id: 6bc87d79-7748-4da4-8f90-a036bb6ada55 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + mipmaps: false + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! d331a7aa-ff7b-4e86-ac1e-52679d144976 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat.meta new file mode 100644 index 00000000..5a8f0b08 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/ImageMaterial.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 2ee1e7ce-a8b4-4555-8121-f7d85457c55c + ImporterName: MaterialImporter + PrimaryAsset: ! 2ee1e7ce-a8b4-4555-8121-f7d85457c55c + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png new file mode 100644 index 00000000..166b94ea --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55209305db521011a783ef20d2367617ddcf2d5acf2e8522684c70e900dcafa4 +size 4017 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png.meta new file mode 100644 index 00000000..1462c20a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/arrow_1.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 66ba4054-c03e-45f3-8bdb-b3a64009a9e9 + ImporterName: FileTextureImporter + PrimaryAsset: ! 66ba4054-c03e-45f3-8bdb-b3a64009a9e9 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 6yQcJ4RlWnxV20ryY0vhRY diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png new file mode 100644 index 00000000..a776e2b7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5ecf112898e6f5037bfcace275df1ef3de3b892d68d28569bec60cda3d037ff +size 8470 diff --git a/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png.meta b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png.meta new file mode 100644 index 00000000..c5eb79ef --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unitree2Spectacles/Textures/simple-white-circle.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 6bc87d79-7748-4da4-8f90-a036bb6ada55 + ImporterName: FileTextureImporter + PrimaryAsset: ! 6bc87d79-7748-4da4-8f90-a036bb6ada55 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium diff --git a/Spectacles-2-Unitree/Assets/Unlit.mat b/Spectacles-2-Unitree/Assets/Unlit.mat new file mode 100644 index 00000000..75195ce7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unlit.mat @@ -0,0 +1,120 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 10b825d3-0bae-4ee3-ac6f-4500d292e97e +- ! + CachedProperties: + - Port_Depth_N004: + typeIdx: 1 + value: 1.000000 + - Port_FinalColor1_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor2_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_FinalColor3_N004: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - Port_GSplatPointSize_N004: + typeIdx: 1 + value: 0.000000 + - Port_LODValue_N157: + typeIdx: 1 + value: 0.000000 + - Port_LODValue_N389: + typeIdx: 1 + value: 0.000000 + - Port_RayDirection_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_RayOrigin_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_Speed_N022: + typeIdx: 1 + value: 1.000000 + - Port_Speed_N063: + typeIdx: 1 + value: 1.000000 + - Port_Value3_N001: + typeIdx: 1 + value: 0.000000 + - Port_Value4_N001: + typeIdx: 1 + value: 0.000000 + - Port_WorldNormal_N004: + typeIdx: 4 + value: {x: 0.000000, y: 1.000000, z: 0.000000} + - Port_WorldPosition_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + - Port_WorldTangent_N004: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 1.000000} + - baseColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - baseTex: + typeIdx: 9 + value: + id: ffffffff-ffff-ffff-ffff-ffffffffffff + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: false + type: Texture2D + - baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + - baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + - baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: true + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - NODE_13_DROPLIST_ITEM 0 + - NODE_27_DROPLIST_ITEM 0 + - NODE_49_DROPLIST_ITEM 0 + - NODE_69_DROPLIST_ITEM 0 + BlendMode: Disabled + Properties: + Port_Default_N204: + typeIdx: 1 + value: 1.000000 + Port_Default_N369: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + overrideTimeDelta: + typeIdx: 1 + value: 0.000000 + overrideTimeElapsed: + typeIdx: 1 + value: 0.000000 + overrideTimeEnabled: + typeIdx: 0 + value: 0 + Pass: ! 506ff0f4-eeb3-48f2-8347-10e8cfe7ccb4 diff --git a/Spectacles-2-Unitree/Assets/Unlit.mat.meta b/Spectacles-2-Unitree/Assets/Unlit.mat.meta new file mode 100644 index 00000000..d1a42ad6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/Unlit.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! eacf8e40-e953-4ffc-bd26-bff04f254c11 + ImporterName: MaterialImporter + PrimaryAsset: ! eacf8e40-e953-4ffc-bd26-bff04f254c11 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat new file mode 100644 index 00000000..64cddb17 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat @@ -0,0 +1,30 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 2bbc5387-95bd-45fc-821b-b6a26566d7fb +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + - ENABLE_BASE_TEX + - ENABLE_LIGHTING + - ENABLE_NORMALMAP + BlendMode: PremultipliedAlphaAuto + Properties: + Port_FinalColor_N004: + typeIdx: 5 + value: {x: 0.574151, y: 0.574166, z: 0.574151, w: 0.494820} + PreviewEnabled: + typeIdx: 0 + value: 0 + Pass: ! a9e4cdf3-bcdd-4c6e-87b0-39923d8ec159 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat.meta new file mode 100644 index 00000000..e8fc935b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/Plane.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 3bb2dd7b-ed51-477c-b362-94ce6dd5a543 + ImporterName: MaterialImporter + PrimaryAsset: ! 3bb2dd7b-ed51-477c-b362-94ce6dd5a543 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat new file mode 100644 index 00000000..cb154871 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat @@ -0,0 +1,118 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 40cfd03b-3ae2-4533-af2a-044d6bb742eb +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 4c0f7fd8-cebb-4b07-93b9-5d63390d37fe + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: 737784c7-550b-4f88-b39c-d8f68a4024fe + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: 87cb8275-9eca-4ff9-ae0c-5abb4db13604 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat.meta new file mode 100644 index 00000000..de53a5dd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/cloud.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! f8acb59d-83d8-4c62-9ce9-7a6d3ddf9665 + ImporterName: MaterialImporter + PrimaryAsset: ! f8acb59d-83d8-4c62-9ce9-7a6d3ddf9665 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat new file mode 100644 index 00000000..e319be67 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat @@ -0,0 +1,118 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 094a9821-168c-4ae1-94ba-213d20d51cd2 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: d93d4f3d-e26f-49c6-a85c-19599bee935e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: 4d3d21f1-c0e9-4cc0-aa98-877a31f30317 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: 35b2684a-2000-45d8-b71b-4a265e676d8a + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat.meta new file mode 100644 index 00000000..32bfb439 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/house.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + ImporterName: MaterialImporter + PrimaryAsset: ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat new file mode 100644 index 00000000..f25d3f20 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat @@ -0,0 +1,118 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 020b7225-3e18-4233-ac00-9a000c313a18 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: 30f15d14-831b-4e1c-bafe-7f440bccfc08 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: 29746540-73db-42f4-bfb3-a0d1efeb3134 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: 05f97cb0-e934-4dbb-bebd-9d39a5545190 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat.meta new file mode 100644 index 00000000..fb78ceea --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/statue.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 03ade6aa-3833-492c-a811-8a61b24b15ed + ImporterName: MaterialImporter + PrimaryAsset: ! 03ade6aa-3833-492c-a811-8a61b24b15ed + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat new file mode 100644 index 00000000..80616119 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat @@ -0,0 +1,118 @@ +- ! + PackagePath: "" + PassesInfo: + - ! 8ea65807-08ba-4fa7-8a6d-e96e9ae60947 +- ! + CachedProperties: + [] + DepthWrite: true + DepthTest: true + DepthFunction: LessEqual + TwoSided: false + ColorMask: {x: true, y: true, z: true, w: true} + CullMode: Back + PolygonOffset: {x: 0.000000, y: 0.000000} + FrustumCulling: Auto + FrustumCullPad: 0.000000 + InstanceCount: 1 + Defines: + [] + BlendMode: Disabled + Properties: + Port_Center_N016: + typeIdx: 3 + value: {x: 0.000000, y: 0.000000} + Port_Emissive_N006: + typeIdx: 4 + value: {x: 0.000000, y: 0.000000, z: 0.000000} + Port_SpecularAO_N006: + typeIdx: 4 + value: {x: 1.000000, y: 1.000000, z: 1.000000} + PreviewEnabled: + typeIdx: 0 + value: 0 + baseTex: + typeIdx: 9 + value: + id: fe4203a5-42de-4ca3-bd8e-470278a1a8d2 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + baseTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + baseTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + baseTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTex: + typeIdx: 9 + value: + id: 20414496-6247-4392-996b-6b861333647e + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + materialParamsTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + materialParamsTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + materialParamsTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTex: + typeIdx: 9 + value: + id: 2c40b49e-198a-48d2-a1a6-d69f1ebb1ac8 + sampler: + filteringMode: Trilinear + wrapModeU: Repeat + wrapModeV: Repeat + wrapModeW: Repeat + borderColor: {x: 0.000000, y: 0.000000, z: 0.000000, w: 0.000000} + mipmaps: true + type: Texture2D + normalTexBorderColor: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexDims: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + normalTexTransform: + typeIdx: 7 + value: + 0: {x: 1.000000, y: 0.000000, z: 0.000000} + 1: {x: 0.000000, y: 1.000000, z: 0.000000} + 2: {x: 0.000000, y: 0.000000, z: 1.000000} + normalTexUvMinMax: + typeIdx: 5 + value: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + uvScale: + typeIdx: 1 + value: 1.000000 + Pass: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat.meta new file mode 100644 index 00000000..aaba16dd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Materials/tree.mat.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + Material: ! 4361b8db-869b-4959-a4f4-56af6d5428eb + ImporterName: MaterialImporter + PrimaryAsset: ! 4361b8db-869b-4959-a4f4-56af6d5428eb + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh new file mode 100644 index 00000000..19129e99 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b321d02694706f032870bec8bfc42b552497b543bf875125776b21570046bedf +size 1332 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh.meta new file mode 100644 index 00000000..dfa4cad4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/Plane.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 0734656f-6ee0-45b3-811d-0012ad8a7aab + ImporterName: FileMeshImporter + PrimaryAsset: ! 0734656f-6ee0-45b3-811d-0012ad8a7aab + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh new file mode 100644 index 00000000..f9ee0711 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8880557483d259b97488ce6fa285ffee4bed656063b45e86b5256544a5c4c118 +size 33864 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh.meta new file mode 100644 index 00000000..3eeed220 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/cloud.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 8de39f36-b2bf-482a-b8d3-a66f3ac16e0a + ImporterName: FileMeshImporter + PrimaryAsset: ! 8de39f36-b2bf-482a-b8d3-a66f3ac16e0a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh new file mode 100644 index 00000000..ad82dbad --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11b609c5fd89bd0b44acf269bbc54e6ff5397d49031f36cadf4080480f93421c +size 2952 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh.meta new file mode 100644 index 00000000..fb8e46e6 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/eyes.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 7109a8d1-3f2f-46f4-beb0-f0635ef85529 + ImporterName: FileMeshImporter + PrimaryAsset: ! 7109a8d1-3f2f-46f4-beb0-f0635ef85529 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh new file mode 100644 index 00000000..429fd8a8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:676363c79b6a945dd2e60106ecb92bd268fc1c9b67f4aa27f1cb42bb9246f345 +size 7896 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh.meta new file mode 100644 index 00000000..227315a3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_open.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 0baf40f2-9bd4-44d1-8cd4-a08ac2edcf47 + ImporterName: FileMeshImporter + PrimaryAsset: ! 0baf40f2-9bd4-44d1-8cd4-a08ac2edcf47 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh new file mode 100644 index 00000000..c2d34e97 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9344abdda19ce7af697fd27cd1e5c3ab7f8eed21c555bb45eb8e6b1d4724475 +size 6600 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh.meta new file mode 100644 index 00000000..7ccc1a66 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/mouth_smile.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 3fd9d803-a5d2-4485-b456-39a74213bf52 + ImporterName: FileMeshImporter + PrimaryAsset: ! 3fd9d803-a5d2-4485-b456-39a74213bf52 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh new file mode 100644 index 00000000..8079812f --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:554c8cf80cd7102dba5a745965cf865037f57872a3656c5d603d99cb6c86baf1 +size 11880 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh.meta new file mode 100644 index 00000000..a2ec49a8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/sit.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 3b86289a-3408-4a79-a01c-11ed5f124659 + ImporterName: FileMeshImporter + PrimaryAsset: ! 3b86289a-3408-4a79-a01c-11ed5f124659 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh new file mode 100644 index 00000000..62b93388 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7160326239e48208e5118ea5822156fae14f34610f2f764a6f052b0dcffb6d8 +size 14136 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh.meta new file mode 100644 index 00000000..0c18f108 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/stand.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 664395a9-c251-45e3-af62-29297a42ca54 + ImporterName: FileMeshImporter + PrimaryAsset: ! 664395a9-c251-45e3-af62-29297a42ca54 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh new file mode 100644 index 00000000..82ae6e43 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cd887e3be7cd0e1cec60494c0620aed1860dfeea5c6d1bd02a4102e0b2c9399 +size 23916 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh.meta new file mode 100644 index 00000000..3a2a74d9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/statue.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 2dc61a35-e6cf-4f05-9460-04dfe08309be + ImporterName: FileMeshImporter + PrimaryAsset: ! 2dc61a35-e6cf-4f05-9460-04dfe08309be + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh new file mode 100644 index 00000000..2c70185a --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37a84fdc16f1f45203dfbd9ea7817d8fbed7747ebc741000904a4a4f64ca2e43 +size 5256 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh.meta new file mode 100644 index 00000000..e3c2d9a8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tail.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 166dbb28-a91c-46a7-8801-2060fa16640a + ImporterName: FileMeshImporter + PrimaryAsset: ! 166dbb28-a91c-46a7-8801-2060fa16640a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh new file mode 100644 index 00000000..90c2da90 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:521ab9a9c18e4d78d2c9a116d9142ad71355ea0bc613b43de608217fff73a8c2 +size 5568 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh.meta new file mode 100644 index 00000000..f42ea6ee --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Meshes/tree.mesh.meta @@ -0,0 +1,22 @@ +- ! + ImportedAssetIds: + FileMesh: ! 883e012a-ff32-45b7-bee4-68774edf2471 + ImporterName: FileMeshImporter + PrimaryAsset: ! 883e012a-ff32-45b7-bee4-68774edf2471 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + ModifiedVertexFormats: + normal: Float + position: Float + tangent: Float + texture0: Float + CompressionSettings: ! + CompressorName: None + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph new file mode 100644 index 00000000..e8e45f23 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9dff129dc3f0330d72d0d4c6bdfe3eec3f861f2b7e3b398ab8234709ee18ebd +size 76138 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph.meta new file mode 100644 index 00000000..25dbc6f9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/cloud.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 5b7cd6c7-0afb-44e7-a868-0962d4b9e5ce + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph new file mode 100644 index 00000000..e392438c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39a229144011addc8f8a21fba81394673898c02e521c619bceb54a8df51530f3 +size 13023 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph.meta new file mode 100644 index 00000000..3154bfdf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Shaders/pbr.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! a9e4cdf3-bcdd-4c6e-87b0-39923d8ec159 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! a9e4cdf3-bcdd-4c6e-87b0-39923d8ec159 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png new file mode 100644 index 00000000..2c25a417 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dec94eba924f6be32131b6ede55a15381673093a0f6522487ebd8671bff092a +size 154581 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png.meta new file mode 100644 index 00000000..34505437 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! fe4203a5-42de-4ca3-bd8e-470278a1a8d2 + ImporterName: FileTextureImporter + PrimaryAsset: ! fe4203a5-42de-4ca3-bd8e-470278a1a8d2 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png new file mode 100644 index 00000000..22efc0af --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30065ad43831d28c6adcab6bc691c8a0a88059c8a9384146ba22e5c8eafafcf7 +size 283354 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png.meta new file mode 100644 index 00000000..3acee3f5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 2c40b49e-198a-48d2-a1a6-d69f1ebb1ac8 + ImporterName: FileTextureImporter + PrimaryAsset: ! 2c40b49e-198a-48d2-a1a6-d69f1ebb1ac8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png new file mode 100644 index 00000000..5f87b5dd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93f990f74bc8862eb87c1985f0f23fb75ad8354067400baa83c4a50e2fc70ed7 +size 217815 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png.meta new file mode 100644 index 00000000..b4933c30 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/Tree_params.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 20414496-6247-4392-996b-6b861333647e + ImporterName: FileTextureImporter + PrimaryAsset: ! 20414496-6247-4392-996b-6b861333647e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png new file mode 100644 index 00000000..d3407ee8 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f004ad5f042b0ae4b949457ad74440d7d43b298acdbb4e4688d211525edff947 +size 1144 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png.meta new file mode 100644 index 00000000..f6185097 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 4c0f7fd8-cebb-4b07-93b9-5d63390d37fe + ImporterName: FileTextureImporter + PrimaryAsset: ! 4c0f7fd8-cebb-4b07-93b9-5d63390d37fe + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png new file mode 100644 index 00000000..422aba47 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c82870881f4f0beaf95a5fcc2966407c446cbd55d5eb96fa0720d5972f6a6456 +size 447694 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png.meta new file mode 100644 index 00000000..557e7f75 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 87cb8275-9eca-4ff9-ae0c-5abb4db13604 + ImporterName: FileTextureImporter + PrimaryAsset: ! 87cb8275-9eca-4ff9-ae0c-5abb4db13604 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png new file mode 100644 index 00000000..5f235bd7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e385b4281086a7cb81c57fb0670cdba9df79715f496d374035348ad58d3e7d23 +size 107232 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png.meta new file mode 100644 index 00000000..b6806eb2 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/cloud_params.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 737784c7-550b-4f88-b39c-d8f68a4024fe + ImporterName: FileTextureImporter + PrimaryAsset: ! 737784c7-550b-4f88-b39c-d8f68a4024fe + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png new file mode 100644 index 00000000..5bb377a9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26b904512cb8104405f5913682b407b65e67666ba9249dfa643e025a8efcd0b0 +size 19040 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png.meta new file mode 100644 index 00000000..251a77f1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! d93d4f3d-e26f-49c6-a85c-19599bee935e + ImporterName: FileTextureImporter + PrimaryAsset: ! d93d4f3d-e26f-49c6-a85c-19599bee935e + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png new file mode 100644 index 00000000..18acd1bd --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f2b5907cca2113afaf7ed52f2b24dd0935508bbb46781cc6aa17fef2b966fff +size 185541 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png.meta new file mode 100644 index 00000000..9bc455b7 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 35b2684a-2000-45d8-b71b-4a265e676d8a + ImporterName: FileTextureImporter + PrimaryAsset: ! 35b2684a-2000-45d8-b71b-4a265e676d8a + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png new file mode 100644 index 00000000..a42f6810 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02f6137c73bbd9719dc2849b56b645ec83323371298a30206ab74ca1ef18529a +size 56529 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png.meta new file mode 100644 index 00000000..add6a4de --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/house_params.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 4d3d21f1-c0e9-4cc0-aa98-877a31f30317 + ImporterName: FileTextureImporter + PrimaryAsset: ! 4d3d21f1-c0e9-4cc0-aa98-877a31f30317 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png new file mode 100644 index 00000000..84ee81a3 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab87e0c7be631f17e79074a768f3b2f4cac77d33470d95b04650b85c4c75c8d4 +size 62669 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png.meta new file mode 100644 index 00000000..7b144ce5 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_base.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 30f15d14-831b-4e1c-bafe-7f440bccfc08 + ImporterName: FileTextureImporter + PrimaryAsset: ! 30f15d14-831b-4e1c-bafe-7f440bccfc08 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png new file mode 100644 index 00000000..aedef1f9 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b1a7992c5f54ad1dc989feec4e4872210c647c80aea3503f3109585eee9c7f4 +size 110607 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png.meta new file mode 100644 index 00000000..ed9300eb --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_normal.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 05f97cb0-e934-4dbb-bebd-9d39a5545190 + ImporterName: FileTextureImporter + PrimaryAsset: ! 05f97cb0-e934-4dbb-bebd-9d39a5545190 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png new file mode 100644 index 00000000..871addaf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d5f30b15ec8af56a556856e920d32aeab9186157a33062a236336d1a3f20e01 +size 126983 diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png.meta new file mode 100644 index 00000000..174234bf --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/Textures/statue_params.png.meta @@ -0,0 +1,19 @@ +- ! + ImportedAssetIds: + Texture: ! 29746540-73db-42f4-bfb3-a0d1efeb3134 + ImporterName: FileTextureImporter + PrimaryAsset: ! 29746540-73db-42f4-bfb3-a0d1efeb3134 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! + CompressorName: Performance + CompressionSettings: ! + Level: Medium + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab new file mode 100644 index 00000000..e79b2327 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab @@ -0,0 +1,478 @@ +- ! + PackagePath: "" + objects: + - ! c34ef930-7872-485d-98fb-0d1f2a526ee1 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03ade6aa-3833-492c-a811-8a61b24b15ed + Mesh: ! 2dc61a35-e6cf-4f05-9460-04dfe08309be + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Sit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 201e3378-90b2-4fdb-a9f7-14fb6ad810ea + Components: + - ! da3bfe38-abf7-42ee-aa0f-71e44e38bb02 +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 3bb2dd7b-ed51-477c-b362-94ce6dd5a543 + Mesh: ! 0734656f-6ee0-45b3-811d-0012ad8a7aab + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Mouth_Smile + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.003713, y: 89.758713, z: -158.852646} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 4adac890-d736-4fea-a137-18664e3df81a +- ! + PrefabRemaps: + [] + Name: Cloud + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.414738, z: 0.000000} + rotation: {x: -180.000000, y: -0.000000, z: 180.000000} + scale: {x: 0.034598, y: 0.034598, z: 0.034598} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! e3ddb21b-a5c4-47e5-94c1-2573bc833b7d +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 7109a8d1-3f2f-46f4-beb0-f0635ef85529 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 166dbb28-a91c-46a7-8801-2060fa16640a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: 2. Add Spectacles Interaction Kit to project + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_4 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 3fd9d803-a5d2-4485-b456-39a74213bf52 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Eyes + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.142366, y: 118.308319, z: -158.286438} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 2ea64cf3-41d1-4ad2-847f-f1b90b69ad0d +- ! + PrefabRemaps: + [] + Name: Statue + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.100000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 000f720c-17f8-4a81-b4ab-aa508664aa5c +- ! + PrefabRemaps: + [] + Name: component_5 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 664395a9-c251-45e3-af62-29297a42ca54 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Tail + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -2.294500, y: 16.376749, z: 134.126617} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 3f496510-4b23-421e-af4c-0f699804f95f +- ! + PrefabRemaps: + [] + Name: Plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 30.951649, y: 30.951649, z: 30.951649} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 1759a169-567f-41ac-91cf-acf19c3aae43 +- ! + PrefabRemaps: + [] + Name: Stand + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! fc4634fd-12a1-451c-96ed-f139611febf2 + Components: + - ! 620a9680-aea2-437c-9605-ce3336bfecc1 +- ! + PrefabRemaps: + [] + Name: component_6 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 0baf40f2-9bd4-44d1-8cd4-a08ac2edcf47 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "Objects to spawn [EDIT]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 60a552ed-064a-4254-8120-1ba7213fc2fe + - ! aada7af9-8f64-4a85-8112-890b337fc49e + - ! e79a7204-10bd-4919-93e0-92412b109073 + - ! 252cecd1-a845-4559-aef9-671630854c93 + Components: + [] +- ! + PrefabRemaps: + [] + Name: House + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 180.000000, y: 26.814974, z: 180.000000} + scale: {x: 0.033425, y: 0.033425, z: 0.033425} + hasSegmentScaleCompensation: false + Children: + - ! 5bcba7d3-d033-4fe1-b702-28b2c329d5b7 + - ! 66c626ff-d915-43bb-b9a0-ea1930e7b590 + - ! 02888fa9-9aa0-4b7c-8d76-92dcfb09934c + - ! 8877a2b6-fbc6-4e64-ac40-1569bd2ac5c1 + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4361b8db-869b-4959-a4f4-56af6d5428eb + Mesh: ! 883e012a-ff32-45b7-bee4-68774edf2471 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: 1. Configure project for Spectacles + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: World Query Hit Example + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! bb6503a3-22bd-4a30-b923-7b77ce00a184 + - ! 4a9631af-0b16-458e-9349-5b66ed8735db + - ! e569c532-3e4b-45f8-b5b2-82379e27615f + Components: + [] +- ! + PrefabRemaps: + [] + Name: component_3 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 3b86289a-3408-4a79-a01c-11ed5f124659 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f8acb59d-83d8-4c62-9ce9-7a6d3ddf9665 + Mesh: ! 8de39f36-b2bf-482a-b8d3-a66f3ac16e0a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "3. World Query Example [EDIT ME]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 70f81438-793f-4147-9719-c25e61efb4ba + - ! 986fad9f-6293-4e43-a165-2c2a14fd847b + Components: + - ! facc59d1-750a-447d-85d7-f2da208956fe +- ! + PrefabRemaps: + [] + Name: Tree + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.032425, y: 0.032427, z: 0.032427} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! ab1adf31-79bd-4825-9637-1f98f02c09d9 +- ! + PrefabRemaps: + [] + Name: WorldQueryHitExample + Enabled: true + ScriptAsset: ! 4af91f0b-dfd5-4e60-9ae1-e13c6ac3c8f7 + ScriptInputsDefault: + filterEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + indexToSpawn: ! 2.000000 + targetObject: ! 986fad9f-6293-4e43-a165-2c2a14fd847b + objectsToSpawn: ! + - ! 60a552ed-064a-4254-8120-1ba7213fc2fe + - ! aada7af9-8f64-4a85-8112-890b337fc49e + - ! e79a7204-10bd-4919-93e0-92412b109073 + - ! 252cecd1-a845-4559-aef9-671630854c93 + filterEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Mouth_Open + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 92.195312, z: -157.735001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 8eb07302-5280-4cdd-87a5-8becfdf6c4ff diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab.meta new file mode 100644 index 00000000..870797ac --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/World Query Hit Example.prefab.meta @@ -0,0 +1,524 @@ +- ! + ImportedAssetIds: + ObjectPrefab: ! ff512c1a-da17-4a45-a199-defd6536fcf9 + ImporterName: ObjectPrefabImporter + PrimaryAsset: ! ff512c1a-da17-4a45-a199-defd6536fcf9 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + ObjectPrefab: ! de684141-4490-437e-9cd3-363c45484694 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy +- ! + PrefabRemaps: + [] + Name: Eyes + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.142366, y: 118.308319, z: -158.286438} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 91d768b9-df7e-4abd-9f99-367d9395824d +- ! + PrefabRemaps: + [] + Name: House + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 180.000000, y: 26.814974, z: 180.000000} + scale: {x: 0.033425, y: 0.033425, z: 0.033425} + hasSegmentScaleCompensation: false + Children: + - ! 00c2c419-ba85-4fbd-af5b-8edf541ac66b + - ! 7a60ab9a-a369-4dd3-a4f9-4232ead5b563 + - ! 1de66b48-21d6-4200-a87f-90dfb5100bd9 + - ! d1cf728a-f434-4c6f-a611-bf26c35daf7b + Components: + [] +- ! + PrefabRemaps: + [] + Name: Sit + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! d1a0d0b8-aca8-49ee-857e-63b8bfe8f3ef + Components: + - ! 1f474e4c-0949-4db6-92a6-5997fa73542c +- ! + PrefabRemaps: + [] + Name: component_3 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 3b86289a-3408-4a79-a01c-11ed5f124659 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Tree + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 0.032425, y: 0.032427, z: 0.032427} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! bfa4337d-5dd3-4dc6-af17-ce201094fafb +- ! + PrefabRemaps: + [] + Name: 1. Configure project for Spectacles + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: 2. Add Spectacles Interaction Kit to project + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + [] +- ! + PrefabRemaps: + [] + Name: Mouth_Open + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 92.195312, z: -157.735001} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! 9a7fa4dd-03ff-4098-a3eb-e054041f67ac +- ! + PrefabRemaps: + [] + Name: Tail + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -2.294500, y: 16.376749, z: 134.126617} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! cf83b7bc-dff5-46e1-b753-867b18b44726 +- ! + PrefabRemaps: + [] + Name: WorldQueryHitExample + Enabled: true + ScriptAsset: ! 4af91f0b-dfd5-4e60-9ae1-e13c6ac3c8f7 + ScriptInputsDefault: + filterEnabled: true + ScriptTypesDefault: + {} + ScriptInputs: + "": + indexToSpawn: ! 2.000000 + targetObject: ! 9762a85a-8dbd-4697-a7dd-e9d42658a6c2 + objectsToSpawn: ! + - ! b26a22e9-5374-40ad-8dcc-c428c004d10f + - ! 1ca71665-b12e-41a5-a6a3-473ee34cea88 + - ! 42b48979-31cc-478e-8fe3-0f3141b128b0 + - ! 990751e8-984a-4d3f-9bf9-8315a0a64d70 + filterEnabled: false + ScriptTypes: + "": + {} +- ! + PrefabRemaps: + [] + Name: Plane + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 30.951649, y: 30.951649, z: 30.951649} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! c76613f6-21b3-4641-96ad-72fee69a7a37 +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 7109a8d1-3f2f-46f4-beb0-f0635ef85529 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "Objects to spawn [EDIT]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! b26a22e9-5374-40ad-8dcc-c428c004d10f + - ! 1ca71665-b12e-41a5-a6a3-473ee34cea88 + - ! 42b48979-31cc-478e-8fe3-0f3141b128b0 + - ! 990751e8-984a-4d3f-9bf9-8315a0a64d70 + Components: + [] +- ! + PrefabRemaps: + [] + Name: Cloud + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.414738, z: 0.000000} + rotation: {x: -180.000000, y: -0.000000, z: 180.000000} + scale: {x: 0.034598, y: 0.034598, z: 0.034598} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a1f90dbd-ca04-43eb-8eea-e2a374aaf39f +- ! + PrefabRemaps: + [] + Name: component_6 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 0baf40f2-9bd4-44d1-8cd4-a08ac2edcf47 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! f8acb59d-83d8-4c62-9ce9-7a6d3ddf9665 + Mesh: ! 8de39f36-b2bf-482a-b8d3-a66f3ac16e0a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_1 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 03ade6aa-3833-492c-a811-8a61b24b15ed + Mesh: ! 2dc61a35-e6cf-4f05-9460-04dfe08309be + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Statue + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 0.100000, y: 0.100000, z: 0.100000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! a2ef3c24-09c6-4788-bdd8-cb2bc38818ed +- ! + PrefabRemaps: + [] + Name: component_4 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 3fd9d803-a5d2-4485-b456-39a74213bf52 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_0 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 4361b8db-869b-4959-a4f4-56af6d5428eb + Mesh: ! 883e012a-ff32-45b7-bee4-68774edf2471 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Render Mesh Visual + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 3bb2dd7b-ed51-477c-b362-94ce6dd5a543 + Mesh: ! 0734656f-6ee0-45b3-811d-0012ad8a7aab + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: component_2 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 166dbb28-a91c-46a7-8801-2060fa16640a + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: Mouth_Smile + Enabled: true + Layers: 1 + LocalTransform: + position: {x: -0.003713, y: 89.758713, z: -158.852646} + rotation: {x: 0.000000, y: -0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + [] + Components: + - ! b4e0ecec-d7dd-4007-b6c8-343f5917648d +- ! + PrefabRemaps: + [] + Name: Stand + Enabled: false + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 52a85f2b-f6da-4be7-a32f-153256578006 + Components: + - ! d5d5527f-e1d2-4d1e-9568-644cd8ed389e +- ! + PrefabRemaps: + [] + Name: component_5 + Enabled: true + RenderOrder: 0 + StretchMode: Stretch + VerticalAlignment: Center + HorizontalAlignment: Center + MeshShadowMode: None + ShadowColor: {x: 1.000000, y: 1.000000, z: 1.000000, w: 1.000000} + ShadowDensity: 1.000000 + Materials: + - ! 85c137db-1037-4cd6-a5cf-2604a32c0b0a + Mesh: ! 664395a9-c251-45e3-af62-29297a42ca54 + Skin: ! 00000000-0000-0000-0000-000000000000 + BlendShapesEnabled: true + BlendNormals: false + BlendShapes: + {} +- ! + PrefabRemaps: + [] + Name: "3. World Query Example [EDIT ME]" + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 8d299477-ec33-4c5a-b55b-ebad53348c2f + - ! 9762a85a-8dbd-4697-a7dd-e9d42658a6c2 + Components: + - ! 8c1e1b80-b014-41ae-a74c-b1e1dd4c223d +- ! + SourceRemaps: + - 000f720c-17f8-4a81-b4ab-aa508664aa5c: a2ef3c24-09c6-4788-bdd8-cb2bc38818ed + - 02888fa9-9aa0-4b7c-8d76-92dcfb09934c: 1de66b48-21d6-4200-a87f-90dfb5100bd9 + - 1759a169-567f-41ac-91cf-acf19c3aae43: c76613f6-21b3-4641-96ad-72fee69a7a37 + - 201e3378-90b2-4fdb-a9f7-14fb6ad810ea: d1a0d0b8-aca8-49ee-857e-63b8bfe8f3ef + - 252cecd1-a845-4559-aef9-671630854c93: 990751e8-984a-4d3f-9bf9-8315a0a64d70 + - 2ea64cf3-41d1-4ad2-847f-f1b90b69ad0d: 91d768b9-df7e-4abd-9f99-367d9395824d + - 3f496510-4b23-421e-af4c-0f699804f95f: cf83b7bc-dff5-46e1-b753-867b18b44726 + - 4a9631af-0b16-458e-9349-5b66ed8735db: 525782ce-da8f-432f-82e3-9f018f14ab2c + - 4adac890-d736-4fea-a137-18664e3df81a: b4e0ecec-d7dd-4007-b6c8-343f5917648d + - 5bcba7d3-d033-4fe1-b702-28b2c329d5b7: 00c2c419-ba85-4fbd-af5b-8edf541ac66b + - 60a552ed-064a-4254-8120-1ba7213fc2fe: b26a22e9-5374-40ad-8dcc-c428c004d10f + - 620a9680-aea2-437c-9605-ce3336bfecc1: d5d5527f-e1d2-4d1e-9568-644cd8ed389e + - 66c626ff-d915-43bb-b9a0-ea1930e7b590: 7a60ab9a-a369-4dd3-a4f9-4232ead5b563 + - 70f81438-793f-4147-9719-c25e61efb4ba: 8d299477-ec33-4c5a-b55b-ebad53348c2f + - 8877a2b6-fbc6-4e64-ac40-1569bd2ac5c1: d1cf728a-f434-4c6f-a611-bf26c35daf7b + - 8eb07302-5280-4cdd-87a5-8becfdf6c4ff: 9a7fa4dd-03ff-4098-a3eb-e054041f67ac + - 986fad9f-6293-4e43-a165-2c2a14fd847b: 9762a85a-8dbd-4697-a7dd-e9d42658a6c2 + - aada7af9-8f64-4a85-8112-890b337fc49e: 1ca71665-b12e-41a5-a6a3-473ee34cea88 + - ab1adf31-79bd-4825-9637-1f98f02c09d9: bfa4337d-5dd3-4dc6-af17-ce201094fafb + - bb6503a3-22bd-4a30-b923-7b77ce00a184: 492d21da-d6fa-4bea-ada5-0f2c4080abca + - c34ef930-7872-485d-98fb-0d1f2a526ee1: ee4d2a5b-3516-490e-b00c-1d49445accf2 + - da3bfe38-abf7-42ee-aa0f-71e44e38bb02: 1f474e4c-0949-4db6-92a6-5997fa73542c + - e3ddb21b-a5c4-47e5-94c1-2573bc833b7d: a1f90dbd-ca04-43eb-8eea-e2a374aaf39f + - e569c532-3e4b-45f8-b5b2-82379e27615f: daa92ff9-6480-4814-8b4f-3030bf71f6c6 + - e79a7204-10bd-4919-93e0-92412b109073: 42b48979-31cc-478e-8fe3-0f3141b128b0 + - facc59d1-750a-447d-85d7-f2da208956fe: 8c1e1b80-b014-41ae-a74c-b1e1dd4c223d + - fc4634fd-12a1-451c-96ed-f139611febf2: 52a85f2b-f6da-4be7-a32f-153256578006 + SourceState: ! ea774ea5-2c80-46c7-b824-290852491377 +- ! + PackagePath: "" + objects: + - ! ee4d2a5b-3516-490e-b00c-1d49445accf2 + LazyLoading: false + RetainAssets: true +- ! + PrefabRemaps: + [] + Name: World Query Hit Example + Enabled: true + Layers: 1 + LocalTransform: + position: {x: 0.000000, y: 0.000000, z: 0.000000} + rotation: {x: 0.000000, y: 0.000000, z: 0.000000} + scale: {x: 1.000000, y: 1.000000, z: 1.000000} + hasSegmentScaleCompensation: false + Children: + - ! 492d21da-d6fa-4bea-ada5-0f2c4080abca + - ! 525782ce-da8f-432f-82e3-9f018f14ab2c + - ! daa92ff9-6480-4814-8b4f-3030bf71f6c6 + Components: + [] diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts new file mode 100644 index 00000000..11e34b9e --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts @@ -0,0 +1,124 @@ +// import required modules +const WorldQueryModule = require("LensStudio:WorldQueryModule") +const SIK = require("SpectaclesInteractionKit/SIK").SIK; +const InteractorTriggerType = require("SpectaclesInteractionKit/Core/Interactor/Interactor").InteractorTriggerType; +const EPSILON = 0.01; + + +@component +export class NewScript extends BaseScriptComponent { + + + private primaryInteractor; + private hitTestSession: HitTestSession; + private transform: Transform; + @input + indexToSpawn: number; + + @input + targetObject: SceneObject; + + @input + objectsToSpawn: SceneObject[]; + + @input + filterEnabled: boolean; + + onAwake() { + // create new hit session + this.hitTestSession = this.createHitTestSession(this.filterEnabled); + if (!this.sceneObject) { + print("Please set Target Object input"); + return; + } + this.transform = this.targetObject.getTransform(); + // disable target object when surface is not detected + this.targetObject.enabled = false; + this.setObjectEnabled(this.indexToSpawn) + // create update event + this.createEvent("UpdateEvent").bind(this.onUpdate.bind(this)); + } + + + createHitTestSession(filterEnabled) { + // create hit test session with options + var options = HitTestSessionOptions.create(); + options.filter = filterEnabled; + + + var session = WorldQueryModule.createHitTestSessionWithOptions(options); + return session; + } + + + onHitTestResult(results) { + if (results === null) { + this.targetObject.enabled = false; + } else { + this.targetObject.enabled = true; + // get hit information + const hitPosition = results.position; + const hitNormal = results.normal; + + + //identifying the direction the object should look at based on the normal of the hit location. + + + var lookDirection; + if (1 - Math.abs(hitNormal.normalize().dot(vec3.up())) < EPSILON) { + lookDirection = vec3.forward(); + } else { + lookDirection = hitNormal.cross(vec3.up()); + } + + + const toRotation = quat.lookAt(lookDirection, hitNormal); + //set position and rotation + this.targetObject.getTransform().setWorldPosition(hitPosition); + this.targetObject.getTransform().setWorldRotation(toRotation); + + + if ( + this.primaryInteractor.previousTrigger !== InteractorTriggerType.None && + this.primaryInteractor.currentTrigger === InteractorTriggerType.None + ) { + // Called when a trigger ends + // Copy the plane/axis object + let parent = this.objectsToSpawn[this.indexToSpawn].getParent(); + let newObject = parent.copyWholeHierarchy(this.objectsToSpawn[this.indexToSpawn]); + newObject.setParentPreserveWorldTransform(null); + } + } + } + + + onUpdate() { + this.primaryInteractor = SIK.InteractionManager.getTargetingInteractors().shift(); + + + if (this.primaryInteractor && + this.primaryInteractor.isActive() && + this.primaryInteractor.isTargeting() + ) { + const rayStartOffset = new vec3(this.primaryInteractor.startPoint.x, this.primaryInteractor.startPoint.y, this.primaryInteractor.startPoint.z + 30); + const rayStart = rayStartOffset; + const rayEnd = this.primaryInteractor.endPoint; + + + this.hitTestSession.hitTest(rayStart, rayEnd, this.onHitTestResult.bind(this)); + + + } else { + this.targetObject.enabled = false; + } + } + + setObjectIndex(i) { + this.indexToSpawn = i; + } + + setObjectEnabled(i) { + for (let i = 0; i < this.objectsToSpawn.length; i++) + this.objectsToSpawn[i].enabled = i == this.indexToSpawn; + } +} diff --git a/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts.meta b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts.meta new file mode 100644 index 00000000..f4033164 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/World Query Hit - Spawn On Surface/WorldQueryHitExample.ts.meta @@ -0,0 +1,48 @@ +- ! + ImportedAssetIds: + TypeScriptAsset: ! 4af91f0b-dfd5-4e60-9ae1-e13c6ac3c8f7 + ImporterName: TypeScriptAssetImporter + PrimaryAsset: ! 4af91f0b-dfd5-4e60-9ae1-e13c6ac3c8f7 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + AssetDataMap: + TypeScriptAsset: ! 7c22d378-8820-4894-85b8-1b5f42c71395 + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 + ExtraData: + AssetLibraryId: 3pSS78N86NN7AmQn7vDmZy +- ! + SvgIcon: "" + Description: "" + InternalVersion: 0 + VersionMajor: 0 + VersionMinor: 0 + VersionPatch: 0 + ComponentUid: 00000000-0000-0000-0000-000000000000 + ExportUid: 00000000-0000-0000-0000-000000000000 + CurrentVisibility: Editable + MaxVisibility: Editable + ScriptInputsHidden: + filterEnabled: false + indexToSpawn: false + objectsToSpawn: false + targetObject: false + ScriptTypesHidden: + {} + DefaultScriptInputs: + - indexToSpawn: ! 0.000000 + targetObject: ! 00000000-0000-0000-0000-000000000000 + objectsToSpawn: ! + [] + filterEnabled: false + ScriptTypes: + - + {} + InputLines: + - // @input float indexToSpawn + - // @input SceneObject targetObject + - "// @input SceneObject[] objectsToSpawn" + - // @input bool filterEnabled diff --git a/Spectacles-2-Unitree/Assets/flat.ss_graph b/Spectacles-2-Unitree/Assets/flat.ss_graph new file mode 100644 index 00000000..17934f39 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/flat.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99a0695559ec6c4d86f7697aac53b69ae41ad6f084be84a10d0dfbaeb93246cc +size 513163 diff --git a/Spectacles-2-Unitree/Assets/flat.ss_graph.meta b/Spectacles-2-Unitree/Assets/flat.ss_graph.meta new file mode 100644 index 00000000..34a2572b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/flat.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 11d16b8f-d694-4051-b9fb-fd4d097b0cb8 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 11d16b8f-d694-4051-b9fb-fd4d097b0cb8 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/image_unlit.ss_graph b/Spectacles-2-Unitree/Assets/image_unlit.ss_graph new file mode 100644 index 00000000..507ec63c --- /dev/null +++ b/Spectacles-2-Unitree/Assets/image_unlit.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e4b3adac8255b848e2f2766c1924497ddeccdf591485f9c16b319260cb2d1e3 +size 491882 diff --git a/Spectacles-2-Unitree/Assets/image_unlit.ss_graph.meta b/Spectacles-2-Unitree/Assets/image_unlit.ss_graph.meta new file mode 100644 index 00000000..a2d90f4d --- /dev/null +++ b/Spectacles-2-Unitree/Assets/image_unlit.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d331a7aa-ff7b-4e86-ac1e-52679d144976 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d331a7aa-ff7b-4e86-ac1e-52679d144976 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/pbr.ss_graph b/Spectacles-2-Unitree/Assets/pbr.ss_graph new file mode 100644 index 00000000..cce9f7d4 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/pbr.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5afd1a9df82b7e7e24c059cebc8d40287ab8dd862c5445c3bcf7eeedcd434ced +size 75712 diff --git a/Spectacles-2-Unitree/Assets/pbr.ss_graph.meta b/Spectacles-2-Unitree/Assets/pbr.ss_graph.meta new file mode 100644 index 00000000..3b41bf6b --- /dev/null +++ b/Spectacles-2-Unitree/Assets/pbr.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! d35f7a7c-916b-4eed-b78e-63022648b19f + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! d35f7a7c-916b-4eed-b78e-63022648b19f + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Assets/unlit.ss_graph b/Spectacles-2-Unitree/Assets/unlit.ss_graph new file mode 100644 index 00000000..f03e26c1 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/unlit.ss_graph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c664186cb52ef889567268ceed627d06f932e19d42bec8e9ad9161c6370561f4 +size 522897 diff --git a/Spectacles-2-Unitree/Assets/unlit.ss_graph.meta b/Spectacles-2-Unitree/Assets/unlit.ss_graph.meta new file mode 100644 index 00000000..6fa78262 --- /dev/null +++ b/Spectacles-2-Unitree/Assets/unlit.ss_graph.meta @@ -0,0 +1,16 @@ +- ! + ImportedAssetIds: + ShaderGraph: ! 506ff0f4-eeb3-48f2-8347-10e8cfe7ccb4 + ImporterName: ShaderGraphPassImporter + PrimaryAsset: ! 506ff0f4-eeb3-48f2-8347-10e8cfe7ccb4 + PackageType: NotAPackage + PackagePolicy: CannotBeUnpacked + ExtraData: + {} + AssetDataMap: + {} + DependentFiles: + [] + ImporterSettings: ! + {} + CompressionSettings: ! 00000000-0000-0000-0000-000000000000 diff --git a/Spectacles-2-Unitree/Dockerfile b/Spectacles-2-Unitree/Dockerfile new file mode 100644 index 00000000..e877d6a0 --- /dev/null +++ b/Spectacles-2-Unitree/Dockerfile @@ -0,0 +1,96 @@ +FROM ubuntu:noble AS dev + +LABEL org.opencontainers.image.description="Spectacles-2-Unitree dev container" + +ARG UV_VERSION=0.6.2 + +ENV CYCLONEDDS_HOME=/usr/local \ + DEBIAN_FRONTEND=noninteractive \ + PATH="/opt/conda/bin:${PATH}" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + apt-transport-https \ + curl \ + gnupg \ + # Needed for some Python dependencies that want the full non-headless version of OpenCV. + libgl1 \ + libglib2.0-0 \ + lsb-release \ + python3.12 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +RUN . /etc/lsb-release \ + # Git LFS + && curl -fsSL https://packagecloud.io/github/git-lfs/gpgkey \ + | gpg --dearmor -o /etc/apt/keyrings/github_git-lfs-archive-keyring.gpg \ + && curl -fsSL "https://packagecloud.io/install/repositories/github/git-lfs/config_file.list?os=${DISTRIB_ID}&dist=${DISTRIB_CODENAME}" > /etc/apt/sources.list.d/github_git-lfs.list \ + # GitHub CLI + && curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg -o /usr/share/keyrings/githubcli.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli.gpg] https://cli.github.com/packages stable main" > /etc/apt/sources.list.d/github-cli.list \ + # Docker + && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list + +# Additional dev packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + docker-buildx-plugin \ + docker-ce-cli \ + gcc-aarch64-linux-gnu \ + gh \ + git \ + git-lfs \ + htop \ + iputils-ping \ + jq \ + less \ + linux-tools-common \ + linux-tools-generic \ + micro \ + net-tools \ + openssl \ + pipx \ + python3-pip \ + ssh \ + unzip \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install act +RUN --mount=type=cache,target=/root/.cache/act \ + curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/nektos/act/master/install.sh | bash + +# Install uv +RUN pipx ensurepath && pipx install "uv==$UV_VERSION" + +# Install conda +RUN curl -fsSL https://github.com/conda-forge/miniforge/releases/download/25.3.0-1/Miniforge3-25.3.0-1-Linux-aarch64.sh -o /tmp/miniforge.sh \ + && chmod +x /tmp/miniforge.sh \ + && /tmp/miniforge.sh -b -p /opt/conda \ + && rm /tmp/miniforge.sh + +# Build CycloneDDS +RUN git clone https://github.com/eclipse-cyclonedds/cyclonedds /tmp/cyclonedds \ + && cd /tmp/cyclonedds \ + # The unitree-sdk2py depends on CycloneDDS 0.10.2 + && git checkout 0.10.2 \ + && mkdir build && cd build \ + && cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. \ + && cmake --build . --target install \ + && cd / && rm -rf /tmp/cyclonedds + +SHELL ["/bin/bash", "-c"] + +COPY unitree-client/environment.yml environment.yml + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda env create -f environment.yml \ + && conda clean -afy + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda activate unitree-client \ + && pip install --no-cache-dir \ + meshcat@git+https://github.com/TastyDucks/meshcat-python.git \ + unitree_sdk2py@git+https://github.com/TastyDucks/unitree_sdk2_python.git \ + cyclonedds==0.10.2 \ No newline at end of file diff --git a/Spectacles-2-Unitree/LICENSE b/Spectacles-2-Unitree/LICENSE new file mode 100644 index 00000000..230a053b --- /dev/null +++ b/Spectacles-2-Unitree/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Patrick Rose, Vincent Trastour, Arthur Baney, Alessio Grancini + +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. \ No newline at end of file diff --git a/Spectacles-2-Unitree/README-ref/dex-3.png b/Spectacles-2-Unitree/README-ref/dex-3.png new file mode 100644 index 00000000..e2b0e736 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/dex-3.png differ diff --git a/Spectacles-2-Unitree/README-ref/hands.png b/Spectacles-2-Unitree/README-ref/hands.png new file mode 100644 index 00000000..01d06983 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/hands.png differ diff --git a/Spectacles-2-Unitree/README-ref/high-five.gif b/Spectacles-2-Unitree/README-ref/high-five.gif new file mode 100644 index 00000000..09489a87 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/high-five.gif differ diff --git a/Spectacles-2-Unitree/README-ref/meshcat.png b/Spectacles-2-Unitree/README-ref/meshcat.png new file mode 100644 index 00000000..5fe9cd6d Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/meshcat.png differ diff --git a/Spectacles-2-Unitree/README-ref/sample-list-unitree.gif b/Spectacles-2-Unitree/README-ref/sample-list-unitree.gif new file mode 100644 index 00000000..ba8b1657 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/sample-list-unitree.gif differ diff --git a/Spectacles-2-Unitree/README-ref/server-a.png b/Spectacles-2-Unitree/README-ref/server-a.png new file mode 100644 index 00000000..0dfa8be6 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/server-a.png differ diff --git a/Spectacles-2-Unitree/README-ref/server-b.png b/Spectacles-2-Unitree/README-ref/server-b.png new file mode 100644 index 00000000..46852a0a Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/server-b.png differ diff --git a/Spectacles-2-Unitree/README-ref/vscode-command.png b/Spectacles-2-Unitree/README-ref/vscode-command.png new file mode 100644 index 00000000..bf2e29e9 Binary files /dev/null and b/Spectacles-2-Unitree/README-ref/vscode-command.png differ diff --git a/Spectacles-2-Unitree/README.md b/Spectacles-2-Unitree/README.md new file mode 100644 index 00000000..bdc5a889 --- /dev/null +++ b/Spectacles-2-Unitree/README.md @@ -0,0 +1,338 @@ +# Spectacles to Unitree Teleoperation + +[![Gesture Module](https://img.shields.io/badge/Gesture%20Module-Light%20Gray?color=D3D3D3)](https://developers.snap.com/spectacles/about-spectacles-features/apis/gesture-module) [![WebSocket](https://img.shields.io/badge/WebSocket-Light%20Gray?color=D3D3D3)](https://developers.snap.com/spectacles/about-spectacles-features/apis/web-socket) [![SIK](https://img.shields.io/badge/SIK-Light%20Gray?color=D3D3D3)](https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/features/overview) + +![Spectacles to Unitree simulation demo](./README-ref/sample-list-unitree.gif) + +> **IMPORTANT**: This project is provided purely for experimental and research purposes. +We do **not** endorse, sponsor, or have any formal affiliation with Unitree Robotics (or any other company mentioned). +> +> All trademarks, company names, and product names are the property of their respective owners. + +## Overview +A system for teleoperating a Unitree G1 humanoid robot using Snapchat Spectacles AR glasses. + +**No robot? No problem!** You can still use the simulated hand tracking features with your own Spectacles. + +This project provides four main methods of interaction: + +1. **Hand Teleoperation**: Control the robot's arms and hands by mirroring your own hand movements, and view a simulated version of the robot in your Spectacles. **Toggle hand tracking by tapping your left palm with your right index finger.** + +![High-fiving the robot using hand tracking](./README-ref/high-five.gif) + +2. **Preset Actions**: Execute predefined robot actions (stand, sit, wave, etc.) with a single tap. +3. **Virtual Joystick**: Walk the robot around using a virtual joystick. +4. **Raycast movement**: Point to a location and the robot will walk there. + +## Contributors + +- [Patrick Rose](https://patrickrose.com): *Software developer* + - Coordination server, Unitree client, Lens hand tracking and teleoperation +- [Vincent Trastour](https://github.com/maisonbleue) + - Lens raycast component +- [Arthur Baney](https://github.com/azb): *Lightfield Software Engineer at Leia, Mixed Reality Developer. Worked on the Leia Unity Plugin. Creator of Table Soccer, a game published on Meta Quest and Apple Vision Pro.* + - Lens joystick component +- [Alessio Grancini](https://github.com/alessiograncini): *Developer Experience at Snap* + - Lens UI components, Lens Studio and SIK API support +- [Vitaly Bulatov](https://github.com/vitl2907) + - Unitree support and testing + +## Usage + +> **IMPORTANT:** +> This project uses [Git Large Files Support (LFS)](https://git-lfs.github.com/) to store STL files used for rendering the robot simulation. Downloading a zip file using the green button on GitHub **will not work**. You will need to have Git LFS installed. Once you've cloned the repository, run `git lfs install` and `git lfs pull` to download the URDF meshes. + +### Deployment + +You will need to be able to build Docker containers. For a tutorial, check out [Docker's official documentation](https://docs.docker.com/get-started/introduction/build-and-push-first-image/). This project also contains [GitHub Action workflows](./.) to automatically build containers and push them to the GitHub Container Registry; if you would like to use them, you will need to copy this project directory into your own repository at the root. + +#### Coordination Server + +Snapchat Spectacles does not support WebSocket connections on `localhost` at the moment, so the server **must** be run at a public IP address with a valid (not self-signed) SSL certificate. + +Deploy anywhere that hosts containers with a public IP address behind TLS. + +> **IMPORTANT**: The server should have the environment variable `DASHBOARD_PASSWORD` set to something with a decent amount of entropy. The default web UI password is `admin` -- change it! + +For example, you may use [fly.io](https://fly.io): +```bash +brew install flyctl +cd Spectacles-2-Unitree/coordination-server +cat << EOF > fly.toml +[env] +DASHBOARD_PASSWORD = "A_RANDOM_PASSWORD" +EOF +fly launch +``` + +#### Spectacles Lens + +Open [this project](./Unitree.esproj) in Lens Studio, **version 5.4.1**. In the scene hierarchy, select the `CoordinationClient` component. Then, in the inspector panel, change the Server URL to your host, e.g. `wss://YOUR_SERVER_HOST/ws`. + +![Lens Studio UI](./README-ref/server-b.png) + +You may now deploy the Lens to your Spectacles. + +#### Unitree G1 Client + +There are two ways to run this: + +1. **No Unitree G1:** You can still connect to the client and see the simulated hand tracking! Run the container on your own machine and pass `--mock` as an argument: + ```bash + docker run -p 7000:7000 -it CONTAINER_URL --mock --server wss://SERVER_HOST/ws + ``` + +2. **With a Unitree G1:** Install the [NVIDIA container toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.17.5/install-guide.html#with-apt-ubuntu-debian) on the robot's NVIDIA Jetson Orin. Then, copy over [run-robot-client.sh](./unitree-client/run-robot-client.sh), **change CONTAINER_URL in the file to your URL**, and run it. + +The robot client currently has **two interaction modes** which are mutually exclusive and can be selected by passing the `--mode` argument to the client's container: +1. **Low-level API teleoperation**: `--mode basic_service`: default option. The robot will mirror hand movements, which will be streamed to the Spectacles Lens. +2. **High-level API teleoperation**: `--mode ai_sport`: The robot will be able to walk around and perform discrete actions. These are not rendered in the Spectacles Lens preview. + +
+ +> **IMPORTANT**: To view the simulated images in the Spectacles Lens, open the Meshcat UI in your browser after the Unitree client starts: . + +```stdout +2025-04-19 23:28:26,534 - robot_client - INFO - Initializing arms and hands IK solver... +2025-04-19 23:28:26,535 - robot_client - INFO - Building Pinocchio URDF model from /app/src/ik/urdf/g1/g1_body29_hand14.urdf, meshes from /app/src/ik/urdf/g1 +2025-04-19 23:28:41,024 - robot_client - INFO - Casadi: creating model... +2025-04-19 23:28:41,083 - robot_client - INFO - Casadi: creating symbolic variables... +2025-04-19 23:28:41,109 - robot_client - INFO - Casadi: defining error function... +2025-04-19 23:28:41,193 - robot_client - INFO - Casadi: defining optimization problem... +2025-04-19 23:28:41,256 - robot_client - INFO - Casadi: setting optimization constraints and goals... +2025-04-19 23:28:41,295 - robot_client - INFO - Casadi: done +2025-04-19 23:28:41,297 - robot_client - INFO - Setting up Meshcat visualizer... +You can open the visualizer by visiting the following URL: +http://127.0.0.1:7000/static/ # ⚠️ Open this link in your browser +``` + +![Meshcat visualization](./README-ref/meshcat.png) + +### Development + +If you'd like to hack on this project, you can open this repository in a [devcontainer](https://containers.dev/) with all dependencies installed. The Github CLI and `act` (a local Github actions runner) are also installed in the container. + +You will still need to deploy the coordination server as described above due to the current limitations with the Spectacles Interaction Kit's WebSocket implementation. + +Unless otherwise specified, all commands in this section should be run inside the devcontainer. + +#### Setup + +1. You must have a container engine like Docker Desktop or Orbstack running. +2. If using VS Code, install the [Remote Development extension pack](vscode:extension/ms-vscode-remote.vscode-remote-extensionpack). +3. Open this repository in VS Code, then open the command palette (+Shift+P) and run `> Dev Containers: Rebuild and Reopen in Container`: + + ![Command palette](./README-ref/vscode-command.png) + +1. Fetch dependencies for the server: + ```bash + cd coordination-server && uv sync + ``` +2. Fetch dependencies for the Unitree client: + ```bash + cd unitree-client \ + && source /opt/conda/etc/profile.d/conda.sh \ + && conda activate unitree-client \ + && conda env update -f environment.yml + ``` +3. The Unitree client can be run locally for testing in "mock" mode. This will allow it to run without access to the robot; it will simply print out commands as they are received: + ```bash + cd unitree-client && python src/main.py --mock --server wss://SERVER_HOST/ws + ``` + +#### Troubleshooting + +- If you see a message like `*** buffer overflow detected ***: terminated`, or `waiting for dds`, it probably means the C++ bindings for the Unitree code are attempting to connect to the robot and failing. + + In development (working off the robot), be sure to pass `--mock` when running the Unitree client. + +- If the Unitree client becomes unresponsive, you can stop the Docker container by running these commands on the host machine (either your machine or the robot's NVIDIA Jetson, depending on where you are running the client): + ```bash + docker ps + # Read the output and copy the ID of the Unitree client container + docker stop + ``` + +#### Notes on `act` + +- To use `act`, you must first authenticate with Github. Run: + ```bash + gh auth login -s repo,gist,read:org,write:packages,read:packages,delete:packages + ``` + The package permissions are needed for `act` to write to the Github package registry. +- The host's Docker socket (on MacOS and Linux at `/var/run/docker.sock`) is mounted into the container workspace for use with `act`. If your Docker socket is at a different path, you can modify the mount `source` in the [devcontainer.json](./.devcontainer/devcontainer.json) file. + +## Architecture + +The coordination server uses `aiohttp` and `jinja2` to serve a simple web interface that allows for management of client connections and monitoring messages between them. The dashboard is served at the root `/`, and the WebSocket server is served at `/ws`. Clients are automatically paired on a first-come-first-served basis. + +Clients are **not authenticated** and messages are passed transparently between paired clients without modification. If you want to deploy this in a production environment, add client authentication mechanisms. + +Both the Unitree client and the Spectacles Lens maintain a persistent WebSocket connection to the server. + +The Unitree client runs inverse kinematics calculations via [Pinocchio](https://github.com/stack-of-tasks/pinocchio), transforming the Spectacles hand and head tracking data into the robot's URDF basis. + +```mermaid +graph LR + A[Spectacles Lens] <-->|WebSocket| B[Coordination Server] + subgraph Unitree G1 Jetson Orin + subgraph Docker + C[Unitree Client] + end + D[Unitree DDS Service] + C <-->|DDS| D + end + B <-->|WebSocket| C +``` + +## Spectacles-space and Unitree-space Transformations + +Details on the transformation between the Spectacles and Unitree spaces follow. + +Recorded with [version 0.10.0 of the Spectacles Interaction Kit](https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/release-notes#v0100). + +The **Spectacles world basis** is centered on the user's head's initial starting position and uses a right-handed coordinate system. X is right, Y is up, and Z back. Translation is measured in centimeters. + +**The Unitree world basis** is centered on the robot's waist and uses a right-handed coordinate system. X is forward, Y is left, and Z is up. Translation is measured in meters. + +The Spectacles has non-uniform joint bases. +If the entries share a symbol, they use the same basis: + +- Left hand: + | N | wrist | pinky | ring | middle | index | thumb | + | --- | ----- | ----- | ---- | ------ | ----- | ----- | + | 3 | | P | R | M | M | A | + | 2 | | X | X | X | X | J | + | 1 | | X | X | X | X | J | + | 0 | X | X | X | X | X | J | +- Right hand: + | N | wrist | thumb | index | middle | ring | pinky | + | --- | ----- | ----- | ----- | ------ | ---- | ----- | + | 3 | | B | M | M | R | P | + | 2 | | K | X | X | X | X | + | 1 | | K | X | X | X | X | + | 0 | X | K | X | X | X | X | + +See [SIK landmark names](https://developers.snap.com/lens-studio/api/lens-scripting/enums/Packages_SpectaclesInteractionKit_Providers_HandInputData_LandmarkNames.LandmarkName.html) for more details. + + +Reference pose: hold left and right hands in front of the face, palms facing toward the face, and thumbs pointing outward. + +![Hand landmarks illustration](./README-ref/hands.png) + +- Right vector: Green +- Up vector: Red +- Back vector: Blue + +The following landmarks are described as transformed relative to the "X" basis. + +#### X +- Hand: left, right + - Landmarks: wrist, pinky-0, pinky-1, pinky-2, ring-0, ring-1, ring-2, middle-0, middle-1, middle-2, index-0, index-1, index-2 + - X right (index to pinky on the left hand, pinky to index on the right hand) + - Y up (fingertips to wrist) + - Z back (palm to back of hand). + +#### P + +- Hand: left, right + - Landmarks: pinky-3 + - X (X.X inverted) (pinky to index on the left hand, index to pinky on the right hand) + - Y (X.Z) (palm to back of hand) + - Z (X.Y) (fingertips to wrist) + +#### R + +- Hand: left, right + - Landmarks: ring-3 + - X (X.X) (index to pinky on the left hand, pinky to index on the right hand) + - Y (X.Z) (palm to back of hand) + - Z (X.Y inverted) (wrist to fingertips) + +#### M + +- Hand: left, right + - Landmarks: middle-3 + - X (X.X) (index to pinky on the left hand, pinky to index on the right hand) + - Y (X.Z inverted) (back of hand to palm) + - Z (X.Y) (fingertips to wrist) + +#### A + +- Hand: left + - Landmarks: thumb-3 + - X *Unverified* + - Y *Unverified* + - Z *Unverified* + +#### J + +- Hand: left + - Landmarks: thumb-0, thumb-1, thumb-2 + - X *Unverified* + - Y *Unverified* + - Z *Unverified* + +#### B + +- Hand: right + - Landmarks: thumb-3 + - X *Unverified* + - Y *Unverified* + - Z *Unverified* + +#### K + +- Hand: right + - Landmarks: thumb-0, thumb-1, thumb-2 + - X *Unverified* + - Y *Unverified* + - Z *Unverified* + +#### Spectacles to Dex3 Joint Mapping + +![Dex3 product image](./README-ref/dex-3.png) *Image credit: Unitree* + +See the [Dex3 user manual](https://marketing.unitree.com/article/en/Dex3-1/User_Manual.html) for more details. + +**Dex3 finger targeting is not currently implemented on the Unitree client.** + +**Fingertip Reference** + +These keypoints are used during Dex3 retargeting. + +| Hand | Spectacles | Unitree Dex3 Name | +| ----- | ---------- | ----------------- | +| Left | thumb-3 | thumb_tip | +| Left | pinky-3 | index_tip | +| Left | index-3 | middle_tip | +| Right | thumb-3 | thumb_tip | +| Right | index-3 | index_tip | +| Right | pinky-3 | middle_tip | + +**Joint Reference** + +These keypoints are **not used** during retargeting, this is just an "anatomical" reference. + +| Hand | Spectacles | Unitree Dex3 URDF | Unitree Dex3 Joint Name | +| ----- | ---------- | ----------------- | ----------------------- | +| Left | thumb-0 | left_hand_zero | thumb_0 | +| Left | thumb-1 | left_hand_one | thumb_1 | +| Left | thumb-2 | left_hand_two | thumb_2 | +| Left | pinky-0 | left_hand_three | index_0 | +| Left | pinky-2 | left_hand_four | index_1 | +| Left | index-0 | left_hand_five | middle_0 | +| Left | index-2 | left_hand_six | middle_1 | +| Right | thumb-0 | right_hand_zero | thumb_0 | +| Right | thumb-1 | right_hand_one | thumb_1 | +| Right | thumb-2 | right_hand_two | thumb_2 | +| Right | index-0 | right_hand_three | index_0 | +| Right | index-1 | right_hand_four | index_1 | +| Right | pinky-0 | right_hand_five | middle_0 | +| Right | pinky-2 | right_hand_six | middle_1 | + +## Licensing + +This project is provided under the [MIT license](./LICENSE). + +See [ATTRIBUTION.md](./ATTRIBUTION.md) for third-party licenses. diff --git a/Spectacles-2-Unitree/Unitree.esproj b/Spectacles-2-Unitree/Unitree.esproj new file mode 100644 index 00000000..88d94bc8 --- /dev/null +++ b/Spectacles-2-Unitree/Unitree.esproj @@ -0,0 +1,39 @@ +studioVersion: + major: 5 + minor: 4 + patch: 1 + build: 24123021 + type: Public +updateCheckpoint: 52 +sceneId: 0a1ccb1a-fe88-4fbb-9883-e3af3c75fd99 +viewConfig: + simulation: + device: Spectacles (2024) + cameraFov: nan + fullFrameAspect: 0.666660 + viewport: Maximized + output: Live + stereoOutputEye: Center + deviceTypeOverride: Unknown + cameraType: Front +metaInfo: + hints: + [] + tags: + [] + lensName: Unitree + lensDescriptors: + - EXPERIMENTAL_API + lensApplicability: + - Front + - Back + lensClientCompatibilities: + - Web + - Spectacles + platformBundlesEnabled: false + iconHash: "" + videoPreviewHash: "" + fromTemplateName: Spectacles + fromTemplateUrl: Lens Studio 5.4.1.24123021 + activationCamera: Front + sourceMapEnabled: false diff --git a/Spectacles-2-Unitree/coordination-server/Dockerfile b/Spectacles-2-Unitree/coordination-server/Dockerfile new file mode 100644 index 00000000..10e20ce4 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/Dockerfile @@ -0,0 +1,40 @@ +FROM ubuntu:noble AS build + +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + apt-transport-https \ + curl \ + gnupg \ + # Needed for some Python dependencies that want the full non-headless version of OpenCV. + libgl1 \ + libglib2.0-0 \ + lsb-release \ + python3.12 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ + +ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PYTHON_DOWNLOADS=0 + +WORKDIR /app + +ADD . . + +RUN uv sync --no-install-project --no-dev + +RUN uv sync --no-dev + +FROM ubuntu:noble AS runtime + +LABEL org.opencontainers.image.description="Spectacles-2-Unitree Coordination Server" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3.12 \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +COPY --from=build /app /app +ENV PATH="/app/.venv/bin:${PATH}" +WORKDIR /app/src +EXPOSE 80 +CMD ["python3.12", "main.py"] \ No newline at end of file diff --git a/Spectacles-2-Unitree/coordination-server/pyproject.toml b/Spectacles-2-Unitree/coordination-server/pyproject.toml new file mode 100644 index 00000000..909365b4 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/pyproject.toml @@ -0,0 +1,58 @@ +[project] + dependencies = [ + "aiohttp-jinja2>=1.6", + "aiohttp>=3.8.0", + "asyncio >=3.4.3", + "jinja2>=3.1.6", + "numpy>=2.2.3", + "opencv-contrib-python-headless>=4.11.0.86", + "pillow>=11.1.0", + "pyzmq>=26.3.0", + "websockets>=15.0", + ] + description = "Spectacles-2-Unitree Coordination Server" + name = "spectacles-2-unitree" + readme = "README.md" + requires-python = ">=3.12" + version = "0.1.0" + +[tool.ruff] + line-length = 160 + + [tool.ruff.lint] + select = [ + "A", + "ARG", + "ASYNC", + "B", + "BLE", + "C4", + "DTZ", + "E", + "EM", + "ERA", + "FBT", + "FIX", + "FURB", + "INT", + "N", + "NPY", + "PERF", + "PIE", + "PYI", + "Q", + "RET", + "RUF", + "S", + "SIM", + "SLOT", + "TRY", + "UP", + "W", + ] + unfixable = ["B"] + +[dependency-groups] +dev = [ + "scipy-stubs>=1.15.2.1", +] diff --git a/Spectacles-2-Unitree/coordination-server/src/main.py b/Spectacles-2-Unitree/coordination-server/src/main.py new file mode 100644 index 00000000..aa21aba8 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/src/main.py @@ -0,0 +1,601 @@ +import asyncio +import base64 +import json +import logging +import os +import secrets +import time +from datetime import datetime + +import aiohttp_jinja2 +import jinja2 +from aiohttp import web + +# Configure logging +logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" +) +logger = logging.getLogger(__name__) + +# Client types +CLIENT_TYPE_ROBOT = "robot" +CLIENT_TYPE_SPECTACLES = "spectacles" + +# Client connection statuses +STATUS_WAITING = "waiting" +STATUS_PAIRED = "paired" +STATUS_DISCONNECTED = "disconnected" + + +# Client and connection tracking +class Client: + def __init__(self, ws, client_type, remote_addr): + self.id = secrets.token_hex(8) # Unique identifier + self.ws = ws + self.type = client_type + self.remote_addr = remote_addr + self.connected_at = datetime.now() + self.paired_with: Client | None = None + self.messages_received = 0 + self.messages_sent = 0 + self.last_ping_time = 0 + self.last_pong_time = 0 + self.latency_history: list[float] = [] # In milliseconds + self.message_log: list[dict] = [] # Store recent messages + self.max_log_size = 100 # Limit message log size + + @property + def is_paired(self) -> bool: + return self.paired_with is not None + + @property + def avg_latency(self) -> float: + if not self.latency_history: + return 0 + return sum(self.latency_history) / len(self.latency_history) + + def log_message(self, message, direction, kind: str = "json"): + """Log a message with direction ('in' or 'out')""" + if len(self.message_log) >= self.max_log_size: + self.message_log.pop(0) # Remove oldest message + + self.message_log.append( + { + "timestamp": datetime.now().isoformat(), + "direction": direction, + "content": message, + "kind": kind + } + ) + + def to_dict(self): + """Convert client to dictionary for templates""" + return { + "id": self.id, + "type": self.type, + "remote_addr": self.remote_addr, + "connected_at": self.connected_at.isoformat(), + "is_paired": self.is_paired, + "paired_with": self.paired_with.id if self.is_paired else None, + "paired_with_type": self.paired_with.type if self.is_paired else None, + "messages_received": self.messages_received, + "messages_sent": self.messages_sent, + "avg_latency": f"{self.avg_latency:.2f}" if self.latency_history else "N/A", + } + + +# Server state +clients: dict[str, Client] = {} # id -> Client +unpaired_robots: set[str] = set() # client ids +unpaired_spectacles: set[str] = set() # client ids + +# Get dashboard password from environment variable +DASHBOARD_PASSWORD = os.environ.get("DASHBOARD_PASSWORD", "admin") + + +# Authentication middleware +@web.middleware +async def auth_middleware(request, handler): + # Skip auth for websocket, login routes, and static files + if ( + request.path == "/ws" + or request.path == "/login" + or request.path.startswith("/static/") + ): + return await handler(request) + + # Check if user is authenticated + if request.path != "/login": + if not request.cookies.get("authenticated"): + return web.HTTPFound("/login") + + return await handler(request) + + +# Force pairing handler +async def force_pair_handler(request): + client_id = request.match_info["client_id"] + + if client_id not in clients: + raise web.HTTPNotFound(text="Client not found") + + data = await request.post() + pair_with_id = data.get("pair_with") + + if not pair_with_id or pair_with_id not in clients: + return web.HTTPBadRequest(text="Invalid pairing client selected") + + client = clients[client_id] + pair_with_client = clients[pair_with_id] + + # Check if either client is already paired + if client.is_paired: + return web.HTTPBadRequest(text="Client is already paired") + + if pair_with_client.is_paired: + return web.HTTPBadRequest(text="Target client is already paired") + + # Remove from unpaired sets + if client.type == CLIENT_TYPE_ROBOT: + unpaired_robots.discard(client_id) + else: + unpaired_spectacles.discard(client_id) + + if pair_with_client.type == CLIENT_TYPE_ROBOT: + unpaired_robots.discard(pair_with_id) + else: + unpaired_spectacles.discard(pair_with_id) + + # Pair them + client.paired_with = pair_with_client + pair_with_client.paired_with = client + + # Notify both clients + asyncio.create_task(notify_client_paired(client, pair_with_client)) + asyncio.create_task(notify_client_paired(pair_with_client, client)) + + logger.info(f"Manually paired {client_id} with {pair_with_id}") + + # Redirect back to the client details + raise web.HTTPFound(f"/connection/{client_id}") + + +# Custom filter for base64 encoding binary data +def b64encode_filter(data): + """Convert binary data to base64 encoded string for use in data URIs""" + if isinstance(data, bytes): + return base64.b64encode(data).decode("utf-8") + return "" + + +# Setup the application +def create_app(): + app = web.Application(middlewares=[auth_middleware]) + + # Setup Jinja2 templates + jinja2_loader = jinja2.FileSystemLoader("templates") + jinja2_env = aiohttp_jinja2.setup(app, loader=jinja2_loader) + + # Add custom filters + jinja2_env.filters["b64encode"] = b64encode_filter + + # Add static route + app.router.add_static("/static/", "static", name="static") + + # Add routes + app.router.add_get("/", dashboard_handler) + app.router.add_get("/login", login_get_handler) + app.router.add_post("/login", login_post_handler) + app.router.add_get("/logout", logout_handler) + app.router.add_get("/connection/{client_id}", connection_details_handler) + app.router.add_post("/connection/{client_id}/close", close_connection_handler) + app.router.add_post( + "/connection/{client_id}/force-pair", force_pair_handler + ) # New route + app.router.add_get("/ws", websocket_handler) + + # Task to measure latency + app.on_startup.append(start_background_tasks) + app.on_cleanup.append(cleanup_background_tasks) + + return app + + +# Try to pair clients when a new one connects +def try_pair_clients(): + # If we have both unpaired robots and spectacles, pair them + if unpaired_robots and unpaired_spectacles: + robot_id = next(iter(unpaired_robots)) + spectacles_id = next(iter(unpaired_spectacles)) + + robot_client = clients.get(robot_id) + spectacles_client = clients.get(spectacles_id) + + if robot_client and spectacles_client: + # Pair them + robot_client.paired_with = spectacles_client + spectacles_client.paired_with = robot_client + + # Remove from unpaired sets + unpaired_robots.remove(robot_id) + unpaired_spectacles.remove(spectacles_id) + + logger.info(f"Paired robot {robot_id} with spectacles {spectacles_id}") + + # Notify both clients of successful pairing + asyncio.create_task(notify_client_paired(robot_client, spectacles_client)) + asyncio.create_task(notify_client_paired(spectacles_client, robot_client)) + + return True + + return False + + +# Notify client that it has been paired +async def notify_client_paired(client, paired_with): + if not client.ws.closed: + try: + await client.ws.send_json( + { + "type": "status_update", + "status": STATUS_PAIRED, + "message": f"You are now paired with a {paired_with.type} client", + "paired_with": {"id": paired_with.id, "type": paired_with.type}, + } + ) + except Exception as e: + logger.error(f"Error sending pairing notification to {client.id}: {e}") + + +# Notify client that its pair has disconnected +async def notify_client_unpaired(client, reason="The paired client has disconnected"): + if not client.ws.closed: + try: + await client.ws.send_json( + { + "type": "status_update", + "status": STATUS_WAITING, + "message": reason, + "client_id": client.id, + } + ) + except Exception as e: + logger.error(f"Error sending unpairing notification to {client.id}: {e}") + + +# Helper function to unpair clients +async def unpair_clients(client1, client2, reason="Clients unpaired"): + """Unpair two clients and notify both""" + # Store IDs before unpairing + client1_id = client1.id + client2_id = client2.id + + # Reset paired status + client1.paired_with = None + client2.paired_with = None + + # Add back to unpaired sets + if client1.type == CLIENT_TYPE_ROBOT: + unpaired_robots.add(client1_id) + else: + unpaired_spectacles.add(client1_id) + + if client2.type == CLIENT_TYPE_ROBOT: + unpaired_robots.add(client2_id) + else: + unpaired_spectacles.add(client2_id) + + # Notify both clients + await notify_client_unpaired(client1, reason) + await notify_client_unpaired(client2, reason) + + logger.info(f"Unpaired clients {client1_id} and {client2_id}: {reason}") + + +# Remove client from tracking +def remove_client(client_id): + if client_id in clients: + client = clients[client_id] + + # Remove from unpaired sets if present + if client.type == CLIENT_TYPE_ROBOT and client_id in unpaired_robots: + unpaired_robots.remove(client_id) + elif client.type == CLIENT_TYPE_SPECTACLES and client_id in unpaired_spectacles: + unpaired_spectacles.remove(client_id) + + # If paired, update the paired client and notify it + if client.is_paired: + paired_client = client.paired_with + paired_client.paired_with = None + + # Add the paired client back to unpaired set + if paired_client.type == CLIENT_TYPE_ROBOT: + unpaired_robots.add(paired_client.id) + else: + unpaired_spectacles.add(paired_client.id) + + # Notify paired client of disconnection + asyncio.create_task(notify_client_unpaired(paired_client)) + + # Remove client + del clients[client_id] + logger.info(f"Removed client {client_id}") + + +# Background task to measure latency periodically +async def latency_measurement_task(app): + while True: + # For each paired connection, send a ping and measure round-trip time + for client_id, client in list(clients.items()): + if client.is_paired and not client.ws.closed: + try: + # Send ping + ping_time = time.time() * 1000 # Milliseconds + client.last_ping_time = ping_time + ping_message = json.dumps({"type": "ping", "timestamp": ping_time}) + await client.ws.send_str(ping_message) + except Exception as e: + logger.error(f"Error sending ping to client {client_id}: {e}") + + await asyncio.sleep(5) # Check every 5 seconds + + +# Start background tasks +async def start_background_tasks(app): + app["latency_task"] = asyncio.create_task(latency_measurement_task(app)) + + +# Cleanup background tasks +async def cleanup_background_tasks(app): + app["latency_task"].cancel() + try: + await app["latency_task"] + except asyncio.CancelledError: + pass + + +# WebSocket handler +async def websocket_handler(request): + ws = web.WebSocketResponse() + await ws.prepare(request) + + remote_addr = request.remote + client_id = None + + try: + # Wait for client to identify itself + msg = await ws.receive_json() + + if "type" not in msg or msg["type"] not in [ + CLIENT_TYPE_ROBOT, + CLIENT_TYPE_SPECTACLES, + ]: + logger.warning(f"Client from {remote_addr} sent invalid type: {msg}") + await ws.close(code=1008, message=b"Invalid client type") + return ws + + client_type = msg["type"] + + # Create client object + client = Client(ws, client_type, remote_addr) + client_id = client.id + clients[client_id] = client + + # Add to unpaired set + if client_type == CLIENT_TYPE_ROBOT: + unpaired_robots.add(client_id) + else: + unpaired_spectacles.add(client_id) + + logger.info( + f"New {client_type} connection from {remote_addr}, assigned ID: {client_id}" + ) + + # Initial status - waiting for peer + await ws.send_json( + { + "type": "status_update", + "status": STATUS_WAITING, + "message": f"Connected as {client_type}. Waiting for a peer to connect...", + "client_id": client_id, + } + ) + + # Try to pair with a waiting client + try_pair_clients() + + # Main message processing loop + async for msg in ws: + if msg.type == web.WSMsgType.TEXT: + try: + data = json.loads(msg.data) + client.messages_received += 1 + client.log_message(data, "in") + + # Handle ping/pong for latency measurement + if data.get("type") == "pong": + pong_time = time.time() * 1000 + ping_time = data.get("ping_timestamp", 0) + if ping_time: + latency = pong_time - ping_time + client.latency_history.append(latency) + # Keep only the last 50 measurements + if len(client.latency_history) > 50: + client.latency_history.pop(0) + + # Handle unpair request + elif data.get("type") == "unpair": + if client.is_paired: + paired_client = client.paired_with + await unpair_clients( + client, paired_client, "Client requested to unpair" + ) + logger.info( + f"Client {client_id} requested to unpair from {paired_client.id}" + ) + + # If paired, relay message to the paired client + elif client.is_paired and not client.paired_with.ws.closed: + paired_client = client.paired_with + + # Add relay information + relay_data = { + **data, + "relayed": True, + "source_client": client_id, + } + + # Log outgoing message + paired_client.log_message(relay_data, "out") + paired_client.messages_sent += 1 + + await paired_client.ws.send_json(relay_data) + + except json.JSONDecodeError: + logger.warning( + f"Received non-JSON message from {client_id}: {msg.data}" + ) + + elif msg.type == web.WSMsgType.BINARY: + # Image data + client.messages_received += 1 + client.log_message(msg.data, "in", "bytes") + if client.is_paired and not client.paired_with.ws.closed: + paired_client = client.paired_with + paired_client.messages_sent += 1 + paired_client.log_message(msg.data, "out", "bytes") + await paired_client.ws.send_bytes(msg.data) + + elif msg.type == web.WSMsgType.ERROR: + logger.error( + f"WebSocket connection closed with error: {ws.exception()}" + ) + break + + except Exception as e: + logger.error(f"Error handling WebSocket connection: {e}") + + finally: + # Clean up when connection closes + if client_id: + remove_client(client_id) + + return ws + + +# Dashboard handler +@aiohttp_jinja2.template("dashboard.html") +async def dashboard_handler(request): + # Get all clients + all_clients = [client.to_dict() for client in clients.values()] + + # Split by type and paired status + unpaired_robot_clients = [ + c for c in all_clients if c["type"] == CLIENT_TYPE_ROBOT and not c["is_paired"] + ] + unpaired_spectacles_clients = [ + c + for c in all_clients + if c["type"] == CLIENT_TYPE_SPECTACLES and not c["is_paired"] + ] + paired_clients = [c for c in all_clients if c["is_paired"]] + + return { + "unpaired_robots": unpaired_robot_clients, + "unpaired_spectacles": unpaired_spectacles_clients, + "paired_clients": paired_clients, + "total_count": len(all_clients), + } + + +# Connection details handler +@aiohttp_jinja2.template("connection_details.html") +async def connection_details_handler(request): + client_id = request.match_info["client_id"] + + if client_id not in clients: + raise web.HTTPNotFound(text="Client not found") + + client = clients[client_id] + client_info = client.to_dict() + + # Add message log + client_info["message_log"] = client.message_log + + # Find available clients for pairing + available_clients = [] + if not client.is_paired: + for cid, c in clients.items(): + # Only show unpaired clients of the opposite type + if cid != client_id and not c.is_paired and c.type != client.type: + available_clients.append(c.to_dict()) + + return {"client": client_info, "available_clients": available_clients} + + +# Close connection handler +async def close_connection_handler(request): + client_id = request.match_info["client_id"] + + if client_id not in clients: + raise web.HTTPNotFound(text="Client not found") + + client = clients[client_id] + + # Check if paired and send notification to paired client first + if client.is_paired: + paired_client = client.paired_with + await notify_client_unpaired( + paired_client, "The paired client was closed by the server" + ) + + # Send close message to the closing client + try: + await client.ws.send_json( + { + "type": "status_update", + "status": STATUS_DISCONNECTED, + "message": "Connection closed by server", + } + ) + await client.ws.close() + except Exception as e: + logger.error(f"Error closing connection {client_id}: {e}") + + # Remove client + remove_client(client_id) + + # Redirect back to dashboard + raise web.HTTPFound("/") + + +# Login handlers +@aiohttp_jinja2.template("login.html") +async def login_get_handler(request): + return {} + + +async def login_post_handler(request): + data = await request.post() + password = data.get("password", "") + + if password == DASHBOARD_PASSWORD: + response = web.HTTPFound("/") + response.set_cookie("authenticated", "true", max_age=3600) # 1 hour + return response + + # Incorrect password, show login page again with error + context = {"error": "Invalid password"} + return aiohttp_jinja2.render_template("login.html", request, context) + + +async def logout_handler(request): + response = web.HTTPFound("/login") + response.del_cookie("authenticated") + return response + + +if __name__ == "__main__": + app = create_app() + port = int(os.environ.get("PORT", 80)) + web.run_app(app, host="0.0.0.0", port=port) diff --git a/Spectacles-2-Unitree/coordination-server/src/static/styles.css b/Spectacles-2-Unitree/coordination-server/src/static/styles.css new file mode 100644 index 00000000..7dc25efd --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/src/static/styles.css @@ -0,0 +1,282 @@ +:root { + --primary-color: #3498db; + --secondary-color: #2ecc71; + --warning-color: #f39c12; + --danger-color: #e74c3c; + --light-gray: #f5f5f5; + --dark-gray: #333; + --medium-gray: #777; + --border-color: #ddd; +} + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + line-height: 1.6; + color: var(--dark-gray); + background-color: #f9f9f9; + padding: 0; + margin: 0; +} + +header { + background-color: var(--dark-gray); + color: white; + padding: 1rem 2rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +nav { + display: flex; + gap: 10px; +} + +h1, +h2, +h3 { + margin-bottom: 1rem; +} + +a { + color: var(--primary-color); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* Buttons */ +.btn { + display: inline-block; + background-color: var(--primary-color); + color: white; + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + cursor: pointer; + text-decoration: none; + font-size: 0.9rem; +} + +.btn:hover { + opacity: 0.9; + text-decoration: none; +} + +.btn.small { + padding: 0.3rem 0.6rem; + font-size: 0.8rem; +} + +.btn.primary { + background-color: var(--primary-color); +} + +.btn.secondary { + background-color: var(--secondary-color); +} + +.btn.danger { + background-color: var(--danger-color); +} + +/* Login Form */ +.login-container { + max-width: 400px; + margin: 5rem auto; + padding: 2rem; + background-color: white; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +.form-group { + margin-bottom: 1.5rem; +} + +.form-group label { + display: block; + margin-bottom: 0.5rem; + font-weight: 500; +} + +.form-group input { + width: 100%; + padding: 0.5rem; + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 1rem; +} + +.error-message { + color: var(--danger-color); + margin-bottom: 1rem; + padding: 0.5rem; + background-color: rgba(231, 76, 60, 0.1); + border-radius: 4px; +} + +/* Dashboard */ +.status-banner { + background-color: var(--light-gray); + padding: 1rem 2rem; + border-bottom: 1px solid var(--border-color); + display: flex; + flex-wrap: wrap; + gap: 2rem; +} + +.dashboard-container { + padding: 2rem; +} + +.dashboard-section { + background-color: white; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); + padding: 1.5rem; + margin-bottom: 2rem; +} + +/* Tables */ +table { + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +} + +th, +td { + padding: 0.75rem; + text-align: left; + border-bottom: 1px solid var(--border-color); +} + +th { + background-color: var(--light-gray); + font-weight: 600; +} + +tr:hover { + background-color: rgba(0, 0, 0, 0.02); +} + +/* Badges */ +.badge { + display: inline-block; + padding: 0.3rem 0.6rem; + border-radius: 4px; + font-size: 0.8rem; + font-weight: 500; + text-transform: uppercase; +} + +.badge.robot { + background-color: rgba(52, 152, 219, 0.2); + color: var(--primary-color); +} + +.badge.spectacles { + background-color: rgba(46, 204, 113, 0.2); + color: var(--secondary-color); +} + +/* Connection Details */ +.details-container { + padding: 2rem; +} + +.details-section { + background-color: white; + border-radius: 8px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.05); + padding: 1.5rem; + margin-bottom: 2rem; +} + +.details-table { + width: 100%; + margin-bottom: 1.5rem; +} + +.details-table th { + width: 200px; + text-align: right; + padding-right: 1rem; +} + +.actions { + margin-top: 2rem; + display: flex; + gap: 1rem; +} + +/* Message Log */ +.message-log { + max-height: 500px; + overflow-y: auto; +} + +.log-container { + border: 1px solid var(--border-color); + border-radius: 4px; + max-height: 400px; + overflow-y: auto; + background-color: var(--light-gray); +} + +.log-entry { + padding: 0.75rem; + border-bottom: 1px solid var(--border-color); + font-family: monospace; + font-size: 0.9rem; +} + +.log-entry:last-child { + border-bottom: none; +} + +.log-entry.in { + background-color: rgba(52, 152, 219, 0.1); +} + +.log-entry.out { + background-color: rgba(46, 204, 113, 0.1); +} + +.log-timestamp { + color: var(--medium-gray); + font-size: 0.8rem; + margin-bottom: 0.3rem; +} + +.log-content { + word-break: break-all; + white-space: pre-wrap; +} + +/* Responsive Design */ +@media (max-width: 768px) { + header { + flex-direction: column; + text-align: center; + gap: 1rem; + } + + .status-banner { + flex-direction: column; + gap: 0.5rem; + } + + .details-table th { + width: 120px; + } +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/coordination-server/src/templates/connection_details.html b/Spectacles-2-Unitree/coordination-server/src/templates/connection_details.html new file mode 100644 index 00000000..1a678450 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/src/templates/connection_details.html @@ -0,0 +1,170 @@ + + + + + Connection Details - Spectacles-2-Unitree Coordination Server + + + + + + +
+

Connection Details

+ +
+ +
+
+

Client Information

+ + + + + + + + + + + + + + + + + + + + + + {% if client.is_paired %} + + + + + {% endif %} + + + + + + + + + + + + +
ID:{{ client.id }}
Type:{{ client.type }}
IP Address:{{ client.remote_addr }}
Connected At:{{ client.connected_at }}
Paired Status:{{ "Paired" if client.is_paired else "Unpaired" }}
Paired With:{{ client.paired_with }} ({{ client.paired_with_type }})
Messages Received:{{ client.messages_received }}
Messages Sent:{{ client.messages_sent }}
Average Latency:{{ client.avg_latency }} ms
+ +
+
+ +
+
+ {% if not client.is_paired %} +
+

Manually Pair Client

+
+
+ + +
+ +
+
+ {% endif %} +
+ +
+

Message Log

+ {% if client.message_log %} +
+ {% for message in client.message_log %} +
+
{{ message.timestamp }}
+
+ {% if message.kind == "bytes" %} + + Image data (RGBA format) + + {% else %} + {{ message.content | tojson }} + {% endif %} +
+
+ {% endfor %} +
+ {% else %} +

No messages logged yet

+ {% endif %} +
+
+ + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/coordination-server/src/templates/dashboard.html b/Spectacles-2-Unitree/coordination-server/src/templates/dashboard.html new file mode 100644 index 00000000..18cf1388 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/src/templates/dashboard.html @@ -0,0 +1,137 @@ + + + + + Dashboard - Spectacles-2-Unitree Coordination Server + + + + + + +
+

Spectacles-2-Unitree Coordination Server

+ +
+ +
+

Server Status: Running

+

Active Connections: {{ total_count }}

+

Last Updated:

+
+ +
+
+

Paired Connections

+ {% if paired_clients %} + + + + + + + + + + + + + + + {% for client in paired_clients %} + + + + + + + + + + + {% endfor %} + +
IDTypeIP AddressConnected SincePaired WithAvg LatencyMessagesActions
{{ client.id }}{{ client.type }}{{ client.remote_addr }}{{ client.connected_at }}{{ client.paired_with }}{{ client.avg_latency }} ms{{ client.messages_received }} / {{ client.messages_sent }} + Details +
+ {% else %} +

No paired connections

+ {% endif %} +
+ +
+

Unpaired Robots

+ {% if unpaired_robots %} + + + + + + + + + + + {% for client in unpaired_robots %} + + + + + + + {% endfor %} + +
IDIP AddressConnected SinceActions
{{ client.id }}{{ client.remote_addr }}{{ client.connected_at }} + Details +
+ {% else %} +

No unpaired robots

+ {% endif %} +
+ +
+

Unpaired Spectacles

+ {% if unpaired_spectacles %} + + + + + + + + + + + {% for client in unpaired_spectacles %} + + + + + + + {% endfor %} + +
IDIP AddressConnected SinceActions
{{ client.id }}{{ client.remote_addr }}{{ client.connected_at }} + Details +
+ {% else %} +

No unpaired spectacles

+ {% endif %} +
+
+ + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/coordination-server/src/templates/login.html b/Spectacles-2-Unitree/coordination-server/src/templates/login.html new file mode 100644 index 00000000..efb3b102 --- /dev/null +++ b/Spectacles-2-Unitree/coordination-server/src/templates/login.html @@ -0,0 +1,26 @@ + + + + + Login - Spectacles-2-Unitree Coordination Server + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/devcontainer.json b/Spectacles-2-Unitree/devcontainer.json new file mode 100644 index 00000000..49953d73 --- /dev/null +++ b/Spectacles-2-Unitree/devcontainer.json @@ -0,0 +1,24 @@ +// For format details, see https://aka.ms/devcontainer.json. +{ + "name": "Spectacles-2-Unitree dev", + "build": { + "dockerfile": "Dockerfile", + "context": "..", + "options": [ + "--platform=linux/arm64" + ] + }, + "mounts": [ + { + "source": "/var/run/docker.sock", + "target": "/var/run/docker.sock", + "type": "bind" + } + ], + "runArgs": [ + "--platform=linux/arm64" + ], + "forwardPorts": [ + 8080 + ] +} \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/Dockerfile b/Spectacles-2-Unitree/unitree-client/Dockerfile new file mode 100644 index 00000000..b6622d07 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/Dockerfile @@ -0,0 +1,94 @@ +FROM nvcr.io/nvidia/l4t-cuda:11.4.19-runtime AS base + +ARG UV_VERSION=0.6.2 + +ENV DEBIAN_FRONTEND=noninteractive \ + CYCLONEDDS_HOME=/usr/local + +RUN apt-get update \ + && apt-get install -y \ + software-properties-common \ + bzip2 \ + curl \ + git \ + cmake \ + ca-certificates \ + libgl1 \ + libglib2.0-0 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN add-apt-repository -y ppa:deadsnakes/ppa \ + && apt-get update \ + && apt-get install -y \ + python3.10 \ + libpython3.10-dev \ + python3.10-dev \ + python3.10-venv \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +RUN curl -fsSL https://neuro.debian.net/_static/neuro.debian.net.asc \ + | gpg --dearmor -o /etc/apt/trusted.gpg.d/neurodebian.gpg \ + && curl -fsSL http://neuro.debian.net/lists/bookworm.us-ca.full > /etc/apt/sources.list.d/neurodebian.sources.list + +FROM base AS builder + +# Build CycloneDDS: the unitree-sdk2py depends on CycloneDDS 0.10.2 +RUN git clone --branch=0.10.2 https://github.com/eclipse-cyclonedds/cyclonedds /tmp/cyclonedds \ + && cd /tmp/cyclonedds \ + && mkdir build && cd build \ + && cmake ..\ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DENABLE_PACKAGING=ON \ + -DENABLE_TYPELIB=ON \ + && cmake --build . -j$(nproc) --target install \ + && cd / \ + && rm -rf /tmp/cyclonedds +RUN ln -s /usr/local/lib/pkgconfig/CycloneDDS.pc /usr/local/lib/pkgconfig/cyclonedds.pc + +RUN curl -fsSL https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh -o /tmp/miniforge.sh \ + && chmod +x /tmp/miniforge.sh \ + && /tmp/miniforge.sh -b -p /opt/conda \ + && rm /tmp/miniforge.sh + +SHELL ["/bin/bash", "-c"] + +ENV PATH="/opt/conda/bin:${PATH}" + +COPY environment.yml environment.yml + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda env create -f environment.yml \ + && conda clean -afy + +FROM base AS runtime + +LABEL org.opencontainers.image.description="Spectacles-2-Unitree Robot Client" + +ENV LD_LIBRARY_PATH="/app/.venv/lib64/python3.10/site-packages/casadi:$LD_LIBRARY_PATH" +ENV PATH="/opt/conda/bin:${PATH}" + +COPY --from=builder /usr/local/ /usr/local +COPY --from=builder /opt/conda/ /opt/conda + +RUN apt-get update && apt-get install -y \ + iproute2 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +SHELL ["/bin/bash", "-c"] + +RUN source /opt/conda/etc/profile.d/conda.sh \ + && conda activate unitree-client \ + && pip install --no-cache-dir \ + meshcat@git+https://github.com/TastyDucks/meshcat-python.git \ + unitree_sdk2py@git+https://github.com/TastyDucks/unitree_sdk2_python.git \ + cyclonedds==0.10.2 + +WORKDIR /app + +COPY . . + +WORKDIR /app/src +ENTRYPOINT ["/bin/bash", "-c", "source /opt/conda/etc/profile.d/conda.sh && conda activate unitree-client && exec python main.py \"$@\"", "--"] \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/environment.yml b/Spectacles-2-Unitree/unitree-client/environment.yml new file mode 100644 index 00000000..5764c7e9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/environment.yml @@ -0,0 +1,14 @@ +name: unitree-client +channels: + - conda-forge +dependencies: + - python=3.11 + - pip + - pinocchio + - casadi >=3.7.0 + - ipython >=8.34.0 + - mujoco >=3.2.7 + - numpy =1.26.4 + - pyzmq >=26.3.0 + - scipy >=1.15.2 + - websockets >=15.0 \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/run-robot-client.sh b/Spectacles-2-Unitree/unitree-client/run-robot-client.sh new file mode 100644 index 00000000..43c309fa --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/run-robot-client.sh @@ -0,0 +1,9 @@ +sudo docker run \ + -p 7000:7000 \ + -it \ + --rm \ + --runtime=nvidia \ + --gpus=all \ + --net=host \ + --cap-add=NET_ADMIN \ + CONTAINER_URL \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/__init__.py b/Spectacles-2-Unitree/unitree-client/src/ik/__init__.py new file mode 100644 index 00000000..18d0cfdd --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/__init__.py @@ -0,0 +1,3 @@ +""" +Inverse Kinematics (IK) module +""" diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/g1_controller.py b/Spectacles-2-Unitree/unitree-client/src/ik/g1_controller.py new file mode 100644 index 00000000..9a9c70b6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/g1_controller.py @@ -0,0 +1,331 @@ +# SPDX-License-Identifier: Apache-2.0 +# ruff: noqa: N801, N802, N803, N806, N815, N816 +import threading +import time +from enum import IntEnum + +import numpy as np +from unitree_sdk2py.core.channel import ChannelPublisher, ChannelSubscriber +from unitree_sdk2py.idl.default import unitree_hg_msg_dds__LowCmd_ +from unitree_sdk2py.idl.unitree_hg.msg.dds_ import LowCmd_, LowState_ # idl +from unitree_sdk2py.utils.crc import CRC + +kTopicLowCommand = "rt/lowcmd" +kTopicLowState = "rt/lowstate" +G1_29_Num_Motors = 35 + + +class MotorState: + def __init__(self): + self.q = None + self.dq = None + + +class G1_29_LowState: + def __init__(self): + self.motor_state = [MotorState() for _ in range(G1_29_Num_Motors)] + + +class DataBuffer: + def __init__(self): + self.data = None + self.lock = threading.Lock() + + def GetData(self): + with self.lock: + return self.data + + def SetData(self, data): + with self.lock: + self.data = data + + +class G1_29_ArmController: + def __init__(self): + print("Initialize G1_29_ArmController...") + self.q_target = np.zeros(14) + self.tauff_target = np.zeros(14) + + self.kp_high = 300.0 + self.kd_high = 3.0 + self.kp_low = 80.0 + self.kd_low = 3.0 + self.kp_wrist = 40.0 + self.kd_wrist = 1.5 + + self.all_motor_q = None + self.arm_velocity_limit = 20.0 + self.control_dt = 1.0 / 250.0 + + self._speed_gradual_max = False + self._gradual_start_time = None + self._gradual_time = None + + # initialize lowcmd publisher and lowstate subscriber + self.lowcmd_publisher = ChannelPublisher(kTopicLowCommand, LowCmd_) + self.lowcmd_publisher.Init() + self.lowstate_subscriber = ChannelSubscriber(kTopicLowState, LowState_) + self.lowstate_subscriber.Init() + self.lowstate_buffer = DataBuffer() + + # initialize subscribe thread + self.subscribe_thread = threading.Thread(target=self._subscribe_motor_state) + self.subscribe_thread.daemon = True + self.subscribe_thread.start() + + while not self.lowstate_buffer.GetData(): + time.sleep(0.01) + print("[G1_29_ArmController] Waiting to subscribe dds...") + + # initialize hg's lowcmd msg + self.crc = CRC() + self.msg = unitree_hg_msg_dds__LowCmd_() + self.msg.mode_pr = 0 + self.msg.mode_machine = self.get_mode_machine() + + self.all_motor_q = self.get_current_motor_q() + print(f"Current all body motor state q:\n{self.all_motor_q} \n") + print(f"Current two arms motor state q:\n{self.get_current_dual_arm_q()}\n") + print("Lock all joints except two arms...\n") + + arm_indices = set(member.value for member in G1_29_JointArmIndex) + for id in G1_29_JointIndex: + self.msg.motor_cmd[id].mode = 1 + if id.value in arm_indices: + if self._Is_wrist_motor(id): + self.msg.motor_cmd[id].kp = self.kp_wrist + self.msg.motor_cmd[id].kd = self.kd_wrist + else: + self.msg.motor_cmd[id].kp = self.kp_low + self.msg.motor_cmd[id].kd = self.kd_low + else: + if self._Is_weak_motor(id): + self.msg.motor_cmd[id].kp = self.kp_low + self.msg.motor_cmd[id].kd = self.kd_low + else: + self.msg.motor_cmd[id].kp = self.kp_high + self.msg.motor_cmd[id].kd = self.kd_high + self.msg.motor_cmd[id].q = self.all_motor_q[id] + print("Lock OK!\n") + + self.publish_thread = threading.Thread(target=self._ctrl_motor_state) + self.ctrl_lock = threading.Lock() + self.publish_thread.daemon = True + self.publish_thread.start() + + print("Initialize G1_29_ArmController OK!\n") + + def pause_publish_thread(self): + """Pause the publish thread.""" + self.publish_thread_pause_event.clear() + print("[G1_29_ArmController] Publish thread paused.") + + def resume_publish_thread(self): + """Resume the publish thread.""" + self.publish_thread_pause_event.set() + + def _subscribe_motor_state(self): + while True: + msg = self.lowstate_subscriber.Read() + if msg is not None: + lowstate = G1_29_LowState() + for id in range(G1_29_Num_Motors): + lowstate.motor_state[id].q = msg.motor_state[id].q + lowstate.motor_state[id].dq = msg.motor_state[id].dq + self.lowstate_buffer.SetData(lowstate) + time.sleep(0.002) + + def clip_arm_q_target(self, target_q, velocity_limit): + current_q = self.get_current_dual_arm_q() + delta = target_q - current_q + motion_scale = np.max(np.abs(delta)) / (velocity_limit * self.control_dt) + cliped_arm_q_target = current_q + delta / max(motion_scale, 1.0) + return cliped_arm_q_target + + def _ctrl_motor_state(self): + while True: + start_time = time.time() + + with self.ctrl_lock: + arm_q_target = self.q_target + arm_tauff_target = self.tauff_target + + cliped_arm_q_target = self.clip_arm_q_target( + arm_q_target, velocity_limit=self.arm_velocity_limit + ) + + for idx, id in enumerate(G1_29_JointArmIndex): + self.msg.motor_cmd[id].q = cliped_arm_q_target[idx] + self.msg.motor_cmd[id].dq = 0 + self.msg.motor_cmd[id].tau = arm_tauff_target[idx] + + self.msg.crc = self.crc.Crc(self.msg) + self.lowcmd_publisher.Write(self.msg) + + if self._speed_gradual_max is True: + t_elapsed = start_time - self._gradual_start_time + self.arm_velocity_limit = 20.0 + (10.0 * min(1.0, t_elapsed / 5.0)) + + current_time = time.time() + all_t_elapsed = current_time - start_time + sleep_time = max(0, (self.control_dt - all_t_elapsed)) + time.sleep(sleep_time) + # print(f"arm_velocity_limit:{self.arm_velocity_limit}") + # print(f"sleep_time:{sleep_time}") + + def ctrl_dual_arm(self, q_target, tauff_target): + """Set control target values q & tau of the left and right arm motors.""" + with self.ctrl_lock: + self.q_target = q_target + self.tauff_target = tauff_target + + def get_mode_machine(self): + """Return current dds mode machine.""" + return self.lowstate_subscriber.Read().mode_machine + + def get_current_motor_q(self): + """Return current state q of all body motors.""" + return np.array( + [ + self.lowstate_buffer.GetData().motor_state[id].q + for id in G1_29_JointIndex + ] + ) + + def get_current_dual_arm_q(self): + """Return current state q of the left and right arm motors.""" + return np.array( + [ + self.lowstate_buffer.GetData().motor_state[id].q + for id in G1_29_JointArmIndex + ] + ) + + def get_current_dual_arm_dq(self): + """Return current state dq of the left and right arm motors.""" + return np.array( + [ + self.lowstate_buffer.GetData().motor_state[id].dq + for id in G1_29_JointArmIndex + ] + ) + + def ctrl_dual_arm_go_home(self): + """Move both the left and right arms of the robot to their home position by setting the target joint angles (q) and torques (tau) to zero.""" + print("[G1_29_ArmController] ctrl_dual_arm_go_home start...") + with self.ctrl_lock: + self.q_target = np.zeros(14) + # self.tauff_target = np.zeros(14) + tolerance = 0.05 # Tolerance threshold for joint angles to determine "close to zero", can be adjusted based on your motor's precision requirements + while True: + current_q = self.get_current_dual_arm_q() + if np.all(np.abs(current_q) < tolerance): + print("[G1_29_ArmController] both arms have reached the home position.") + break + time.sleep(0.05) + + def speed_gradual_max(self, t=5.0): + """Parameter t is the total time required for arms velocity to gradually increase to its maximum value, in seconds. The default is 5.0.""" + self._gradual_start_time = time.time() + self._gradual_time = t + self._speed_gradual_max = True + + def speed_instant_max(self): + """set arms velocity to the maximum value immediately, instead of gradually increasing.""" + self.arm_velocity_limit = 30.0 + + def _Is_weak_motor(self, motor_index): + weak_motors = [ + G1_29_JointIndex.kLeftAnklePitch.value, + G1_29_JointIndex.kRightAnklePitch.value, + # Left arm + G1_29_JointIndex.kLeftShoulderPitch.value, + G1_29_JointIndex.kLeftShoulderRoll.value, + G1_29_JointIndex.kLeftShoulderYaw.value, + G1_29_JointIndex.kLeftElbow.value, + # Right arm + G1_29_JointIndex.kRightShoulderPitch.value, + G1_29_JointIndex.kRightShoulderRoll.value, + G1_29_JointIndex.kRightShoulderYaw.value, + G1_29_JointIndex.kRightElbow.value, + ] + return motor_index.value in weak_motors + + def _Is_wrist_motor(self, motor_index): + wrist_motors = [ + G1_29_JointIndex.kLeftWristRoll.value, + G1_29_JointIndex.kLeftWristPitch.value, + G1_29_JointIndex.kLeftWristyaw.value, + G1_29_JointIndex.kRightWristRoll.value, + G1_29_JointIndex.kRightWristPitch.value, + G1_29_JointIndex.kRightWristYaw.value, + ] + return motor_index.value in wrist_motors + + +class G1_29_JointArmIndex(IntEnum): + # Left arm + kLeftShoulderPitch = 15 + kLeftShoulderRoll = 16 + kLeftShoulderYaw = 17 + kLeftElbow = 18 + kLeftWristRoll = 19 + kLeftWristPitch = 20 + kLeftWristyaw = 21 + + # Right arm + kRightShoulderPitch = 22 + kRightShoulderRoll = 23 + kRightShoulderYaw = 24 + kRightElbow = 25 + kRightWristRoll = 26 + kRightWristPitch = 27 + kRightWristYaw = 28 + + +class G1_29_JointIndex(IntEnum): + # Left leg + kLeftHipPitch = 0 + kLeftHipRoll = 1 + kLeftHipYaw = 2 + kLeftKnee = 3 + kLeftAnklePitch = 4 + kLeftAnkleRoll = 5 + + # Right leg + kRightHipPitch = 6 + kRightHipRoll = 7 + kRightHipYaw = 8 + kRightKnee = 9 + kRightAnklePitch = 10 + kRightAnkleRoll = 11 + + kWaistYaw = 12 + kWaistRoll = 13 + kWaistPitch = 14 + + # Left arm + kLeftShoulderPitch = 15 + kLeftShoulderRoll = 16 + kLeftShoulderYaw = 17 + kLeftElbow = 18 + kLeftWristRoll = 19 + kLeftWristPitch = 20 + kLeftWristyaw = 21 + + # Right arm + kRightShoulderPitch = 22 + kRightShoulderRoll = 23 + kRightShoulderYaw = 24 + kRightElbow = 25 + kRightWristRoll = 26 + kRightWristPitch = 27 + kRightWristYaw = 28 + + # not used + kNotUsedJoint0 = 29 + kNotUsedJoint1 = 30 + kNotUsedJoint2 = 31 + kNotUsedJoint3 = 32 + kNotUsedJoint4 = 33 + kNotUsedJoint5 = 34 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/g1_solver.py b/Spectacles-2-Unitree/unitree-client/src/ik/g1_solver.py new file mode 100644 index 00000000..21e121a3 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/g1_solver.py @@ -0,0 +1,382 @@ +# SPDX-License-Identifier: Apache-2.0 AND MIT +# Copyright 2025 HangZhou YuShu TECHNOLOGY CO.,LTD. ("Unitree Robotics") +# +# 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. +# +# Modifications copyright (c) 2025 Patrick Rose, MIT License +# Copied from https://github.com/unitreerobotics/avp_teleoperate/blob/20633f692d3b6d985ab12cb038cb05e817eabfe3/teleop/robot_control/robot_arm_ik.py +# ruff: noqa: N801, N802, N803, N806, N815, N816 +import logging +import os + +import casadi +import meshcat +import meshcat.geometry as mg +import numpy as np +import pinocchio as pin +from PIL import Image +from pinocchio import casadi as cpin +from pinocchio.visualize import MeshcatVisualizer + +from ik.utils.weighted_moving_filter import WeightedMovingFilter + +logger = logging.getLogger("robot_client") + + +class G1_29_ArmIK: + def __init__(self, Unit_Test=False, Visualization=False): + np.set_printoptions(precision=5, suppress=True, linewidth=200) + + self.Unit_Test = Unit_Test + self.Visualization = Visualization + + self.left_wrist = np.eye(4) + self.right_wrist = np.eye(4) + + script_dir = os.path.dirname(os.path.abspath(__file__)) + + # Construct absolute paths relative to the script directory + urdf_file_path = os.path.join(script_dir, "urdf/g1/g1_body29_hand14.urdf") + mesh_dir = os.path.dirname(urdf_file_path) + logger.info( + f"Building Pinocchio URDF model from {urdf_file_path}, meshes from {mesh_dir}" + ) + self.robot = pin.RobotWrapper.BuildFromURDF(urdf_file_path, [mesh_dir]) + + self.mixed_jointsToLockIDs = [ + "left_hip_pitch_joint", + "left_hip_roll_joint", + "left_hip_yaw_joint", + "left_knee_joint", + "left_ankle_pitch_joint", + "left_ankle_roll_joint", + "right_hip_pitch_joint", + "right_hip_roll_joint", + "right_hip_yaw_joint", + "right_knee_joint", + "right_ankle_pitch_joint", + "right_ankle_roll_joint", + "waist_yaw_joint", + "waist_roll_joint", + "waist_pitch_joint", + "left_hand_thumb_0_joint", + "left_hand_thumb_1_joint", + "left_hand_thumb_2_joint", + "left_hand_middle_0_joint", + "left_hand_middle_1_joint", + "left_hand_index_0_joint", + "left_hand_index_1_joint", + "right_hand_thumb_0_joint", + "right_hand_thumb_1_joint", + "right_hand_thumb_2_joint", + "right_hand_index_0_joint", + "right_hand_index_1_joint", + "right_hand_middle_0_joint", + "right_hand_middle_1_joint", + ] + + self.reduced_robot = self.robot.buildReducedRobot( + list_of_joints_to_lock=self.mixed_jointsToLockIDs, + reference_configuration=np.array([0.0] * self.robot.model.nq), + ) + + self.reduced_robot.model.addFrame( + pin.Frame( + "L_ee", + self.reduced_robot.model.getJointId("left_wrist_yaw_joint"), + pin.SE3(np.eye(3), np.array([0.05, 0, 0]).T), + pin.FrameType.OP_FRAME, + ) + ) + + self.reduced_robot.model.addFrame( + pin.Frame( + "R_ee", + self.reduced_robot.model.getJointId("right_wrist_yaw_joint"), + pin.SE3(np.eye(3), np.array([0.05, 0, 0]).T), + pin.FrameType.OP_FRAME, + ) + ) + + # for i in range(self.reduced_robot.model.nframes): + # frame = self.reduced_robot.model.frames[i] + # frame_id = self.reduced_robot.model.getFrameId(frame.name) + # print(f"Frame ID: {frame_id}, Name: {frame.name}") + + # Creating Casadi models and data for symbolic computing + + logger.info("Casadi: creating model...") + + self.cmodel = cpin.Model(self.reduced_robot.model) + self.cdata = self.cmodel.createData() + + logger.info("Casadi: creating symbolic variables...") + + # Creating symbolic variables + self.cq = casadi.SX.sym("q", self.reduced_robot.model.nq, 1) + self.cTf_l = casadi.SX.sym("tf_l", 4, 4) + self.cTf_r = casadi.SX.sym("tf_r", 4, 4) + cpin.framesForwardKinematics(self.cmodel, self.cdata, self.cq) + + logger.info("Casadi: defining error function...") + + # Get the hand joint ID and define the error function + self.L_hand_id = self.reduced_robot.model.getFrameId("L_ee") + self.R_hand_id = self.reduced_robot.model.getFrameId("R_ee") + + self.translational_error = casadi.Function( + "translational_error", + [self.cq, self.cTf_l, self.cTf_r], + [ + casadi.vertcat( + self.cdata.oMf[self.L_hand_id].translation - self.cTf_l[:3, 3], + self.cdata.oMf[self.R_hand_id].translation - self.cTf_r[:3, 3], + ) + ], + ) + self.rotational_error = casadi.Function( + "rotational_error", + [self.cq, self.cTf_l, self.cTf_r], + [ + casadi.vertcat( + cpin.log3( + self.cdata.oMf[self.L_hand_id].rotation @ self.cTf_l[:3, :3].T + ), + cpin.log3( + self.cdata.oMf[self.R_hand_id].rotation @ self.cTf_r[:3, :3].T + ), + ) + ], + ) + + logger.info("Casadi: defining optimization problem...") + + # Defining the optimization problem + self.opti = casadi.Opti() + self.var_q = self.opti.variable(self.reduced_robot.model.nq) + self.var_q_last = self.opti.parameter(self.reduced_robot.model.nq) # for smooth + self.param_tf_l = self.opti.parameter(4, 4) + self.param_tf_r = self.opti.parameter(4, 4) + self.translational_cost = casadi.sumsqr( + self.translational_error(self.var_q, self.param_tf_l, self.param_tf_r) + ) + self.rotation_cost = casadi.sumsqr( + self.rotational_error(self.var_q, self.param_tf_l, self.param_tf_r) + ) + self.regularization_cost = casadi.sumsqr(self.var_q) + self.smooth_cost = casadi.sumsqr(self.var_q - self.var_q_last) + + logger.info("Casadi: setting optimization constraints and goals...") + + # Setting optimization constraints and goals + self.opti.subject_to( + self.opti.bounded( + self.reduced_robot.model.lowerPositionLimit, + self.var_q, + self.reduced_robot.model.upperPositionLimit, + ) + ) + self.opti.minimize( + 50 * self.translational_cost + + self.rotation_cost + + 0.02 * self.regularization_cost + + 0.1 * self.smooth_cost + ) + + opts = { + "ipopt": {"print_level": 0, "max_iter": 50, "tol": 1e-6}, + "print_time": False, # print or not + "calc_lam_p": False, # https://github.com/casadi/casadi/wiki/FAQ:-Why-am-I-getting-%22NaN-detected%22in-my-optimization%3F + } + self.opti.solver("ipopt", opts) + + self.init_data = np.zeros( + self.reduced_robot.model.nq + ) # TODO: If current approach of toggling states doesn't work, set this to `29`? + self.smooth_filter = WeightedMovingFilter(np.array([0.4, 0.3, 0.2, 0.1]), 14) + self.vis = None + + logger.info("Casadi: done") + + if self.Visualization: + logger.info("Setting up Meshcat visualizer...") + + # Initialize the Meshcat visualizer for visualization + visualizer = meshcat.visualizer.Visualizer(window=None) + self.vis = MeshcatVisualizer( + self.reduced_robot.model, + self.reduced_robot.collision_model, + self.reduced_robot.visual_model, + ) + self.vis.initViewer( + open=False, zmq_url="tcp://localhost:5000", viewer=visualizer + ) + self.vis.loadViewerModel("pinocchio") + self.vis.displayFrames( + True, frame_ids=[101, 102], axis_length=0.15, axis_width=5 + ) + self.vis.display(pin.neutral(self.reduced_robot.model)) + + # Disable the head: `head_link_0` + # self.vis.viewer["pinocchio/visuals/head_link_0"].set_property("visible", False) + + # Set the camera's position. + # self.vis.setCameraPosition([-0.0030, 0.5174, 0.0132]) # Right over the shoulders. + + # Enable the display of end effector target frames with short axis lengths and greater width. + frame_viz_names = ["L_ee_target", "R_ee_target"] + FRAME_AXIS_POSITIONS = ( + np.array( + [[0, 0, 0], [1, 0, 0], [0, 0, 0], [0, 1, 0], [0, 0, 0], [0, 0, 1]] + ) + .astype(np.float32) + .T + ) + FRAME_AXIS_COLORS = ( + np.array( + [ + [1, 0, 0], + [1, 0.6, 0], + [0, 1, 0], + [0.6, 1, 0], + [0, 0, 1], + [0, 0.6, 1], + ] + ) + .astype(np.float32) + .T + ) + axis_length = 0.1 + axis_width = 10 + for frame_viz_name in frame_viz_names: + self.vis.viewer[frame_viz_name].set_object( + mg.LineSegments( + mg.PointsGeometry( + position=axis_length * FRAME_AXIS_POSITIONS, + color=FRAME_AXIS_COLORS, + ), + mg.LineBasicMaterial( + linewidth=axis_width, + vertexColors=True, + ), + ) + ) + + logger.info("Arms and hands IK solver initialized.") + + # If the robot arm is not the same size as your arm :) + def scale_arms( + self, + human_left_pose, + human_right_pose, + human_arm_length=0.60, + robot_arm_length=0.75, + ): + scale_factor = robot_arm_length / human_arm_length + robot_left_pose = human_left_pose.copy() + robot_right_pose = human_right_pose.copy() + robot_left_pose[:3, 3] *= scale_factor + robot_right_pose[:3, 3] *= scale_factor + return robot_left_pose, robot_right_pose + + def solve_ik( + self, + left_wrist, + right_wrist, + current_lr_arm_motor_q=None, + current_lr_arm_motor_dq=None, + ): + # TODO: Include finger positioning. + self.left_wrist = left_wrist + self.right_wrist = right_wrist + + if current_lr_arm_motor_q is not None: + self.init_data = current_lr_arm_motor_q + self.opti.set_initial(self.var_q, self.init_data) + + # left_wrist, right_wrist = self.scale_arms(left_wrist, right_wrist) + + self.opti.set_value(self.param_tf_l, left_wrist) + self.opti.set_value(self.param_tf_r, right_wrist) + self.opti.set_value(self.var_q_last, self.init_data) + + try: + sol = self.opti.solve() + # sol = self.opti.solve_limited() + + sol_q = self.opti.value(self.var_q) + self.smooth_filter.add_data(sol_q) + sol_q = self.smooth_filter.filtered_data + + if current_lr_arm_motor_dq is not None: + v = current_lr_arm_motor_dq * 0.0 + else: + v = (sol_q - self.init_data) * 0.0 + + self.init_data = sol_q + + sol_tauff = pin.rnea( + self.reduced_robot.model, + self.reduced_robot.data, + sol_q, + v, + np.zeros(self.reduced_robot.model.nv), + ) + + # if self.Visualization: + # self.vis.display(sol_q) # for visualization + + return sol_q, sol_tauff + + except Exception as e: + print(f"ERROR in convergence, plotting debug info.{e}") + + sol_q = self.opti.debug.value(self.var_q) + self.smooth_filter.add_data(sol_q) + sol_q = self.smooth_filter.filtered_data + + if current_lr_arm_motor_dq is not None: + v = current_lr_arm_motor_dq * 0.0 + else: + v = (sol_q - self.init_data) * 0.0 + + self.init_data = sol_q + + sol_tauff = pin.rnea( + self.reduced_robot.model, + self.reduced_robot.data, + sol_q, + v, + np.zeros(self.reduced_robot.model.nv), + ) + + print( + f"sol_q:{sol_q} \nmotorstate: \n{current_lr_arm_motor_q} \nleft_pose: \n{left_wrist} \nright_pose: \n{right_wrist}" + ) + # return sol_q, sol_tauff + return current_lr_arm_motor_q, np.zeros(self.reduced_robot.model.nv) + + def capture_frame(self, x=0, y=0, z=0, w=1) -> Image: + """ + Capture a screenshot from Meshacat viewer, convert to OpenCV image bytes, and return. + """ + # rotation_matrix = R.from_quat([x, y, z, w]).as_matrix() + # transform = np.eye(4) + # transform[0:3, 0:3] = rotation_matrix + # transform[0:3, 3] = [-0.0030, 0.5174, 0.0132] # Right over the shoulders. + # viewer["/Cameras/default/rotated"].set_transform(transform) + self.vis.viewer["L_ee_target"].set_transform(self.left_wrist) + self.vis.viewer["R_ee_target"].set_transform(self.right_wrist) + self.vis.display(self.init_data) + img: Image = self.vis.viewer.get_image(512, 512).convert("RGBA") + return img diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/ik.py b/Spectacles-2-Unitree/unitree-client/src/ik/ik.py new file mode 100644 index 00000000..6c3b1daf --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/ik.py @@ -0,0 +1,395 @@ +import asyncio +import logging +import time +from collections import deque +from enum import Enum + +import numpy as np +from PIL import Image +from scipy.spatial.transform import Rotation + +from ik.g1_controller import G1_29_ArmController, G1_29_JointArmIndex +from ik.g1_solver import G1_29_ArmIK + + +def fast_mat_inv(mat: np.ndarray) -> np.ndarray: + """ + Fast matrix inversion for 4x4 matrices. + """ + if mat.shape != (4, 4): + msg = "Input matrix must be 4x4." + raise ValueError(msg) + ret = np.eye(4) + ret[:3, :3] = mat[:3, :3].T + ret[:3, 3] = -mat[:3, :3].T @ mat[:3, 3] + return ret + + +# Spectacles world space (X right, Y up, Z back) to robot world space (X front, Y left, Z up) +R_specs_to_robot = np.array([[0, 0, -1], [-1, 0, 0], [0, 1, 0]]) +T_specs_to_robot = np.eye(4) +T_specs_to_robot[:3, :3] = R_specs_to_robot +T_specs_to_robot_inv = fast_mat_inv(T_specs_to_robot) + +# Spectacles left wrist +# - X right, back to palm +# - Y up, pinky to index +# - Z back, wrist to middle +# +# Robot left wrist: +# - X wrist to middle +# - Y palm to back +# - Z pinky to index +# +R_specs_wrist_to_robot_left = Rotation.from_euler( + "xyz", [90, -90, 0], degrees=True +).as_matrix() +T_local_fix_left = np.eye(4) +T_local_fix_left[:3, :3] = R_specs_wrist_to_robot_left + +# Spectacles right wrist: +# - X right, back to palm +# - Y up, pinky to index +# - Z back, wrist to middle +# +# Robot right wrist: +# - X wrist to middle +# - Y back to palm +# - Z pinky to index +R_specs_wrist_to_robot_right = Rotation.from_euler( + "xyz", [90, 90, 0], degrees=True +).as_matrix() +T_local_fix_right = np.eye(4) +T_local_fix_right[:3, :3] = R_specs_wrist_to_robot_right + +# For G1 initial position +const_right_wrist_default = np.array( + [[1, 0, 0, 0.15], [0, 1, 0, 1.13], [0, 0, 1, -0.3], [0, 0, 0, 1]] +) + +# For G1 initial position +const_left_wrist_default = np.array( + [[1, 0, 0, -0.15], [0, 1, 0, 1.13], [0, 0, 1, -0.3], [0, 0, 0, 1]] +) + +# Offset, in meters, from the robot's world origin (its waist) to the robot's head. +T_robot_origin_to_robot_head = np.array( + [ + [1, 0, 0, 0.15], # Translation in X by 0.15m + [0, 1, 0, 0], # Translation in Y by 0m + [0, 0, 1, 0.45], # Translation in Z by 0.45m + [0, 0, 0, 1], + ] +) + + +class RobotHandType(Enum): + DEX3 = "./urdf/dex_hand/unitree_dex3.yml" + + +class HandMovement: + type: str = "hand_movement" + # The hand, either "left" or "right" + handType: str = "" + # Spectacles data. + _rawWristTransform: np.ndarray + # Spectacles data. These are already relative to the wrists. + _rawFingerPositions: np.ndarray + # Spectacles data. + _rawHeadTransform: np.ndarray + timestamp: int = 0 + # Head pose in Robot space + headMat: np.ndarray = np.eye(4) + # Left wrist position and rotation in robot space + leftWristMat: np.ndarray = np.copy(const_left_wrist_default) + # Right wrist position and rotation in robot space + rightWristMat: np.ndarray = np.copy(const_right_wrist_default) + # Left hand finger positions in left-wrist space. Dex3 joint order: thumb_0, thumb_1, thumb_2, middle_0, middle_1, index_0, index_1 + leftHandFingerPos: np.ndarray | None = None + # Right hand finger positions in right-wrist space. Dex3 joint order: thumb_0, thumb_1, thumb_2, middle_0, middle_1, index_0, index_1 + rightHandFingerPos: np.ndarray | None = None + + # TODO: Switch calculation method based on head position over time. + # 1. In Spectacles space, wrists are relatively static, head position is relatively static, but head rotation is changing. + # - Example: hands stationary on a keyboard but looking left and right. + # - Method: keep using the wrist's last position. + # 2. In Spectacles space, wrists position is changing, head position is changing. + # - Example: holding hands steady in front of the body and walking around. + # - Method: use the wrist's current **relative** position. + + def __init__(self, data: dict): + self.handType = data.get("handType", "") + self.timestamp = data.get("timestamp", 0) + + # The "transform" key is expected to be a list where: + # - The first element is the flattened 4x4 wrist transform, column-major. + # - Next elements are 3D finger positions. + # - Last element is a flatteend 4x4 for head transform, column-major. + transform = data.get("transform", []) + if not transform or len(transform) < 3: + msg = "Invalid data: missing transform information." + raise ValueError(msg) + + # + # Extract and scale. + # + + # Head transform + self._rawHeadTransform = np.array(transform[-1]).reshape(4, 4).T + self._rawHeadTransform[0:3, 3] /= 100.0 # cm -> m + + # Wrist transform + self._rawWristTransform = np.array(transform[0]).reshape(4, 4).T + self._rawWristTransform[0:3, 3] /= 100.0 # cm -> m + + # Finger positions -- these are already relative to the wrist transform in Spectacles space. + self._rawFingerPositions = np.array(transform[1:-1]).reshape(-1, 3) + self._rawFingerPositions /= 100.0 # cm -> m + + # + # Convert from Spectacles AR coordinate space to Robot space. + # + + # Head and Wrists + + # 1. Apply local wrist rotation in the Spectacles space so they'll line up when we switch to the Robot space. + + # Select proper local wrist frame correction. + if self.handType == "left": + T_local_fix = T_local_fix_left + elif self.handType == "right": + T_local_fix = T_local_fix_right + else: + msg = f"Invalid hand type: {self.handType}. Expected 'left' or 'right'." + raise ValueError(msg) + + T_Spectacles_wrist_rotated = self._rawWristTransform @ T_local_fix + + # 2. Calculate wrist transform relative to head in Spectacles space. + T_Spectacles_wrist_rel_head = ( + fast_mat_inv(self._rawHeadTransform) @ T_Spectacles_wrist_rotated + ) + + # 3. Transform the relative wrist pose from Spectacles space to Robot space. + T_robot_wrist_origin = ( + T_specs_to_robot @ T_Spectacles_wrist_rel_head @ T_specs_to_robot.T + ) + + # 4. Translate relative to the robot's head. + T_Robot_wrist_target = T_robot_origin_to_robot_head @ T_robot_wrist_origin + + if self.handType == "left": + self.leftWristMat = T_Robot_wrist_target + elif self.handType == "right": + self.rightWristMat = T_Robot_wrist_target + else: + msg = f"Invalid hand type: {self.handType}. Expected 'left' or 'right'." + raise ValueError(msg) + + if self.handType == "left": + indices = [ + 3, # Spectacles thumb-3 -> Dex3 thumb_tip + 19, # Spectacles pinky-3 -> Dex3 index_tip + 7, # Spectacles index-3 -> Dex3 middle_tip + ] + elif self.handType == "right": + indices = [ + 3, # Spectacles thumb-3 -> Dex3 thumb_tip + 7, # Spectacles index-3 -> Dex3 index_tip + 19, # Spectacles pinky-3 -> Dex3 middle_tip + ] + else: + msg = f"Invalid hand type: {self.handType}. Expected 'left' or 'right'." + raise ValueError(msg) + + finger_joints = self._rawFingerPositions[indices] + + +class IK: + def __init__(self, ik_solver): + """ + Initialize the IK transformer and solver. + + :param ik_solver: An instance of an IK solver that implements a method `solve_ik`. + :param t: Transformation matrix from user head to robot base (waist). + """ + self.ik_solver = ik_solver + + def compute_ik( + self, + left: np.ndarray, + right: np.ndarray, + current_q: np.ndarray, + current_dq: np.ndarray, + ): + """ + Computes the IK solution with left and right wrist and hand matrices. + + :param left: numpy array representing the left wrist and hand matrices. + :param right: numpy array representing the right wrist and hand matrices. + :param current_q: numpy array representing the current joint configuration. + :param current_dq: numpy array representing the current joint velocities. + :return: Tuple (q_sol, tauff_sol) from the IK solver. + """ + # Transform both wrist transforms from the Spectacles (user head) frame into the robot base frame. + + # Call the IK solver using the transformed wrist targets. + q_sol, tauff_sol = self.ik_solver.solve_ik(left, right, current_q, current_dq) + return q_sol, tauff_sol + + +class ArmsAndHands: + def __init__(self, ik_solver=None, arm_controller=None, mock=False): + """ + Initialize the Arms and Hands controller. + + If no controller is provided and mock is False, it will attempt to create a new controller instance. + + :param ik_solver: An instance of an IK solver. + :param arm_controller: An instance of the robot's low-level arm controller. + """ + if ik_solver is None: + ik_solver = G1_29_ArmIK(Unit_Test=mock, Visualization=True) + if arm_controller is None: + if not mock: + try: + self.controller = G1_29_ArmController() + except Exception: + logging.exception( + "Failed to initialize default robot controller, falling back to mock." + ) + self.mock = True + self.controller = None + else: + self.controller = None + else: + self.controller = arm_controller + self.ik = IK(ik_solver) + self.current_q = np.array([0.0 for i in G1_29_JointArmIndex]) + self.current_dq = np.array([0.0 for i in G1_29_JointArmIndex]) + self.q_sol = None + self.tauff_sol = None + self.left_wrist_transform = np.eye(4) + self.right_wrist_transform = np.eye(4) + self.computing_ik_lock = asyncio.Lock() + + # Add timing tracking for performance monitoring + self.logger = logging.getLogger("ArmsAndHands") + self.message_timestamps = deque(maxlen=30) # Store last 30 message timestamps + self.processing_times = deque(maxlen=30) # Store last 30 processing times + self.last_log_time = 0 + self.log_interval = 5.0 # Log performance stats every 5 seconds + + async def move(self, movement: HandMovement, mock: bool = False): + """ + Move the arms and hands based on the provided movement data. + This method is debounced - if it's called while a previous IK computation + is in progress, the new call will be skipped. + + :param movement: An instance of HandMovement containing wrist and finger data. + :param mock: If True, the function will not send commands to the robot but will still run the IK solver. + :return: Boolean indicating whether the movement was processed or skipped. + """ + # Track incoming message timestamp + current_time = time.time() + self.message_timestamps.append(current_time) + + # Update the target wrist transforms regardless of whether we'll compute IK + if movement.handType == "left": + self.left_wrist_transform = movement.leftWristMat + elif movement.handType == "right": + self.right_wrist_transform = movement.rightWristMat + + # Try to acquire the lock without blocking + if self.computing_ik_lock.locked(): + # Lock is already held, skip this update + return False + + async with self.computing_ik_lock: + start_time = time.time() + + # Get current joint positions and velocities + self.current_q = ( + self.controller.get_current_dual_arm_q() if not mock else self.current_q + ) + self.current_dq = ( + self.controller.get_current_dual_arm_dq() + if not mock + else self.current_dq + ) + + # Compute IK solution + self.q_sol, self.tauff_sol = self.ik.compute_ik( + self.left_wrist_transform, + self.right_wrist_transform, + self.current_q, + self.current_dq, + ) + + # Apply the solution + if not mock: + self.controller.ctrl_dual_arm(self.q_sol, self.tauff_sol) + else: + # Update current q and dq for mock mode + self.current_q = self.q_sol + self.current_dq = self.tauff_sol + + # Calculate and store processing time + end_time = time.time() + processing_time = end_time - start_time + self.processing_times.append(processing_time) + + # Log performance stats periodically + if ( + end_time - self.last_log_time >= self.log_interval + and len(self.message_timestamps) > 1 + ): + self.last_log_time = end_time + + # Calculate incoming message rate (messages per second) + if len(self.message_timestamps) >= 2: + time_span = self.message_timestamps[-1] - self.message_timestamps[0] + msg_rate = ( + (len(self.message_timestamps) - 1) / time_span + if time_span > 0 + else 0 + ) + else: + msg_rate = 0 + + # Calculate average processing time + avg_processing_time = ( + sum(self.processing_times) / len(self.processing_times) + if self.processing_times + else 0 + ) + + # Calculate real-time ratio (processing time / message interval) + real_time_ratio = avg_processing_time * msg_rate if msg_rate > 0 else 0 + + self.logger.info( + f"IK Performance: Avg processing time: {avg_processing_time:.4f}s, " + f"Message rate: {msg_rate:.2f} msg/s, Real-time ratio: {real_time_ratio:.2f} " + ) + + return True + + def reset(self): + """ + Reset the arm and hand controller to its initial state. + """ + if self.controller is not None: + self.controller.resume_publish_thread() + self.controller.ctrl_dual_arm_go_home() + self.left_wrist_transform = np.eye(4) + self.right_wrist_transform = np.eye(4) + self.current_q = None + self.current_dq = None + self.q_sol = None + self.tauff_sol = None + + async def render(self, x=0, y=0, z=0, w=1) -> Image: + """ + Render image of movement via meshcat + """ + return await asyncio.to_thread(self.ik.ik_solver.capture_frame, x, y, z, w) diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/LICENSE b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/LICENSE new file mode 100644 index 00000000..bee350ea --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/LICENSE @@ -0,0 +1,32 @@ +Copyright [2025] [HangZhou YuShu TECHNOLOGY CO.,LTD. ("Unitree Robotics")] + +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. + +------------------ + +This code builds upon following open-source code-bases. Please visit the URLs to see the respective LICENSES: + +1) https://github.com/OpenTeleVision/TeleVision +2) https://github.com/dexsuite/dex-retargeting +3) https://github.com/vuer-ai/vuer +4) https://github.com/stack-of-tasks/pinocchio +5) https://github.com/casadi/casadi +6) https://github.com/meshcat-dev/meshcat-python +7) https://github.com/zeromq/pyzmq +8) https://github.com/unitreerobotics/unitree_dds_wrapper +9) https://github.com/tonyzhaozh/act +10) https://github.com/facebookresearch/detr +11) https://github.com/Dingry/BunnyVisionPro +12) https://github.com/unitreerobotics/unitree_sdk2_python + +------------------ \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3.yml b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3.yml new file mode 100644 index 00000000..d54677ab --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3.yml @@ -0,0 +1,59 @@ +left: + type: vector + urdf_path: unitree_hand/unitree_dex3_left.urdf + + # Target refers to the retargeting target, which is the robot hand + # target_joint_names: + target_joint_names: + [ + "left_hand_thumb_0_joint", + "left_hand_thumb_1_joint", + "left_hand_thumb_2_joint", + "left_hand_middle_0_joint", + "left_hand_middle_1_joint", + "left_hand_index_0_joint", + "left_hand_index_1_joint", + ] + wrist_link_name: None + target_origin_link_names: ["base_link_thumb","base_link_index","base_link_middle"] + target_task_link_names: ["thumb_tip","index_tip","middle_tip"] + target_link_human_indices: [[0, 0, 0], [4, 9, 14]] + + # Currently, the scaling factor for each finger is individually distinguished in the robot_hand_unitree.py file. + # The Unitree Dex3 has three fingers with the same specifications, so the retarget scaling factors need to be adjusted separately. + # The relevant code is as follows: + # ref_left_value[0] = ref_left_value[0] * 1.15 + # ref_left_value[1] = ref_left_value[1] * 1.05 + # ref_left_value[2] = ref_left_value[2] * 0.95 + # ref_right_value[0] = ref_right_value[0] * 1.15 + # ref_right_value[1] = ref_right_value[1] * 1.05 + # ref_right_value[2] = ref_right_value[2] * 0.95 + scaling_factor: 1.0 + + # A smaller alpha means stronger filtering, i.e. more smooth but also larger latency + low_pass_alpha: 0.2 + +right: + type: vector + urdf_path: unitree_hand/unitree_dex3_right.urdf + + # Target refers to the retargeting target, which is the robot hand + target_joint_names: + [ + "right_hand_thumb_0_joint", + "right_hand_thumb_1_joint", + "right_hand_thumb_2_joint", + "right_hand_index_0_joint", + "right_hand_index_1_joint", + "right_hand_middle_0_joint", + "right_hand_middle_1_joint", + ] + wrist_link_name: None + target_origin_link_names: ["base_link_thumb","base_link_index","base_link_middle"] + target_task_link_names: ["thumb_tip", "index_tip", "middle_tip"] + target_link_human_indices: [[0, 0, 0], [4, 9, 14]] + + scaling_factor: 1.0 + + # A smaller alpha means stronger filtering, i.e. more smooth but also larger latency + low_pass_alpha: 0.2 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_left.urdf b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_left.urdf new file mode 100644 index 00000000..ff0c868c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_left.urdf @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_right.urdf b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_right.urdf new file mode 100644 index 00000000..ba370adf --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/dex_hand/unitree_dex3_right.urdf @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/README.md b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/README.md new file mode 100644 index 00000000..f666cf98 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/README.md @@ -0,0 +1,33 @@ +# Unitree G1 Description (URDF & MJCF) + +## Overview + +This package includes a universal humanoid robot description (URDF & MJCF) for the [Unitree G1](https://www.unitree.com/g1/), developed by [Unitree Robotics](https://www.unitree.com/). + +MJCF/URDF for the G1 robot: + +| MJCF/URDF file name | `mode_machine` | Hip roll reduction ratio | Update status | dof#leg | dof#waist | dof#arm | dof#hand | +| ----------------------------- | :------------: | :----------------------: | ------------- | :-----: | :-------: | :-----: | :------: | +| `g1_23dof` | 1 | 14.5 | Beta | 6*2 | 1 | 5*2 | 0 | +| `g1_29dof` | 2 | 14.5 | Beta | 6*2 | 3 | 7*2 | 0 | +| `g1_29dof_with_hand` | 2 | 14.5 | Beta | 6*2 | 3 | 7*2 | 7*2 | +| `g1_29dof_lock_waist` | 3 | 14.5 | Beta | 6*2 | 1 | 7*2 | 0 | +| `g1_23dof_rev_1_0` | 4 | 22.5 | Up-to-date | 6*2 | 1 | 5*2 | 0 | +| `g1_29dof_rev_1_0` | 5 | 22.5 | Up-to-date | 6*2 | 3 | 7*2 | 0 | +| `g1_29dof_with_hand_rev_1_0` | 5 | 22.5 | Up-to-date | 6*2 | 3 | 7*2 | 7*2 | +| `g1_29dof_lock_waist_rev_1_0` | 6 | 22.5 | Up-to-date | 6*2 | 1 | 7*2 | 0 | +| `g1_dual_arm` | 9 | null | Up-to-date | 0 | 0 | 7*2 | 0 | + +## Visulization with [MuJoCo](https://github.com/google-deepmind/mujoco) + +1. Open MuJoCo Viewer + + ```bash + pip install mujoco + python -m mujoco.viewer + ``` + +2. Drag and drop the MJCF/URDF model file (`g1_XXX.xml`/`g1_XXX.urdf`) to the MuJoCo Viewer. + +## Note for teleoperate +g1_body29_hand14 is modified from [g1_29dof_with_hand_rev_1_0](https://github.com/unitreerobotics/unitree_ros/blob/master/robots/g1_description/g1_29dof_with_hand_rev_1_0.urdf) diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.urdf b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.urdf new file mode 100644 index 00000000..156a5fd5 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.urdf @@ -0,0 +1,1476 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.xml b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.xml new file mode 100644 index 00000000..01fd5e2c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/g1_body29_hand14.xml @@ -0,0 +1,408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/head_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/head_link.STL new file mode 100644 index 00000000..401f8227 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/head_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:005fb67fbd3eff94aa8bf4a6e83238174e9f91b6721f7111594322f223724411 +size 932784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_pitch_link.STL new file mode 100644 index 00000000..7cd70521 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d49e3abc6f5b12e532062cd575b87b5ef40cd2a3fc18f54a1ca5bba4f773d51d +size 71184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_roll_link.STL new file mode 100644 index 00000000..cb69f65c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_ankle_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4092af943141d4d9f74232f3cfa345afc6565f46a077793b8ae0e68b39dc33f +size 653384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_elbow_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_elbow_link.STL new file mode 100644 index 00000000..7fa05272 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_elbow_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa752198accd104d5c4c3a01382e45165b944fbbc5acce085059223324e5bed3 +size 88784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_0_link.STL new file mode 100644 index 00000000..a87568d6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b35f2f77211d5a366f0b9a4e47c4ee35e536731266f1a34e9efa12db579b892 +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_1_link.STL new file mode 100644 index 00000000..c6c91dd4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_index_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e315ebc8a7a0cb98e033985b586b20d81cf8aa761181ae61ce56fcb14077a06 +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_0_link.STL new file mode 100644 index 00000000..a87568d6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b35f2f77211d5a366f0b9a4e47c4ee35e536731266f1a34e9efa12db579b892 +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_1_link.STL new file mode 100644 index 00000000..c6c91dd4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_middle_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e315ebc8a7a0cb98e033985b586b20d81cf8aa761181ae61ce56fcb14077a06 +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_palm_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_palm_link.STL new file mode 100644 index 00000000..c8fcc3e4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_palm_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a486b75bd78a9bf03cec25d84d87f97f3dae038cf21a743b6d469b337e4004 +size 2140184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_0_link.STL new file mode 100644 index 00000000..7fb38c18 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a90c721661c0622685488a3c74d1e122c7da89242d3a1daef75edb83422d05e0 +size 8884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_1_link.STL new file mode 100644 index 00000000..54f77542 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445c54a45bc13ce36001556f66bc0f49c83cb40321205ae4d676bb2874325684 +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_2_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_2_link.STL new file mode 100644 index 00000000..3e4f124f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hand_thumb_2_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d8dbe5085acfc213d21aa8b0782e89cd79084e9678f3a85fc7b04a86b029db5 +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_pitch_link.STL new file mode 100644 index 00000000..4cf7475b --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4725168105ee768ee31638ef22b53f6be2d7641bfd7cfefe803488d884776fa4 +size 181684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_roll_link.STL new file mode 100644 index 00000000..585f6040 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91f25922ee8a7c3152790051bebad17b4d9cd243569c38fe340285ff93a97acf +size 192184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_yaw_link.STL new file mode 100644 index 00000000..b46a7413 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_hip_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16d88aa6ddac8083aa7ad55ed317bea44b1fa003d314fba88965b7ed0f3b55b +size 296284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_knee_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_knee_link.STL new file mode 100644 index 00000000..2dcf84e4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_knee_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d92b9e3d3a636761150bb8025e32514c4602b91c7028d523ee42b3e632de477 +size 854884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_rubber_hand.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_rubber_hand.STL new file mode 100644 index 00000000..04a2fa22 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_rubber_hand.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cff2221a690fa69303f61fce68f2d155c1517b52efb6ca9262dd56e0bc6e70fe +size 2287484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_pitch_link.STL new file mode 100644 index 00000000..926d9807 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0d1cfd02fcf0d42f95e678eeca33da3afbcc366ffba5c052847773ec4f31d52 +size 176784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_roll_link.STL new file mode 100644 index 00000000..4c6840b9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb9df21687773522598dc384f1a2945c7519f11cbc8bd372a49170316d6eee88 +size 400284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_yaw_link.STL new file mode 100644 index 00000000..89b0e066 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_shoulder_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aa97e9748e924336567992181f78c7cd0652fd52a4afcca3df6b2ef6f9e712e +size 249184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_pitch_link.STL new file mode 100644 index 00000000..f9c9e4f6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b251d8e05047f695d0f536cd78c11973cfa4e78d08cfe82759336cc3471de3a9 +size 85984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_link.STL new file mode 100644 index 00000000..2097ca3e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edc387c9a0ba8c2237e9b296d32531426fabeb6f53e58df45c76106bca74148c +size 356184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_rubber_hand.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_rubber_hand.STL new file mode 100644 index 00000000..7c588197 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_roll_rubber_hand.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e81030abd023bd9e4a308ef376d814a2c12d684d8a7670c335bbd5cd7809c909 +size 3484884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_yaw_link.STL new file mode 100644 index 00000000..692f4b07 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/left_wrist_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83f8fb3a726bf9613d65dd14f0f447cb918c3c95b3938042a0c9c09749267d3b +size 318684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/logo_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/logo_link.STL new file mode 100644 index 00000000..6c25961c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/logo_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8571a0a19bc4916fa55f91449f51d5fdefd751000054865a842449429d5f155b +size 243384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis.STL new file mode 100644 index 00000000..f98a88db --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ba6bbc888e630550140d3c26763f10206da8c8bd30ed886b8ede41c61f57a31 +size 1060884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis_contour_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis_contour_link.STL new file mode 100644 index 00000000..8025bc07 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/pelvis_contour_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cc5c2c7a312329e3feeb2b03d3fc09fc29705bd01864f6767e51be959662420 +size 1805184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_pitch_link.STL new file mode 100644 index 00000000..94a586a4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15be426539ec1be70246d4d82a168806db64a41301af8b35c197a33348c787a9 +size 71184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_roll_link.STL new file mode 100644 index 00000000..3c38507b --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_ankle_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b66222ea56653e627711b56d0a8949b4920da5df091da0ceb343f54e884e3a5 +size 653784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_elbow_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_elbow_link.STL new file mode 100644 index 00000000..52aa0ebf --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_elbow_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1be925d7aa268bb8fddf5362b9173066890c7d32092c05638608126e59d1e2ab +size 88784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_0_link.STL new file mode 100644 index 00000000..5e2ef477 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12ab4300c95e437e834f9aef772b3b431c671bf34338930b52ad11aef73bbd0d +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_1_link.STL new file mode 100644 index 00000000..8572ae1c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_index_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9c34efce4563cacdcfd29fc838a982976d40f5442c71219811dcbbf3923a33d +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_0_link.STL new file mode 100644 index 00000000..5e2ef477 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12ab4300c95e437e834f9aef772b3b431c671bf34338930b52ad11aef73bbd0d +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_1_link.STL new file mode 100644 index 00000000..8572ae1c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_middle_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9c34efce4563cacdcfd29fc838a982976d40f5442c71219811dcbbf3923a33d +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_palm_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_palm_link.STL new file mode 100644 index 00000000..fd2f7f0a --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_palm_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86c0b231cc44477d64a6493e5a427ba16617a00738112dd187c652675b086fb9 +size 2140184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_0_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_0_link.STL new file mode 100644 index 00000000..a385d96a --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_0_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:544298d0ea1088f5b276a10cc6a6a9e533efdd91594955fdc956c46211d07f83 +size 8884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_1_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_1_link.STL new file mode 100644 index 00000000..c118de72 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_1_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a9a820da8dd10f298778b714f1364216e8a5976f4fd3a05689ea26327d44bf6 +size 475984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_2_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_2_link.STL new file mode 100644 index 00000000..0979fb67 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hand_thumb_2_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f1bfb37668e8f61801c8d25f171fa1949e08666be86c67acad7e0079937cc45 +size 1521784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_pitch_link.STL new file mode 100644 index 00000000..064085fc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4f3c99d7f4a7d34eadbef9461fc66e3486cb5442db1ec50c86317d459f1a9c6 +size 181284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_roll_link.STL new file mode 100644 index 00000000..6544025e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c254ef66a356f492947f360dd931965477b631e3fcc841f91ccc46d945d54f6 +size 192684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_yaw_link.STL new file mode 100644 index 00000000..0ad7bee3 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_hip_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e479c2936ca2057e9eb2f7dff6c189b7419d7b8484dea0b298cbb36a2a6aa668 +size 296284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_knee_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_knee_link.STL new file mode 100644 index 00000000..65e8a708 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_knee_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63c4008449c9bbe701a6e2b557b7a252e90cf3a5abcf54cee46862b9a69f8ec8 +size 852284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_rubber_hand.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_rubber_hand.STL new file mode 100644 index 00000000..58148fb9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_rubber_hand.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99533b778bca6246144fa511bb9d4e555e075c641f2a0251e04372869cd99d67 +size 2192684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_pitch_link.STL new file mode 100644 index 00000000..48a1c460 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24cdb387e0128dfe602770a81c56cdce3a0181d34d039a11d1aaf8819b7b8c02 +size 176784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_roll_link.STL new file mode 100644 index 00000000..2a5d22f9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:962b97c48f9ce9e8399f45dd9522e0865d19aa9fd299406b2d475a8fc4a53e81 +size 401884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_yaw_link.STL new file mode 100644 index 00000000..0882a567 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_shoulder_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0b76489271da0c72461a344c9ffb0f0c6e64f019ea5014c1624886c442a2fe5 +size 249984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_pitch_link.STL new file mode 100644 index 00000000..2efd25c4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d22f8f3b3127f15a63e5be1ee273cd5075786c3142f1c3d9f76cbf43d2a26477 +size 79584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_link.STL new file mode 100644 index 00000000..77d23a77 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7ee9212ff5b94d6cb7f52bb1bbf3f352194d5b598acff74f4c77d340c5b344f +size 356084 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_rubber_hand.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_rubber_hand.STL new file mode 100644 index 00000000..6f122afa --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_roll_rubber_hand.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0729aff1ac4356f9314de13a46906267642e58bc47f0d8a7f17f6590a6242ccf +size 3481584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_yaw_link.STL new file mode 100644 index 00000000..77edbb41 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/right_wrist_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc9dece2d12509707e0057ba2e48df8f3d56db0c79410212963a25e8a50f61a6 +size 341484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_link.STL new file mode 100644 index 00000000..cc2cbbf2 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82be7f93e85b3d303a1d1e1847e2c916939bd61c424ed1ebd28691ec33909dd1 +size 203584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_rod_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_rod_link.STL new file mode 100644 index 00000000..dd439bf0 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_L_rod_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c10de1effa7ea797ac268006aa2a739036c7e1f326b2012d711ee2c20c5a6e96 +size 74884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_link.STL new file mode 100644 index 00000000..422ffe47 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54ded433a3a0c76027365856fdbd55215643de88846f7d436598a4071e682725 +size 203584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_rod_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_rod_link.STL new file mode 100644 index 00000000..6df46c89 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_constraint_R_rod_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb83fd38a9f06c99e3f301c70f12d94ae770a8f0cf9501f83580a27f908990b4 +size 74884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link.STL new file mode 100644 index 00000000..e4fb87c4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e96d023f0368a4e3450b86ca5d4f10227d8141156a373e7da8cb3c93266523e0 +size 2232984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_23dof_rev_1_0.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_23dof_rev_1_0.STL new file mode 100644 index 00000000..edaf96a1 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_23dof_rev_1_0.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cd0d56fde14b73c1623304684805029971c4f84b596f9914e823ca70a107fd2 +size 7825434 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_rev_1_0.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_rev_1_0.STL new file mode 100644 index 00000000..836b9923 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/torso_link_rev_1_0.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11ddb46f2098efbbd8816b1d65893632d8e78be936376c7cdcd6771899ccc723 +size 2570584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_L.STL new file mode 100644 index 00000000..6ec689bc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ebafdcb4de6871113f0ca2c356618d6e46b1d50f6c0bf9e37f47b9d8e100d99 +size 114684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_R.STL new file mode 100644 index 00000000..69fd76ad --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_constraint_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:791902a291ffbd35ab97383b7b44ea5d975de7c80eef838797c970790b382ca9 +size 114684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link.STL new file mode 100644 index 00000000..007f56d2 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34f0aa73f41131230be4d25876c944fdf6c24d62553f199ff8b980c15e8913df +size 24184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link_rev_1_0.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link_rev_1_0.STL new file mode 100644 index 00000000..36a5a70e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_roll_link_rev_1_0.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b67c347a05abc3e8ddae600d98a082bee273bb39f8e651647708b0a7140a8a97 +size 85884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_support_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_support_link.STL new file mode 100644 index 00000000..4a50f94f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_support_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fae9e1bb609848a1667d32eed8d6083ae443538a306843056a2a660f1b2926a +size 150484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link.STL new file mode 100644 index 00000000..c049debc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2883f20e03f09b669b5b4ce10677ee6b5191c0934b584d7cbaef2d0662856ffb +size 336284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link_rev_1_0.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link_rev_1_0.STL new file mode 100644 index 00000000..dc628fbd --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/g1/meshes/waist_yaw_link_rev_1_0.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec6db442b11f25eed898b5add07940c85d804f300de24dcbd264ccd8be7d554c +size 619984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand.yml b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand.yml new file mode 100644 index 00000000..a2f60716 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand.yml @@ -0,0 +1,35 @@ +left: + type: vector + urdf_path: inspire_hand/inspire_hand_left.urdf + wrist_link_name: "L_hand_base_link" + + # Target refers to the retargeting target, which is the robot hand + target_joint_names: null + target_origin_link_names: [ "L_hand_base_link", "L_hand_base_link", "L_hand_base_link", "L_hand_base_link", "L_hand_base_link" ] + target_task_link_names: [ "L_thumb_tip", "L_index_tip", "L_middle_tip", "L_ring_tip", "L_pinky_tip" ] + scaling_factor: 1.5 + + # Source refers to the retargeting input, which usually corresponds to the human hand + # The joint indices of human hand joint which corresponds to each link in the target_link_names + target_link_human_indices: [ [ 0, 0, 0, 0, 0 ], [ 4, 9, 14, 19, 24 ] ] + + # A smaller alpha means stronger filtering, i.e. more smooth but also larger latency + low_pass_alpha: 0.8 + +right: + type: vector + urdf_path: inspire_hand/inspire_hand_right.urdf + wrist_link_name: "R_hand_base_link" + + # Target refers to the retargeting target, which is the robot hand + target_joint_names: null + target_origin_link_names: [ "R_hand_base_link", "R_hand_base_link", "R_hand_base_link", "R_hand_base_link", "R_hand_base_link" ] + target_task_link_names: [ "R_thumb_tip", "R_index_tip", "R_middle_tip", "R_ring_tip", "R_pinky_tip" ] + scaling_factor: 1.5 + + # Source refers to the retargeting input, which usually corresponds to the human hand + # The joint indices of human hand joint which corresponds to each link in the target_link_names + target_link_human_indices: [ [ 0, 0, 0, 0, 0 ], [ 4, 9, 14, 19, 24 ] ] + + # A smaller alpha means stronger filtering, i.e. more smooth but also larger latency + low_pass_alpha: 0.8 \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_left.urdf b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_left.urdf new file mode 100644 index 00000000..86299b3a --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_left.urdf @@ -0,0 +1,819 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_right.urdf b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_right.urdf new file mode 100644 index 00000000..8b9101a6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/inspire_hand_right.urdf @@ -0,0 +1,830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL new file mode 100644 index 00000000..88d668d9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33ab4e97801bd5421903a78f5977a44e477ae8653eaf32358d35633e465411e0 +size 1448084 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL.convex.stl new file mode 100644 index 00000000..57f3079f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/L_hand_base_link.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f99375fa43b3d559a0d0497d31014bc68a73e439ffaebe2538ca4a31e1b1c8 +size 37776 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL new file mode 100644 index 00000000..add03827 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d87cb704d80de840555d0a393117d32f9bd5e91425e0458363e0a799aa4e5339 +size 46584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL.convex.stl new file mode 100644 index 00000000..7709c7bc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac0d95709af667da3bffad49ba281cbc6e5fc20104b5803fcd6bce95d17264d6 +size 9275 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL new file mode 100644 index 00000000..783e73eb --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b49b6463f801f0402bac9c65bb989c4097f6d2c1fa1597ba560aedd640561778 +size 46884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL.convex.stl new file mode 100644 index 00000000..a1926538 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link11_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d8fa732060387efec6e927d01ef2ec4eaa6c1beae717954af4b216a437823af +size 7903 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL new file mode 100644 index 00000000..894e9588 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f35b78a9cab1007ac8b73023a5862ed055d33951b5742f9a783997d38e99551 +size 917284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL.convex.stl new file mode 100644 index 00000000..392524ca --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31cb19d35a7a921174ac2a89f4f7242506bb7ee8fe23b7290947edc83cdf2241 +size 20722 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL new file mode 100644 index 00000000..930d8478 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:347212bdb22d80fb364dd889de934d6fbb935e38d1f24c682caed84f7b6ea8cb +size 921984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL.convex.stl new file mode 100644 index 00000000..2a0a2f18 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link12_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:343ec4a6264336daff8e2c83a1a76474953ef9aac7d5350d78c9bd41cc617f5d +size 19374 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL new file mode 100644 index 00000000..33694b12 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e93b55f2ae73fe0f62cd27e81d8a4620211068cb1c9b25e6414e802a37541ee +size 488584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL.convex.stl new file mode 100644 index 00000000..fa03d717 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:162e37fd59406d3f4fda29ee09ebbb1fce2b35d92887b1eeb8ae5e2e000c8ecf +size 13279 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL new file mode 100644 index 00000000..3e75d8d2 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c157dfe5b666efb1c3d51342e56f5caad2fc350930ac21ee1e02d956c1034ca3 +size 483284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL.convex.stl new file mode 100644 index 00000000..15a8c0f8 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link13_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2366835bd8f0037ee9ec4a15fe2a520826997ee94600e06f2afe1541cdf2a7b4 +size 12826 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL new file mode 100644 index 00000000..29739dcb --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b677bcdcddcd90ff4b005f83daa9e50eb4003d5e67ea4eeefbf857718716c164 +size 155184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL.convex.stl new file mode 100644 index 00000000..8bebf0ce --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3021207ac11fd58f25b7930d62e0ea1131aba8383b546c04a378dc5193dfa94b +size 15100 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL new file mode 100644 index 00000000..6a951090 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:564aa8c3d2ff0e51b75736a8b01b4c309c7098582a424ea1391ccb75125519d8 +size 155584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL.convex.stl new file mode 100644 index 00000000..34bfa1b6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link14_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:593fd034e1d7cf5dc3e97f4214f1d83c504b1ae30542aaa2e2633a0e2b73a28b +size 15036 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL new file mode 100644 index 00000000..a814265e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c601e7aa8e1c91310a75190dfb6b95a8dc981b707e5f104f9ca9ecbea118b34 +size 407184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL.convex.stl new file mode 100644 index 00000000..accf5266 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdb73022f0284b40656cca03a07fa9591276512fa6c5847c515379c90328ac3a +size 15169 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL new file mode 100644 index 00000000..d8528350 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09c120f7fb7761aa97d89240cd8cb8e30c40ee60093cbb8b1c2e13a68a8e3845 +size 411884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL.convex.stl new file mode 100644 index 00000000..fc4f3368 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link15_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b29c3082c3c600b1b42eaee968323c140f9772de80e0c4df975f58a88536be9 +size 14348 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL new file mode 100644 index 00000000..c5e50bc9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d8508c65db44e2349f37e8ab4c057d204a40093d4733897ae5b51075b00f5e9 +size 329384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL.convex.stl new file mode 100644 index 00000000..b15021a1 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93094bfc7032c577c7fe3bb829a5b63b8fb523657874344bf75d6bfae5441059 +size 15239 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL new file mode 100644 index 00000000..9b829bfa --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6942ada1189cdf442124c6b8935f3e3a3ae310092a3a1414fdeb0bd6d23578bb +size 335484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL.convex.stl new file mode 100644 index 00000000..88db6e26 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link16_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a76c02d9f4824bfacd9181f3f6327793d353d2b866b2c86ac8fe424ff62d5bc +size 15144 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL new file mode 100644 index 00000000..95ff58a4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca2a68fed635eca290b234fbdc649779036ba5bac753addcb7ce6a086ad95949 +size 407184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL.convex.stl new file mode 100644 index 00000000..e392f7a3 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae4934a3bc5f22d0a0f4a65c60b8869275a23b3f2d87fd3491a7cc05ff9cf3fa +size 15161 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL new file mode 100644 index 00000000..6ccd11de --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36fc62c609800ce6d4521ae6f3c4c9b8a732be28654f32f04893696c17e6930c +size 411884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL.convex.stl new file mode 100644 index 00000000..0952fcb6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link17_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c85f4107ccd7b4e141b9251f554d75a8cf9440bb7e8ff1617d0919265291699d +size 14307 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL new file mode 100644 index 00000000..3a43b7cd --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9425aea7ebbf6d1dfb2eb0714fb44dfaea6b6a81c71d6e96c8d3950f636dfa62 +size 182684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL.convex.stl new file mode 100644 index 00000000..21da5d6c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d57825bd4a97aaa19400a2c383c331adc00443a9a80b13e9f4d4008f594dfdfc +size 14816 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL new file mode 100644 index 00000000..3e6ff9f9 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9711fac7df0c09a372e1529f74b9d506d37abf3ebc3241d976ad45e5ee7e2d69 +size 182984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL.convex.stl new file mode 100644 index 00000000..d349a3ab --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link18_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d59458edfdbf04f604ca239a83d1d0aa61882cd187993edbfddded466f33a94d +size 14726 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL new file mode 100644 index 00000000..fe16428f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbb256a70c17e21c995df66807f0755dc136d0312df245112d6d4bfcd29c43a4 +size 407184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL.convex.stl new file mode 100644 index 00000000..c2ec9123 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cf28d960f814e868ea81ad8112830fae9995d7b153bca1669745bb536699c21 +size 15169 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL new file mode 100644 index 00000000..cc8afb42 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46619bd6a887615d7dfe850d39a6f5d8f8c5ecfa9429c567338f3a659a5d4d75 +size 411884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL.convex.stl new file mode 100644 index 00000000..0952fcb6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link19_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c85f4107ccd7b4e141b9251f554d75a8cf9440bb7e8ff1617d0919265291699d +size 14307 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL new file mode 100644 index 00000000..1299f4bc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9145af7a515bce4c1c06d16b5be8900ec3f8375fc8e34d371315ce76f600877 +size 329484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL.convex.stl new file mode 100644 index 00000000..019e99d5 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4256391a991254c3468e8c94018cd00c6a33d38c65cc19a365361610310e5d8 +size 15247 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL new file mode 100644 index 00000000..cfe83e5a --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a517debff6b924c22ae0f87dbb6aac199a1f130c7fef353a7d659e365f30b1f4 +size 334784 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL.convex.stl new file mode 100644 index 00000000..ff107bf5 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link20_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb9f44fc3ce6d548b97d30c07fac35551230babd827696f8088f6360618279ab +size 15164 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL new file mode 100644 index 00000000..20bc1dd7 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:180ab4ac01dab60407d0b33819883eb0ec869e4d4f349f786972135c7114fc0d +size 407184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL.convex.stl new file mode 100644 index 00000000..886435c3 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a481f3014ddbccf15d4e00eb2ca7e4e8ac96a1d9df415ad8ad889e6c13d45d5d +size 15169 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL new file mode 100644 index 00000000..ae769cde --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed0a29d2376e8874f724bc2c20384eeec93d8268e59bb8c45628335f7ab6742e +size 411884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL.convex.stl new file mode 100644 index 00000000..0952fcb6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link21_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c85f4107ccd7b4e141b9251f554d75a8cf9440bb7e8ff1617d0919265291699d +size 14307 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL new file mode 100644 index 00000000..8ee6e22d --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e64ea976ecf08c46e8cb80a5dd56ee3e8c5f36a0573ab3c69160d9337f941e1 +size 413384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL.convex.stl new file mode 100644 index 00000000..f7cb2c23 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_L.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c0cd68a24ddd189872cf23ee073c54e04083ffb3fb74d7fb39f30331a0c4047 +size 16533 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL new file mode 100644 index 00000000..9925767e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aa3fb46f689251ee38f5262b71364c680f70d1ad1dd9c6f1cae8c098b0e8422 +size 416484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL.convex.stl new file mode 100644 index 00000000..900c729e --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/Link22_R.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:037ffbb7b88551bbcefd3911626ec14e0b858039968bf444ceaff76a4da829d3 +size 16418 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL new file mode 100644 index 00000000..042016db --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4d84504242a99fa915c4ed5195ce4724c67cb94d9217cd4c254cfb5937ecf5c +size 1472384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL.convex.stl b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL.convex.stl new file mode 100644 index 00000000..098fc637 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/R_hand_base_link.STL.convex.stl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:368b7348afaf7ac794e78280391d33940f8cf12756e70073cdd69b3bcafb8064 +size 39719 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_pitch_link.STL new file mode 100644 index 00000000..fbc9b3f2 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24afc967dfcc867632d756dedff7aa78157c8fdb756a85a3f2a24dde5e5e1d34 +size 34084 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_roll_link.STL new file mode 100644 index 00000000..a753f845 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_ankle_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ead4b17518eaa0a9f137c6170be6151ccf58b06fc2894b6202511515d3ebaa2 +size 829884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_pitch_link.STL new file mode 100644 index 00000000..2aed3f39 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9ed881d68aea86e7fe48b0430f3d48937481e702667f3484b0725bef22d3f0 +size 1025584 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_roll_link.STL new file mode 100644 index 00000000..cbe5ffa6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_elbow_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9e5f7c5214f584a91543d0ddfac50331ac8d6316c133140cd1d2397ae23ec50 +size 1243084 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hand_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hand_link.STL new file mode 100644 index 00000000..775698f6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hand_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bdf9e424ffcad03646a354fe5a4a08515e523c081070afabcadc9f5f03132e1 +size 147684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_pitch_link.STL new file mode 100644 index 00000000..e4762018 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa790c31ffc100cd182f2bf4480e7bfda675edc58ed8f361b6553a4975c9de3b +size 452384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_roll_link.STL new file mode 100644 index 00000000..75ecfa87 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ed880cf1171e048cfe50489fe2546c32790ac0c24a2b3b4c560495401013552 +size 769284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_yaw_link.STL new file mode 100644 index 00000000..ca8f3e47 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_hip_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103a854e684b84e1baba7d073822079069c64d0fa7b1592f29d38bd29f545bfb +size 885884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_knee_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_knee_link.STL new file mode 100644 index 00000000..6d7faa01 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_knee_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ee2cd33688c2887f2aa281691e51eeb7c3ddd3900240fedd7bbd54fcfc9b5ce +size 451384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_pitch_link.STL new file mode 100644 index 00000000..7b517f0f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42e1db49464ca0f44f933114ee426e7f6d6310d20cf104bfa38b5ed4794cfab7 +size 787484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_roll_link.STL new file mode 100644 index 00000000..74a9f099 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d3bcf767d72a9a5d7dae539eae79dc4132f0159b8803a6f6f2f9ad4b7e94d19 +size 903384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_yaw_link.STL new file mode 100644 index 00000000..6f1af2d3 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_shoulder_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e22a5b53f8f307e6c5d6c17f9ceae4852c6468547a951cb39dfdec9ee414b515 +size 644184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_wrist_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_wrist_pitch_link.STL new file mode 100644 index 00000000..fb3d7485 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/left_wrist_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7bb3eaf1213e27d3ee7d4193a0f0974823ae61c821ff1ec34459d65b7e39583 +size 630184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/logo_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/logo_link.STL new file mode 100644 index 00000000..0c9aa80c --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/logo_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef9635c847ca7cd61aeaed86ad599935b648fb6f8688867c0448917b1811511b +size 145484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/pelvis.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/pelvis.STL new file mode 100644 index 00000000..67a467e4 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/pelvis.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc2cbbeb07d3b63bce9fedeb8cf5252609dca1e89380734d22d5b3c8ded2f15c +size 672884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_pitch_link.STL new file mode 100644 index 00000000..fbc9b3f2 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24afc967dfcc867632d756dedff7aa78157c8fdb756a85a3f2a24dde5e5e1d34 +size 34084 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_roll_link.STL new file mode 100644 index 00000000..a753f845 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_ankle_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ead4b17518eaa0a9f137c6170be6151ccf58b06fc2894b6202511515d3ebaa2 +size 829884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_pitch_link.STL new file mode 100644 index 00000000..ce7770dc --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae09a5f8dcea82530824c88d9a5299e2b835543754e29ca952f75619c968a787 +size 1025384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_roll_link.STL new file mode 100644 index 00000000..2d81779f --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_elbow_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d06e2e62f80ceef841a88055da884fade9235f21b66e272fc51331367a5ea174 +size 1242984 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hand_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hand_link.STL new file mode 100644 index 00000000..775698f6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hand_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bdf9e424ffcad03646a354fe5a4a08515e523c081070afabcadc9f5f03132e1 +size 147684 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_pitch_link.STL new file mode 100644 index 00000000..f6e17009 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c0300dd96432f218857886007e9d4e8be038cd8b85e04e84a59df4de7f90476 +size 452384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_roll_link.STL new file mode 100644 index 00000000..4eca1b5d --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e95b01b0a215e1d134545d4073cf7a72ab38ca33e35c606c03f1706d63588c6 +size 768484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_yaw_link.STL new file mode 100644 index 00000000..db4c44cd --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_hip_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10badbb0ac78e22fc220f421b1c919cfcf59406b412d78313e4b8b06cbc51e47 +size 884484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_knee_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_knee_link.STL new file mode 100644 index 00000000..6d7faa01 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_knee_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ee2cd33688c2887f2aa281691e51eeb7c3ddd3900240fedd7bbd54fcfc9b5ce +size 451384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_pitch_link.STL new file mode 100644 index 00000000..00f10488 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850ffa7321993bfadcdb8bab1d422239f6a20abe27daa5ef99622f55d4da3217 +size 788484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_roll_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_roll_link.STL new file mode 100644 index 00000000..046b337b --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_roll_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9e793e351e09027d27427c06df2c1cb6b37c0205d0f68686b0d73916c6821de +size 908284 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_yaw_link.STL new file mode 100644 index 00000000..799a41f6 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_shoulder_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c9e4bec895f24c07fb2c4d132fc5e3cc7146155547267e9c270789af6567781 +size 646884 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_wrist_pitch_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_wrist_pitch_link.STL new file mode 100644 index 00000000..6ae19943 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/right_wrist_pitch_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11624373f44c3ac8fcccd09abbb2f5eb9490413a41fb0a9f3de71a01509c05ec +size 630184 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/torso_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/torso_link.STL new file mode 100644 index 00000000..f43b2d79 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/torso_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67eb7433ea97e20da48c39750095391ff4899e5d60d946bf4d700e2038e7d269 +size 2340384 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/wrist_yaw_link.STL b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/wrist_yaw_link.STL new file mode 100644 index 00000000..5183d122 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/urdf/inspire_hand/meshes/wrist_yaw_link.STL @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fb35db8c602a9495322e0be6924b8ed9e415f8e783434dea54596ca8558df +size 224484 diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/utils/__init__.py b/Spectacles-2-Unitree/unitree-client/src/ik/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Spectacles-2-Unitree/unitree-client/src/ik/utils/weighted_moving_filter.py b/Spectacles-2-Unitree/unitree-client/src/ik/utils/weighted_moving_filter.py new file mode 100644 index 00000000..cc1b0f76 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/ik/utils/weighted_moving_filter.py @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: Apache-2.0 +import numpy as np + + +class WeightedMovingFilter: + def __init__(self, weights, data_size=14): + self._window_size = len(weights) + self._weights = np.array(weights) + assert np.isclose(np.sum(self._weights), 1.0), ( + "[WeightedMovingFilter] the sum of weights list must be 1.0!" + ) + self._data_size = data_size + self._filtered_data = np.zeros(self._data_size) + self._data_queue = [] + + def _apply_filter(self): + if len(self._data_queue) < self._window_size: + return self._data_queue[-1] + + data_array = np.array(self._data_queue) + temp_filtered_data = np.zeros(self._data_size) + for i in range(self._data_size): + temp_filtered_data[i] = np.convolve( + data_array[:, i], self._weights, mode="valid" + )[-1] + + return temp_filtered_data + + def add_data(self, new_data): + assert len(new_data) == self._data_size + + if len(self._data_queue) > 0 and np.array_equal(new_data, self._data_queue[-1]): + return # skip duplicate data + + if len(self._data_queue) >= self._window_size: + self._data_queue.pop(0) + + self._data_queue.append(new_data) + self._filtered_data = self._apply_filter() + + @property + def filtered_data(self): + return self._filtered_data + + +if __name__ == "__main__": + # windows_size and weights + filter_params = [ + (np.array([0.7, 0.2, 0.1])), + (np.array([0.5, 0.3, 0.2])), + (np.array([0.4, 0.3, 0.2, 0.1])), + ] diff --git a/Spectacles-2-Unitree/unitree-client/src/main.py b/Spectacles-2-Unitree/unitree-client/src/main.py new file mode 100644 index 00000000..a5e9ce92 --- /dev/null +++ b/Spectacles-2-Unitree/unitree-client/src/main.py @@ -0,0 +1,491 @@ +#!/usr/bin/env python3 +import argparse +import asyncio +import datetime +import json +import logging +import signal +import struct +import time +from enum import Enum + +import ik.ik +import numpy as np +import websockets +from PIL import Image, ImageDraw, ImageFont +from unitree_sdk2py.core.channel import ChannelFactoryInitialize +from unitree_sdk2py.g1.audio.g1_audio_client import AudioClient +from unitree_sdk2py.g1.loco.g1_loco_client import LocoClient + +# Configure logging +logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" +) +logger = logging.getLogger("robot_client") + +# Client statuses +STATUS_DISCONNECTED = "disconnected" +STATUS_WAITING = "waiting" +STATUS_PAIRED = "paired" + +# Configuration constants +FORWARD_SPEED = 0.3 # Forward/backward speed in m/s +LATERAL_SPEED = 0.2 # Left/right speed in m/s +ROTATION_SPEED = 0.6 # Rotation speed in rad/s + + +class RobotState(str, Enum): + LOW_LEVEL = "basic_service" + HIGH_LEVEL = "ai_sport" + + +class Robot: + """ + A wrapper around the unitree LocoClient, AudioClient, and the ArmsAndHands class. + """ + + def __init__(self, mode: RobotState, mock: bool = True): + self.mock = mock + self._motion_state = mode + if not mock: + ChannelFactoryInitialize(0, "eth0") + # logger.info("Initializing MotionSwitcherClient...") + # self._motion_switcher = MotionSwitcherClient() + # self._motion_switcher.Init() + if self._motion_state == RobotState.HIGH_LEVEL: + logger.info( + "Starting client with real robot control, high-level (locomotion) API mode..." + ) + logger.info("Initializing LocoClient and AudioClient...") + self._loco = LocoClient() + self._loco.SetTimeout(10.0) + self._loco.Init() + self._audio = AudioClient() + self._audio.Init() + elif self._motion_state == RobotState.LOW_LEVEL: + logger.info( + "Starting client with real robot control, low-level (hand control) API mode..." + ) + logger.info("Initializing low-level arms and hands IK solver...") + self._arms_and_hands = ik.ik.ArmsAndHands(mock=mock) + else: + if self._motion_state == RobotState.HIGH_LEVEL: + logger.info( + "Starting client in mock robot mode, high-level (locomotion) API mode..." + ) + elif self._motion_state == RobotState.LOW_LEVEL: + logger.info( + "Starting client in mock robot mode, low-level (hand control) API mode..." + ) + logger.info("Initializing low-level arms and hands IK solver...") + self._arms_and_hands = ik.ik.ArmsAndHands(mock=mock) + + self.head_rot = np.array([0, 0, 0, 1]) + + def _set_state(self, new_state: RobotState): + return + # TODO: + # if self.mock: + # return + # try: + # # # Check the current state. + # # code, curr_state = self._motion_switcher.CheckMode() + # # if code != 0: + # # logger.warning(f"Error setting state: {code}") + # # return + # # curr_state_name = curr_state["name"] + # # if curr_state_name != new_state.value: + # if new_state == RobotState.HIGH_LEVEL: + # self._arms_and_hands.pause_movement_publisher() + + # # self._motion_switcher.ReleaseMode() + # # self._motion_switcher.SelectMode(new_state.value) + + # elif new_state == RobotState.LOW_LEVEL: + # self._arms_and_hands.resume_movement_publisher() + + # self._motion_state = new_state + # except Exception as e: + # logger.warning(f"Error setting state: {e}") + # return + + def act(self, action: str): + """Handle discrete pre-programmed actions.""" + if self.mock: + logger.info(f"Mock action: {action}") + return + if self._motion_state == RobotState.LOW_LEVEL: + logger.warning( + f"Cannot perform action in low-level mode: {action}. Restart client in high-level mode with --mode ai_sport" + ) + return + # self._set_state(RobotState.HIGH_LEVEL) + try: + if action == "stand": + self._loco.HighStand() + elif action == "stand_low": + self._loco.LowStand() + elif action == "stand_high": + self._loco.HighStand() + elif action == "sit": + self._loco.Sit() + elif action == "wave": + self._loco.WaveHand() + elif action == "wave_turn": + self._loco.WaveHand(True) + elif action == "shake_hand": + self._loco.ShakeHand() + elif action == "zero_torque": + self._loco.ZeroTorque() + elif action == "damp": + self._loco.Damp() + elif action == "squat2stand": + self._loco.Squat2StandUp() + elif action == "lie2stand": + self._loco.Lie2StandUp() + elif action == "stand2squat": + self._loco.StandUp2Squat() + else: + logger.warning(f"Unknown action: {action}") + except Exception as e: + logger.warning(f"Error handling action: {e}") + + async def move_hands(self, movement: ik.ik.HandMovement): + # self._set_state(RobotState.LOW_LEVEL) + if self._motion_state == RobotState.HIGH_LEVEL: + logger.warning( + "Cannot move hands in high-level mode. Restart client in low-level mode with --mode basic_service" + ) + return + try: + await self._arms_and_hands.move(movement, self.mock) + except Exception as e: + logger.warning(f"Error handling hand movement: {e}") + + def walk(self, long: float, lat: float, yaw: float): + """Handle walking commands with speed clamping.""" + if self.mock: + logger.info(f"Mock walk command: long={long}, lat={lat}, yaw={yaw}") + return + if self._motion_state == RobotState.LOW_LEVEL: + logger.warning( + "Cannot walk in low-level mode. Restart client in high-level mode with --mode ai_sport" + ) + return + # self._set_state(RobotState.HIGH_LEVEL) + # Clamp speed values to the configured limits + x_vel = max(min(long, FORWARD_SPEED), -FORWARD_SPEED) + y_vel = max(min(lat, LATERAL_SPEED), -LATERAL_SPEED) + yaw_vel = max(min(yaw, ROTATION_SPEED), -ROTATION_SPEED) + + # If any of these values are greater than zero, set the rgb to red to indicate the robot is moving. + if x_vel > 0 or y_vel > 0 or yaw_vel > 0: + self.rgb(255, 0, 0) + else: + self.rgb(0, 0, 0) + + self._loco.Move(x_vel, y_vel, yaw_vel) + + def rgb(self, r: int, g: int, b: int): + """Set robot RGB""" + # Clamp RGB values to 0-255 + r = max(0, min(r, 255)) + g = max(0, min(g, 255)) + b = max(0, min(b, 255)) + if self.mock: + logger.info(f"Mock RGB command: r={r}, g={g}, b={b}") + return + if self._motion_state == RobotState.HIGH_LEVEL: + self._audio.LedControl(r, g, b) + + def tts(self, text: str): + """Play text to speech""" + if self.mock: + logger.info(f"Mock TTS command: {text}") + return + # self._audio.TtsMaker(text, 1) # TODO: This only support Chinese at the moment. `1` is the language code for English, but it isn't implemented by Unitree yet. + + async def get_sim_image(self): + """Get a rendered perspective of the robot's simulated movements""" + if self._motion_state == RobotState.HIGH_LEVEL: + # Return an image that says the robot is in High Level mode and can't accept hand movements. + image = Image.new("RGB", (512, 512), (0, 0, 0)) + d = datetime.datetime.now(tz=datetime.UTC) + timestamp_str = d.isoformat(timespec="milliseconds") + draw = ImageDraw.Draw(image) + font = ImageFont.load_default() + font.size = 14 + text = f"{timestamp_str}\nHigh Level Mode\nCannot accept hand movements" + draw.text((5, 5), text, fill=(0, 255, 0), font=font) + return image.tobytes() + x, y, z, w = self.head_rot + image = await self._arms_and_hands.render(x, y, z, w) + # Add timestamp ISO with decimal seconds + d = datetime.datetime.now(tz=datetime.UTC) + timestamp_str = d.isoformat(timespec="milliseconds") + draw = ImageDraw.Draw(image) + font = ImageFont.load_default() + font.size = 14 + text = f"{'[MOCK]' if self.mock else '[LIVE]'} {timestamp_str}" + # Draw the text + draw.text((5, 5), text, fill=(0, 255, 0), font=font) + # Return the image as bytes + return image.tobytes() + + +class RobotClient: + def __init__(self, server_url: str, mode: RobotState, mock: bool = True): + self.server_url = server_url + self.ws = None + self.client_id = None + self.paired_with = None + self.status = STATUS_DISCONNECTED + self.running = True + self.robot = Robot(mode=mode, mock=mock) + + async def connect(self): + """Connect to the server and identify as a robot client""" + try: + logger.info(f"Connecting to {self.server_url}") + self.ws = await websockets.connect( + self.server_url, ping_timeout=60, ping_interval=10 + ) + + # Identify as robot + await self.ws.send(json.dumps({"type": "robot"})) + logger.info("Connected and identified as robot client") + + return True + except Exception: + logger.exception("Connection failed") + return False + + async def handle_messages(self): + """Process incoming messages from the server""" + try: + while self.running and self.ws: + try: + message = await self.ws.recv() + try: + data = json.loads(message) + await self.process_message(data) + except json.JSONDecodeError: + logger.warning(f"Received non-JSON message: {message}") + except websockets.exceptions.ConnectionClosed as e: + logger.warning(f"Connection closed: {e}") + self.status = STATUS_DISCONNECTED + self.paired_with = None + break + except Exception as e: + logger.error(f"Error handling messages: {e}") + + async def process_message(self, data: dict): + """Process different types of messages""" + if data.get("type") == "status_update": + self.handle_status_update(data) + elif data.get("type") == "ping": + await self.handle_ping(data) + elif data.get("type") == "walk": + self.robot.walk(data.get("long", 0), data.get("lat", 0), data.get("yaw", 0)) + elif data.get("type") in [ + "stand", + "stand_low", + "stand_high", + "sit", + "wave", + "wave_turn", + "shake_hand", + "zero_torque", + "damp", + "squat2stand", + "lie2stand", + "stand2squat", + ]: + self.robot.act(data.get("type")) + elif data.get("type") == "hand_movement": + movement = ik.ik.HandMovement(data) + await self.robot.move_hands(movement) + else: + logger.info(f"Received message: {data}") + + def handle_status_update(self, data: dict): + """Handle status update messages from the server""" + old_status = self.status + self.status = data.get("status") + # Always reset the movement to zero when the status changes. + logger.info("Stopping robot movement") + self.robot.walk(0, 0, 0) + if self.status == STATUS_PAIRED: + self.paired_with = data.get("paired_with", {}) + msg = f"Paired with {self.paired_with.get('type')} client ID: {self.paired_with.get('id')}" + logger.info(msg) + self.robot.rgb(0, 255, 0) # Green LED for paired status + self.robot.tts(msg) + elif old_status == STATUS_PAIRED and self.status == STATUS_WAITING: + logger.info(f"Unpairing: {data.get('message')}") + self.paired_with = None + self.robot.rgb(255, 255, 0) # Yellow LED for waiting. + self.robot.tts("Hasta la vista baby") + elif self.status == STATUS_WAITING: + if "client_id" in data: + self.client_id = data.get("client_id") + msg = f"Client ID: {self.client_id} Waiting for pair: {data.get('message')}" + logger.info(msg) + self.robot.rgb(255, 255, 0) # Yellow LED for waiting. + self.robot.tts("Waiting") + elif self.status == STATUS_DISCONNECTED: + logger.info(f"Disconnected: {data.get('message')}") + self.robot.rgb(0, 0, 0) # LED off when disconnected. + self.robot.tts("I'll be back") + + async def handle_ping(self, data: dict): + """Respond to ping messages for latency measurement""" + # TODO: Add a nonce for RTT measurement. + timestamp = data.get("timestamp") + if timestamp: + await self.ws.send( + json.dumps({"type": "pong", "ping_timestamp": timestamp}) + ) + + async def send_status(self): + """Send status updates to the Spectacles client if paired""" + try: + while self.running: + if self.ws and self.status == STATUS_PAIRED: + await self.ws.send( + json.dumps( + { + "type": "robot_status", + "timestamp": time.time(), + "battery": 85, # TODO: DDS rt/lf/bmsstate + "position": [ + 0, + 0, + 0, + ], # TODO: c.f. https://support.unitree.com/home/en/G1_developer/odometer_service_interface + "orientation": [0, 0, 0, 1], + } + ) + ) + await asyncio.sleep(1) + except Exception as e: + logger.error(f"Error sending status: {e}") + + async def send_sim_images(self): + """Stream simulation images with adaptive framerate""" + fps_target = 30 # Target FPS + min_frame_time = 1.0 / fps_target + actual_fps = fps_target + + # For tracking actual FPS + fps_tracking_period = 5.0 # seconds + frame_count = 0 + period_start = time.monotonic() + + try: + while self.running: + if self.ws and self.status == STATUS_PAIRED: + frame_start = time.monotonic() + try: + image_data = await self.robot.get_sim_image() + if image_data: + msg_bytes = ( + struct.pack("!cI", b"s", len(image_data)) + image_data + ) + await self.ws.send(msg_bytes) + frame_count += 1 + + # Track actual FPS + now = time.monotonic() + if now - period_start >= fps_tracking_period: + actual_fps = frame_count / (now - period_start) + logger.info(f"Image streaming actual FPS: {actual_fps:.1f}") + frame_count = 0 + period_start = now + + # Adaptive sleep based on processing time + elapsed = time.monotonic() - frame_start + sleep_time = max(0, min_frame_time - elapsed) + await asyncio.sleep(sleep_time) + + except Exception as e: + logger.error(f"Error in image streaming: {e}") + await asyncio.sleep(1) # Backoff on error + else: + await asyncio.sleep(0.1) + + except asyncio.CancelledError: + logger.info("Image streaming task cancelled") + + async def run(self): + self.shutdown_event = asyncio.Event() + connected = await self.connect() + if connected: + async with asyncio.TaskGroup() as tg: + tg.create_task(self.handle_messages()) + tg.create_task(self.send_sim_images()) + tg.create_task(self.send_status()) + await self.shutdown_event.wait() + else: + logger.error("Failed to connect to the server") + + async def stop(self): + """Stop the client gracefully""" + self.running = False + self.shutdown_event.set() + if self.ws: + try: + await self.ws.send(json.dumps({"type": "unpair"})) + except Exception: + logger.exception("Error sending unpair message") + await self.ws.close() + logger.info("Robot client stopped") + + +async def main(): + parser = argparse.ArgumentParser( + description="Unitree Robot Client for Spectacles Coordination" + ) + parser.add_argument( + "--server", + default="wss://spectaclexr.com/ws", + help="Coordination server WebSocket URL", + ) + parser.add_argument( + "--mode", + action="store", + choices=[RobotState.LOW_LEVEL.value, RobotState.HIGH_LEVEL.value], + default=RobotState.LOW_LEVEL.value, + help="Robot mode: low-level hand control (basic_service) or high-level locomotion (ai_sport)", + ) + parser.add_argument( + "--mock", + action="store_true", + default=False, + help="Run in mock mode for testing purposes", + ) + args = parser.parse_args() + try: + args.mode = RobotState(args.mode) + except ValueError: + logger.error(f"Invalid mode: {args.mode}. Use 'basic_service' or 'ai_sport'.") + return + client = RobotClient(args.server, mode=args.mode, mock=args.mock) + loop = asyncio.get_running_loop() + + for sig in (signal.SIGINT, signal.SIGTERM): + loop.add_signal_handler( + sig, lambda s=sig: asyncio.create_task(shutdown(client)) + ) + + await client.run() + + +async def shutdown(client): + """Graceful shutdown""" + logger.info("Shutting down...") + await client.stop() + + +if __name__ == "__main__": + asyncio.run(main())