Week 9

Danylo is looking into Koreographer
Robin in checking out the new Pro Builder asset
Note: if you are paying for an asset make sure you create a Unity ID and log in with that. This way you can re-download the asset as needed wherever you are.

Homework

Read through and watch Bodies Against Time

Artists of the Week

Goodbye Uncanny Valley

Final project criteria

For example

Video

Video has changed in recent iterations of Unity, there is now a video componet that you attach to a game object instead of a video texture which is the way it used to be.
To make a video billboard

360 video skybox

This works and (I confess) doesn't 100% make sense to me that it does.
  1. Go GameObject - Video - Video player
    drag your video clip into the Video Clip box in the inspector
  2. make a new "renderer texture” (Assets - Create - renderer texture)
    • make it the size of your video, and (I think) 2D. Wrap mode (I think) Clamp.
    • drag your new render texture into the Target Texture box on the Video player.
  3. make a new material and in the box that says None (Texture) drag the “Renderer Texture” you just made
  4. make the Skybox Material this new material (Window - Lighting click on the scene tab)

Paint-weighting

If the mesh is the skin and the skeleton are the bones, what's muscle? Well, there is none, but we can fake it by taking more control over how the bones affect the mesh.
You can "paint" the the influence that each bone has on the mesh. Here's where you're going to wish your mesh had more detail. Paint weighting in the API
Moving with Root motion. Here's a handy mouse look script if you want to be able to look but not move. Good for looking at the VR skybox.


using UnityEngine;
using System.Collections;

// Script by IJM: http://answers.unity3d.com/questions/29741/mouse-look-script.html
// Changed to fit standard C# conventions

// MouseLook rotates the transform based on the mouse delta.
// Minimum and Maximum values can be used to constrain the possible rotation

// To make an FPS style character:
// - Create a capsule.
// - Add a rigid body to the capsule
// - Add the MouseLook script to the capsule.
// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
// - Add FPSWalker script to the capsule

/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class mouseLookJoe : MonoBehaviour {

	public enum RotationAxes { MouseXAndY = 0, MouseX = 1,     MouseY = 2 };
	public RotationAxes axes = RotationAxes.MouseXAndY;
	public float sensitivityX = 15F;
	public float sensitivityY = 15F;

	public float minimumX = -360F;
	public float maximumX = 360F;

	public float minimumY = -60F;
	public float maximumY = 60F;

	float rotationX = 0F;
	float rotationY = 0F;

	Quaternion originalRotation;

	void Update()
	{
		if (axes == RotationAxes.MouseXAndY)
		{
			// Read the mouse input axis
			rotationX += Input.GetAxis("Mouse X") * sensitivityX;
			rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

			rotationX = ClampAngle(rotationX, minimumX, maximumX);
			rotationY = ClampAngle(rotationY, minimumY, maximumY);

			Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
			Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);

			transform.localRotation = originalRotation * xQuaternion * yQuaternion;
		}
		else if (axes == RotationAxes.MouseX)
		{
			rotationX += Input.GetAxis("Mouse X") * sensitivityX;
			rotationX = ClampAngle(rotationX, minimumX, maximumX);

			Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
			transform.localRotation = originalRotation * xQuaternion;
		}
		else
		{
			rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
			rotationY = ClampAngle(rotationY, minimumY, maximumY);

			Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
			transform.localRotation = originalRotation * yQuaternion;
		}
	}

	void Start()
	{
		// Make the rigid body not change 
		if (GetComponent<Rigidbody>())
			GetComponent<Rigidbody>().freezeRotation = true;
		originalRotation = transform.localRotation;
	}

	public static float ClampAngle(float angle, float min, float max)
	{
		if (angle < -360F)
			angle += 360F;
		if (angle > 360F)
			angle -= 360F;
		return Mathf.Clamp(angle, min, max);
	}
}