🔗Links to Applications/Tutorials

RESOURCES, FALL 2020:

IDM XR LAB WEBSITE:

CARLA TUTORIALS & SCRIPTS:

  • LIGHTING (Light Maps and Light Probe Groups)

  • POST PROCESSING, CHANGING SCENES, UI INTERACTIVITY, ANIMATION ON XR RIG, ANIMATED SHADERS

  • SNAP TURN SCRIPT WITH FADE (STEAM, can it be adapted for XR Toolkit?)

    using UnityEngine;
    using System.Collections;
    
    namespace Valve.VR.InteractionSystem
    {
        //-----------------------------------------------------------------------------
        public class SnapTurn : MonoBehaviour
        {
            public float snapAngle = 90.0f;
    
            public bool showTurnAnimation = true;
    
            public AudioSource snapTurnSource;
            public AudioClip rotateSound;
    
            public GameObject rotateRightFX;
            public GameObject rotateLeftFX;
    
            public SteamVR_Action_Boolean snapLeftAction = SteamVR_Input.GetBooleanAction("SnapTurnLeft");
            public SteamVR_Action_Boolean snapRightAction = SteamVR_Input.GetBooleanAction("SnapTurnRight");
    
            public bool fadeScreen = true;
            public float fadeTime = 0.1f;
            public Color screenFadeColor = Color.black;
    
            public float distanceFromFace = 1.3f;
            public Vector3 additionalOffset = new Vector3(0, -0.3f, 0);
    
            public static float teleportLastActiveTime;
    
            private bool canRotate = true;
    
            public float canTurnEverySeconds = 0.4f;
    
    
            private void Start()
            {
                AllOff();
            }
    
            private void AllOff()
            {
                if (rotateLeftFX != null)
                    rotateLeftFX.SetActive(false);
    
                if (rotateRightFX != null)
                    rotateRightFX.SetActive(false);
            }
    
    
            private void Update()
            {
                Player player = Player.instance;
    
                if (canRotate && snapLeftAction != null && snapRightAction != null && snapLeftAction.activeBinding && snapRightAction.activeBinding)
                {
                    //only allow snap turning after a quarter second after the last teleport
                    if (Time.time < (teleportLastActiveTime + canTurnEverySeconds))
                        return;
    
                    // only allow snap turning when not holding something
    
                    bool rightHandValid = player.rightHand.currentAttachedObject == null ||
                        (player.rightHand.currentAttachedObject != null
                        && player.rightHand.currentAttachedTeleportManager != null
                        && player.rightHand.currentAttachedTeleportManager.teleportAllowed);
    
                    bool leftHandValid = player.leftHand.currentAttachedObject == null ||
                        (player.leftHand.currentAttachedObject != null
                        && player.leftHand.currentAttachedTeleportManager != null
                        && player.leftHand.currentAttachedTeleportManager.teleportAllowed);
    
    
                    bool leftHandTurnLeft = snapLeftAction.GetStateDown(SteamVR_Input_Sources.LeftHand) && leftHandValid;
                    bool rightHandTurnLeft = snapLeftAction.GetStateDown(SteamVR_Input_Sources.RightHand) && rightHandValid;
    
                    bool leftHandTurnRight = snapRightAction.GetStateDown(SteamVR_Input_Sources.LeftHand) && leftHandValid;
                    bool rightHandTurnRight = snapRightAction.GetStateDown(SteamVR_Input_Sources.RightHand) && rightHandValid;
    
                    if (leftHandTurnLeft || rightHandTurnLeft)
                    {
                        RotatePlayer(-snapAngle);
                    }
                    else if (leftHandTurnRight || rightHandTurnRight)
                    {
                        RotatePlayer(snapAngle);
                    }
                }
            }
    
    
            private Coroutine rotateCoroutine;
            public void RotatePlayer(float angle)
            {
                if (rotateCoroutine != null)
                {
                    StopCoroutine(rotateCoroutine);
                    AllOff();
                }
    
                rotateCoroutine = StartCoroutine(DoRotatePlayer(angle));
            }
    
            //-----------------------------------------------------
            private IEnumerator DoRotatePlayer(float angle)
            {
                Player player = Player.instance;
    
                canRotate = false;
    
                snapTurnSource.panStereo = angle / 90;
                snapTurnSource.PlayOneShot(rotateSound);
    
                if (fadeScreen)
                {
                    SteamVR_Fade.Start(Color.clear, 0);
    
                    Color tColor = screenFadeColor;
                    tColor = tColor.linear * 0.6f;
                    SteamVR_Fade.Start(tColor, fadeTime);
                }
    
                yield return new WaitForSeconds(fadeTime);
    
                Vector3 playerFeetOffset = player.trackingOriginTransform.position - player.feetPositionGuess;
                player.trackingOriginTransform.position -= playerFeetOffset;
                player.transform.Rotate(Vector3.up, angle);
                playerFeetOffset = Quaternion.Euler(0.0f, angle, 0.0f) * playerFeetOffset;
                player.trackingOriginTransform.position += playerFeetOffset;
    
                GameObject fx = angle > 0 ? rotateRightFX : rotateLeftFX;
    
                if (showTurnAnimation)
                    ShowRotateFX(fx);
    
                if (fadeScreen)
                {
                    SteamVR_Fade.Start(Color.clear, fadeTime);
                }
    
                float startTime = Time.time;
                float endTime = startTime + canTurnEverySeconds;
    
                while (Time.time <= endTime)
                {
                    yield return null;
                    UpdateOrientation(fx);
                };
    
                fx.SetActive(false);
                canRotate = true;
            }
    
            void ShowRotateFX(GameObject fx)
            {
                if (fx == null)
                    return;
    
                fx.SetActive(false);
    
                UpdateOrientation(fx);
    
                fx.SetActive(true);
    
                UpdateOrientation(fx);
            }
    
            private void UpdateOrientation(GameObject fx)
            {
                Player player = Player.instance;
    
                //position fx in front of face
                this.transform.position = player.hmdTransform.position + (player.hmdTransform.forward * distanceFromFace);
                this.transform.rotation = Quaternion.LookRotation(player.hmdTransform.position - this.transform.position, Vector3.up);
                this.transform.Translate(additionalOffset, Space.Self);
                this.transform.rotation = Quaternion.LookRotation(player.hmdTransform.position - this.transform.position, Vector3.up);
            }
        }
    }
  • AUTHORING for Mozilla Hubs using Spoke - 53 minutes

  • INTRO TO UNITY (demo) Basic Setup, Packages, Asset store

    (1) unity tutorial 01: installation (01:08) installing the editor to your computer

  • BUILD SETTINGS with Oculus Quest https://www.youtube.com/watch?v=LZjUn2qvJC0

ADDITIONAL TUTORIALS/RESOURCES

SPECIFIC FUNCTIONALITY TUTORIALS

GREAT YOU TUBE CHANNELS TO FOLLOW:

ARCHIVE OF RESOURCES, FALL 2019:

Week 09

Unity Integration with Github Mark Young :: YouTube (this is a series)

Customizable Hands, Teleportation, Touchpad Movement https://www.youtube.com/watch?v=5C6zr4Q5AlA

Optimizing Unity Files

https://www.youtube.com/watch?v=w0n4fuC4fNU

Shaders in Unity with Amplify

Create Dynamic Materials Without the Need for Code

https://bit.ly/334UL6y

Week 08

https://catlikecoding.com/unity/tutorials/

There's a few different thoughts on getting Processing to work inside Unity.

https://www.uni-weimar.de/kunst-und-gestaltung/wiki/GMU:Tutorials/Networking/Controlling_Unity_with_Processing

https://assetstore.unity.com/packages/tools/input-management/osc-simpl-53710

https://answers.unity.com/questions/520581/how-to-send-data-from-client-to-client.html

Particle Systems in Unibyt

https://mobile.twitter.com/_kzr

https://blogs.unity3d.com/2018/11/27/creating-explosive-visuals-with-the-visual-effect-graph/

Rendering 360 Images in Maya

https://www.youtube.com/watch?v=m6aNOBsNRYM

https://www.youtube.com/watch?v=q4RK77jspvU

Here's an example of a 360 room I built in Maya: https://aworldofonesown.glitch.me/

Week 07

TUTORIALS MAYA 3D Maya_CreatingARockyPlane Maya_Rigging_Part01 Maya_Rigging_Part02 Maya_Rigging_Part03 Maya_Retopology for Beginners Maya_Create a Normal Map (why to use normal maps: https://docs.unity3d.com/Manual/StandardShaderMaterialParameterNormalMap.html)

UNITY Shading, Lighting, Skyboxes Unity-How To Make a Skybox in Photoshop Unity_Create a Reflection Probe (lighting) Unity_LightWeightRenderPipeline Unity_Materials Color and Texture Part 1 Unity_Materials Color and Texture (Emission & Transparency) Part 2 Unity_LightProbes Animation & Video Unity_CreatingAnimation Unity_AnimatedVideoTexture Unity_Video on a Screen Object

Systems Unity_3D solar system with OpenGL and C#

Interactivity Unity_ViveTriggerPressDept (SteamVR) Unity_VR Body_3DOF Unity_InputUsingActions Unity_LensFlare Unity_FlyingLikeSuperman Unity_FlyingLeftAndRight Unity_FortuneWheelSpinner Unity_Opening a Door Unity_Teleportation and Grabbing Objects Unity_TeleportationForOculus (no code) Unity_Grabbing, Walking, Opening Doors Unity_PaintingInVR Unity_SwitchingScenes with C# Unity_SteamVR_LoadLevels Unity_Basic Loading Levels w Steam VR Unity_Creating a Button Unity_Switching Between Scenes with Buttons Unity_Keyboard and Joystick Controls in Unity 2019! (New Input System Tutorial)

Altering Body Perception Unity_The Resizable Human How to Make Simple Games Unity_How to Make a Horror Game in Virtual Reality (this one for the dream projects) Unity_How to Make an Oculus Quest Game Explorer 3D Game Kit (no code)

Asset Store (Drawing & Painting + UI) VR Brush ($6.99) For painting in VR VR UI Kit ($29.99) Build Cross-platform VR App With Ease

PLATFORMS You can render directly to Oculus Rift and HTC Vive Oculus Go, Oculus Quest, and Gear VR are a little more complicated Oculus Quest Development in Unity (text based) Oculus Quest Development in Unity (video based)

UNITY MANUAL Graphics Audio VR Overview VR Devices Scripting Open Source Repositories

Week 05

Platform Agnostic View Unity tutorial here: https://vimeo.com/363607099 And view VR demo here: https://vimeo.com/363608607

HTC Vive Input Utility View Unity tutorial here: https://vimeo.com/363612387 And view VR demo here: https://vimeo.com/363612544

Steam VR Plugin View Unity tutorial here: https://vimeo.com/363616615 And view VR demo here: https://vimeo.com/363621707

Week 04

Maya Essential Training: https://www.linkedin.com/learning/maya-2016-essential-training/welcome?u=2131553 Maya Lesson 06 : humanoid tutorial with Maya Quick Rig: https://vimeo.com/363668885 Maya Lesson 07 : importing objects and manipulating them: (part 01) https://vimeo.com/363676635 and here (part 02) https://vimeo.com/363677595

Week 03

Unity Intro: https://vimeo.com/362086710

Last updated

Was this helpful?