# Project export: YOGA-XR

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: TreeHacks 2026
- Tagline: Transform your room into a mixed-reality learning space. Experience one-on-one sessions with real experts teaching you skills right in your own environment.Just put on your headset and start learning!
- Devpost: https://devpost.com/software/yoga-13dmup
- GitHub: https://github.com/kanakapalli/YOGA_XR
- Video: https://www.youtube.com/embed/YPN5dpvOHwc?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 0 GitHub contributor(s) — 

## Devpost submission (written by the team)

### Inspiration

My personal struggle with dyslexia, a learning disorder that makes reading difficult due to problems with identifying speech sounds and learning how they relate to letters and words, inspired this project. While there are various learning disorders, I've found that experiential learning—learning by doing—is the most effective method for many. YOGA_XR aims to extend this mode of learning to other essential skills, not just limited to yoga, by providing in-person learning experiences at a user's own pace, comfort, and right environment.

### What it does

YOGA_XR transcends boundaries, offering a gateway to limitless learning possibilities. While its foundation lies in yoga, this innovative platform is poised to expand into a diverse array of in-person skills. From mastering musical instruments to refining language proficiency, YOGA_XR adapts to the evolving needs and aspirations of its users, fostering a culture of continuous growth and exploration.

### How we built it

We developed this project using the META Presence Platform, which includes tools like the Interaction SDK, Moment SDK, and the Mixed Reality Utility Kit. Additionally, we engineered a custom chroma key shader. Our development process was guided by extensive research into best practices for user comfort and immersive experiences, ensuring that YOGA_XR meets high usability standards. To optimize our design and iterate effectively, we utilized Shapes XR, a collaborative design and prototyping tool specifically tailored for XR environments. This allowed our team to visualize and adjust our user interfaces and interactions in real time, enhancing the overall design process. we have created a mini green screen studio in our room to shoot xr content for the application

### Challenges we ran into

We faced several challenges, primarily due to the steep learning curve associated with the Meta SDK. Although Meta's documentation was helpful, it was not always up-to-date, and with the sudden update to SDK version 64, we encountered some issues that required adaptations to the latest version. Furthermore, due to the novelty of the latest SDK, there were limited online resources, which meant we had to spend significant time navigating and understanding the documentation.

### Accomplishments we're proud of

We successfully navigated the design challenges specific to XR and mixed reality, focusing on user comfort and immersive experience. We established a green screen studio in our space to facilitate content creation and successfully launched the first version of our application, demonstrating its potential and functionality.

### What we learned

This project was a valuable opportunity to deepen our understanding of the Meta SDK and Unity. We learned about various interaction techniques such as raycasting, grabbing, poking, and using the canvas pointer and palm menu. In mixed reality, we explored MRUK, effect mesh, and overscene management.

### What's next

Posture Section: Integrate advanced posture tracking to provide real-time feedback and guidance, enhancing the yoga practice experience for users. Music Learning Module: Expand YOGA-XR to include dedicated sections for learning musical instruments, leveraging audio and music notes to facilitate skill acquisition and mastery. Image Processing: Implement cutting-edge image processing algorithms to analyze camera feeds, allowing YOGA-XR to assess and correct posture in real-time, ensuring optimal form and safety. Language Learning: Enhance YOGA-XR with language learning features, including text-to-speech capabilities and AI-powered voice SDK-based exams, empowering users to expand their linguistic proficiency in an immersive environment. Branding Enhancement: Strengthen the YOGA-XR brand identity and visual appeal to resonate with the target audience and differentiate from competitors. Market Expansion: Develop a comprehensive go-to-market strategy to reach new demographics and markets, leveraging strategic partnerships and innovative marketing initiatives. Research for Innovation: Conduct in-depth research to identify emerging trends and user needs, driving continuous innovation and improvement in YOGA-XR's features and functionality. Spatial video content: shoot spatial video content and integrate it with meta devices for a better user experience.

## README (from the GitHub repository)

# YOGA_XR
 mixed reality yoda learning application


## Detected evidence (automated analysis)

Indexed codebase: 145 recognized source files, 859 KB.
- C# (language) — detected in the code
- AWS (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (120 of 1066)

```
.gitattributes
.gitignore
.vsconfig
asd_BurstDebugInformation_DoNotShip/tempburstlibs/arm64-v8a/lib_burst_generated.txt
Assets/images.meta
Assets/images/arrow_blue_2-removebg-preview.png.meta
Assets/images/arrow_blue-removebg-preview.png.meta
Assets/images/back-removebg-preview.png.meta
Assets/images/bg.png.meta
Assets/images/border.png.meta
Assets/images/DALL_E_2024-04-29_02.33.36_-_Create_a_front-facing__readable_3D_typography_design_of_the_word__Hatha_Yoga_._The_letters_should_be_styled_with_a_nature-inspired_theme__incorporatin-removebg-preview.png.meta
Assets/images/exit button.png.meta
Assets/images/respwan-removebg-preview.png.meta
Assets/images/Woman doing yoga in sports clothes green screen _ Green Screen Yoga Video Featuring a Sporty Woman.mp4.meta
Assets/images/yoga_images.meta
Assets/images/yoga_images/Ashtanga_Yoga Background Removed.png.meta
Assets/images/yoga_images/Bikram_Yoga1 Background Removed.png.meta
Assets/images/yoga_images/Bikram_Yoga2 Background Removed.png.meta
Assets/images/yoga_images/hatha_yoga Background Removed.png.meta
Assets/images/yoga_images/Iyengar_Yoga1 Background Removed.png.meta
Assets/images/yoga_images/Iyengar_Yoga2 Background Removed.png.meta
Assets/images/yoga_images/Kundalini_Yoga Background Removed.png.meta
Assets/images/yoga_images/power_Yoga Background Removed.png.meta
Assets/images/yoga_images/Restorative_Yoga Background Removed.png.meta
Assets/images/yoga_images/Vinyasa_Yoga1 Background Removed.png.meta
Assets/images/yoga_images/Vinyasa_Yoga2 Background Removed.png.meta
Assets/images/yoga_images/Yin_Yoga Background Removed.png.meta
Assets/images/yoga_mentor-removebg.png.meta
Assets/Import.meta
Assets/Import/Appearance_effect_light_beam_.meta
Assets/Import/Appearance_effect_light_beam.meta
Assets/Import/Appearance_effect_light_beam/animations.meta
Assets/Import/Appearance_effect_light_beam/animations/Appearance_effect_light_beam.controller
Assets/Import/Appearance_effect_light_beam/animations/Appearance_effect_light_beam.controller.meta
Assets/Import/Appearance_effect_light_beam/animations/Take 001.anim
Assets/Import/Appearance_effect_light_beam/animations/Take 001.anim.meta
Assets/Import/Appearance_effect_light_beam/Appearance_effect_light_beam.prefab
Assets/Import/Appearance_effect_light_beam/Appearance_effect_light_beam.prefab.meta
Assets/Import/Appearance_effect_light_beam/license.txt
Assets/Import/Appearance_effect_light_beam/license.txt.meta
Assets/Import/Appearance_effect_light_beam/materials.meta
Assets/Import/Appearance_effect_light_beam/materials/guangshu_1.mat
Assets/Import/Appearance_effect_light_beam/materials/guangshu_1.mat.meta
Assets/Import/Appearance_effect_light_beam/materials/guangshushu1_2.mat
Assets/Import/Appearance_effect_light_beam/materials/guangshushu1_2.mat.meta
Assets/Import/Appearance_effect_light_beam/materials/xingguang_0.mat
Assets/Import/Appearance_effect_light_beam/materials/xingguang_0.mat.meta
Assets/Import/Appearance_effect_light_beam/materials/yuanhuan_3.mat
Assets/Import/Appearance_effect_light_beam/materials/yuanhuan_3.mat.meta
Assets/Import/Appearance_effect_light_beam/meshes.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_0_0_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_0_0_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_1_1_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_1_1_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_10_10_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_10_10_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_100_100_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_100_100_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_101_101_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_101_101_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_102_102_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_102_102_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_103_103_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_103_103_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_104_104_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_104_104_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_105_105_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_105_105_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_106_106_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_106_106_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_107_107_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_107_107_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_108_108_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_108_108_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_109_109_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_109_109_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_11_11_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_11_11_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_110_110_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_110_110_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_111_111_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_111_111_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_112_112_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_112_112_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_113_113_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_113_113_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_114_114_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_114_114_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_115_115_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_115_115_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_116_116_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_116_116_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_117_117_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_117_117_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_118_118_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_118_118_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_119_119_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_119_119_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_12_12_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_12_12_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_120_120_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_120_120_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_121_121_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_121_121_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_122_122_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_122_122_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_123_123_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_123_123_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_124_124_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_124_124_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_125_125_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_125_125_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_126_126_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_126_126_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_127_127_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_127_127_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_128_128_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_128_128_0.asset.meta
Assets/Import/Appearance_effect_light_beam/meshes/Object_129_129_0.asset
Assets/Import/Appearance_effect_light_beam/meshes/Object_129_129_0.asset.meta
[946 more files omitted for size]
```

### Dependencies

- Packages/com.singularitygroup.hotreload/package.json: com.unity.modules.unitywebrequest@1.0.0, com.unity.ugui@1.0.0

### Recent commits (newest first)

- init
- Initial commit

## Key source files (fetched from GitHub, selected and truncated for size)

### Packages/com.singularitygroup.hotreload/LICENSE.md

```markdown
End User License Agreement (“EULA”) for Hot Reload for Unity (“Software”)
Please read this End-User License Agreement ("Agreement") carefully before purchasing, downloading, or using Hot Reload for Unity ("Software").

By purchasing, downloading or using the Software, you, the individual or entity (“End-User”), agree to be bound by this EULA as well as by our Terms and Conditions.

If End-User does not agree to the terms of this Agreement, do not purchase, download or use the Software.

The subject matter of this EULA is the licensing of the Software to End-User. The Software is licensed, not sold.

License

The Naughty Cult Ltd. (“Licensor”) grants End-User a revocable, non-exclusive, worldwide, non-transferable, limited license to download, install and use the Software for personal and commercial purposes in accordance with the terms of this Agreement and the terms set out in the Terms and Conditions.

The Software is owned and copyrighted by The Naughty Cult Ltd.. Your license confers no title or ownership in the Software and should not be construed as a sale of any right in the Software.

The Software is protected by copyright law and international treaty provisions. You acknowledge that no ownership of the intellectual property in the Software is transferred to you. You further acknowledge that The Naughty Cult Ltd. retains full ownership rights to the Software, and you will not acquire any rights to the Software except as outlined in this license. You agree that any copies of the Software will include the same proprietary notices found on and within the original Software.

End-User's Rights and Obligations

End-User may use the licensed Software only for its intended purpose. End-User may not modify, reproduce, distribute, sublicense, rent, lease or lend the Software.
Each active license allows End-User to install and use the Software on a maximum of two devices associated with one specific Unity seat. End-User may not share the Software or the license key with any third party.

You may not modify the Software or disable any licensing or control features of the Software without express permission from the Licensor. You agree that you will not attempt to reverse compile, modify, translate, or disassemble the Software in whole or in part.

Once End-User's active license is terminated, End-User will not receive any new updates to the Software, and may not download, install, integrate or otherwise use versions of the Software released at any time hereafter, unless a license is activated.

Termination
This EULA will terminate automatically if End-User fails to comply with any of the terms and conditions of this Agreement. In such event, End-User must immediately stop using the Software and destroy all copies of the Software in End-User's possession.

Governing Law
This EULA shall be governed by the laws of the country in which the Licensor is headquartered without regard to its conflict of law provisions. We reserve the right to terminate or sus
[truncated — 1659 more characters]
```

### Packages/com.singularitygroup.hotreload/Third Party Notices.md

```markdown
# Dotnet - https://github.com/Microsoft/dotnet/blob/main/LICENSE

The MIT License (MIT)

Copyright (c) 2019 Microsoft

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.

# Harmony2 - https://www.nuget.org/packages/Lib.Harmony/2.2.2/License

MIT License

Copyright (c) 2017 Andreas Pardeike

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.



# Monomod - https://github.com/MonoMod/MonoMod/blob/master/LICENSE

The MIT License (MIT)

Copyright (c) 2015 - 2020 0x0ade

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 PROVIDE
[truncated — 12408 more characters]
```

### Packages/com.singularitygroup.hotreload/package.json

```
{
  "displayName": "Hot Reload",
  "name": "com.singularitygroup.hotreload",
  "unity": "2018.4",
  "description": "Change code and get immediate updates in the Unity Editor or on-device.",
  "category": "Engineering",
  "keywords": [
    "Hot",
    "Reload",
    "patch",
    "code",
    "sg",
    "singularity"
  ],
  "version": "1.12.9",
  "dependencies": {
    "com.unity.ugui": "1.0.0",
    "com.unity.modules.unitywebrequest": "1.0.0"
  }
}

```

### Assets/scripts/faceTowardsCamera.cs

```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class faceTowardsCamera : MonoBehaviour
{

    private Transform cameraTransform;



    void Update()
    {
        cameraTransform = FindFirstObjectByType<OVRCameraRig>().centerEyeAnchor;
        if (cameraTransform != null)
        {
        

            Vector3 lookAt = cameraTransform.transform.position;
            lookAt.y = transform.position.y;


            Debug.DrawLine(lookAt, transform.position, Color.red);

            transform.LookAt(lookAt);
            transform.Rotate(0, 180, 0);

        }
    }
}

```

### Assets/scripts/YogaUiController.cs

```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class YogaUiController : MonoBehaviour
{
    public GameObject mentorUI;
    public GameObject yogaSelection;



    public void dynamicExit()
    {
        if (mentorUI.active == true)
        {
            onExitMentor();
        }

        if (yogaSelection.active == true)
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
        }


    }
    public void onSelectYoga()
    {
        mentorUI.SetActive(true);
        yogaSelection.SetActive(false);
    }

    public void onExitMentor()
    {
        mentorUI.SetActive(false);
        yogaSelection.SetActive(true);
    }
}

```

### Assets/scripts/SpwaningUI.cs

```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpwaningUI : MonoBehaviour
{

    public GameObject objectToSpawn; 

    public float distanceInFront = 0.5f;

    void Start()
    {
        Invoke("SpwaningBeforeOVRCameras", 1.0f);

    }

    // Update is called once per frame
    void SpwaningBeforeOVRCameras()
    {
        Transform cameraTransform = FindFirstObjectByType<OVRCameraRig>().centerEyeAnchor;
        Vector3 newPosition = cameraTransform.position + cameraTransform.forward * distanceInFront;
        Debug.Log($"cameraTransform y  {cameraTransform.position.y}");
        newPosition.y = (float)(cameraTransform.position.y - 0.3);
        Debug.Log($"newPositio {newPosition}");

        objectToSpawn.transform.position = newPosition;

        objectToSpawn.SetActive(true);
    }
}

```

### Assets/scripts/ScebeLoader_scripot.cs

```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class ScebeLoader_scripot : MonoBehaviour
{

    public float transitionTime;

    public void GoToNextScene()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }

    public void GoToPerviousScene()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
    }

    public void GoToNextSceneWithDelay()
    {
        StartCoroutine(IGoToScene(SceneManager.GetActiveScene().buildIndex + 1));
    }

    IEnumerator IGoToScene(int sceneIndex)
    {
       /* transition.SetTrigger("Start");*/

        yield return new WaitForSeconds(transitionTime);
        /* SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);*/
        
        SceneManager.LoadScene(sceneIndex);
    }
}

```

### Assets/scripts/skybox manager.cs

```c#
using UnityEngine;
using UnityEngine.Video;

public class SkyboxManager : MonoBehaviour
{
    public Material[] skyMaterials;
    public RenderTexture[] skyRenderTextures;
    public VideoPlayer videoPlayer;

    private void Start()
    {
        ChangeSkybox(0);
    }

    public void ChangeSkybox(int materialIndex)
    {
        if (materialIndex >= 0 && materialIndex < skyMaterials.Length)
        {
            RenderSettings.skybox = skyMaterials[materialIndex];
        }
        else
        {
            Debug.LogWarning("Invalid material index provided.");
        }
    }

    public void PlayVideo(int videoIndex)
    {
        if (videoIndex >= 0 && videoIndex < skyRenderTextures.Length)
        {
            RenderSettings.skybox.SetTexture("_MainTex", skyRenderTextures[videoIndex]);
        }
        else
        {
            Debug.LogWarning("Invalid video index provided.");
        }
    }
}

```

### Assets/scripts/testda.cs

```c#
using Oculus.Interaction.Input;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class testda : MonoBehaviour
{
    [SerializeField] private LineRenderer lineRenderer;
    private void Update()
    {
        Vector3 controllerRightPos = OVRInput.GetLocalControllerPosition(OVRInput.Controller.RHand);
        Quaternion controllerRightQ = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RHand);
        Quaternion rotatedQuaternion = controllerRightQ * Quaternion.Euler(0, 0, 0);
        Vector3 rayDirection = rotatedQuaternion * Vector3.forward;

        if(Physics.Raycast(controllerRightPos,rayDirection, out RaycastHit hit))
        {
            lineRenderer.SetPosition(0, controllerRightPos);
            OVRSemanticClassification anchor = hit.collider.GetComponent<OVRSemanticClassification>();

            if(anchor != null)
            {
                Vector3 endpoint = anchor.transform.position;
                lineRenderer.SetPosition(1,endpoint);
            }
            else
            {
                lineRenderer.SetPosition(1, hit.point);
            }
        }
    }
}

```

### Assets/scripts/ScrollController.cs

```c#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScrollController : MonoBehaviour
{

    public ScrollRect scrollRect; // Assign in the inspector
    public float itemWidth = 160f; // Width of each item including spacing
    private float currentX = 0f;
    public float smoothDuration = 0.3f; // Duration of the smooth scroll animation

    public void MoveToNextItem()
    {
        currentX += itemWidth;
        if (currentX > scrollRect.content.rect.width - itemWidth)
            currentX = 0; // Reset to start if it goes beyond the last item

        Vector2 newPosition = new Vector2(currentX, scrollRect.content.anchoredPosition.y);
        StartCoroutine(SmoothMove(newPosition, smoothDuration));
    }

    public void MoveToPreviousItem()
    {
        currentX -= itemWidth;
        if (currentX < 0)
            currentX = scrollRect.content.rect.width - itemWidth; // Wrap around to the last item

        Vector2 newPosition = new Vector2(currentX, scrollRect.content.anchoredPosition.y);
        StartCoroutine(SmoothMove(newPosition, smoothDuration));
    }

    IEnumerator SmoothMove(Vector2 targetPosition, float duration)
    {
        float time = 0;
        Vector2 startValue = scrollRect.content.anchoredPosition;

        while (time < duration)
        {
            time += Time.deltaTime;
            scrollRect.content.anchoredPosition = Vector2.Lerp(startValue, targetPosition, time / duration);
            yield return null;
        }
        scrollRect.content.anchoredPosition = targetPosition; // Ensure final position is exact

    }

}

```

[133 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]