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);
}
}
}
ADDITIONAL TUTORIALS/RESOURCES
SPECIFIC FUNCTIONALITY TUTORIALS
GREAT YOU TUBE CHANNELS TO FOLLOW:
ARCHIVE OF RESOURCES, FALL 2019:
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β
β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/β
β
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
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
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
Unity Intro: https://vimeo.com/362086710
β