πŸ”—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 Spokearrow-up-right - 53 minutes

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

    (1) unity tutorial 01: installationarrow-up-right (01:08) installing the editor to your computer

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 :: YouTubearrow-up-right (this is a series)

Customizable Hands, Teleportation, Touchpad Movement https://www.youtube.com/watch?v=5C6zr4Q5AlAarrow-up-right​

​

Optimizing Unity Files

​https://www.youtube.com/watch?v=w0n4fuC4fNUarrow-up-right​

Shaders in Unity with Amplify

Create Dynamic Materials Without the Need for Code

​https://bit.ly/334UL6yarrow-up-right​

Week 08

​https://catlikecoding.com/unity/tutorials/arrow-up-right​

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_Processingarrow-up-right​

​https://assetstore.unity.com/packages/tools/input-management/osc-simpl-53710arrow-up-right​

​https://answers.unity.com/questions/520581/how-to-send-data-from-client-to-client.htmlarrow-up-right​

Particle Systems in Unibyt

​https://mobile.twitter.com/_kzrarrow-up-right​

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

​

Rendering 360 Images in Maya

​https://www.youtube.com/watch?v=m6aNOBsNRYMarrow-up-right​

​https://www.youtube.com/watch?v=q4RK77jspvUarrow-up-right​

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

​

Week 07

TUTORIALS MAYA 3D Maya_CreatingARockyPlanearrow-up-right Maya_Rigging_Part01arrow-up-right Maya_Rigging_Part02arrow-up-right Maya_Rigging_Part03arrow-up-right Maya_Retopology for Beginnersarrow-up-right Maya_Create a Normal Maparrow-up-right (why to use normal maps: https://docs.unity3d.com/Manual/StandardShaderMaterialParameterNormalMap.htmlarrow-up-right)

UNITY Shading, Lighting, Skyboxes Unity-How To Make a Skybox in Photoshoparrow-up-right Unity_Create a Reflection Probearrow-up-right (lighting) Unity_LightWeightRenderPipelinearrow-up-right Unity_Materials Color and Texturearrow-up-right Part 1 Unity_Materials Color and Texturearrow-up-right (Emission & Transparency) Part 2 Unity_LightProbesarrow-up-right Animation & Video Unity_CreatingAnimationarrow-up-right Unity_AnimatedVideoTexturearrow-up-right Unity_Video on a Screen Objectarrow-up-right

Systems Unity_3D solar system with OpenGL and C#arrow-up-right

Interactivity Unity_ViveTriggerPressDept (SteamVR)arrow-up-right Unity_VR Body_3DOFarrow-up-right Unity_InputUsingActionsarrow-up-right Unity_LensFlarearrow-up-right Unity_FlyingLikeSupermanarrow-up-right Unity_FlyingLeftAndRightarrow-up-right Unity_FortuneWheelSpinnerarrow-up-right Unity_Opening a Doorarrow-up-right Unity_Teleportation and Grabbing Objectsarrow-up-right Unity_TeleportationForOculus arrow-up-right(no code) Unity_Grabbing, Walking, Opening Doorsarrow-up-right Unity_PaintingInVRarrow-up-right Unity_SwitchingScenes with C#arrow-up-right Unity_SteamVR_LoadLevelsarrow-up-right Unity_Basic Loading Levels w Steam VRarrow-up-right Unity_Creating a Buttonarrow-up-right Unity_Switching Between Scenes with Buttonsarrow-up-right Unity_Keyboard and Joystick Controls in Unity 2019!arrow-up-right (New Input System Tutorial)

Altering Body Perception Unity_The Resizable Humanarrow-up-right How to Make Simple Games Unity_How to Make a Horror Game in Virtual Realityarrow-up-right (this one for the dream projects) Unity_How to Make an Oculus Quest Gamearrow-up-right Explorer 3D Game Kitarrow-up-right (no code)

Asset Store (Drawing & Painting + UI) VR Brusharrow-up-right ($6.99) For painting in VR VR UI Kitarrow-up-right ($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 Unityarrow-up-right (text based) Oculus Quest Development in Unityarrow-up-right (video based)

UNITY MANUAL Graphicsarrow-up-right Audioarrow-up-right VR Overviewarrow-up-right VR Devicesarrow-up-right Scriptingarrow-up-right Open Source Repositoriesarrow-up-right

Week 05

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

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

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

Week 04

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

Week 03

Unity Intro: https://vimeo.com/362086710arrow-up-right

​

Last updated