Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

68 lines
1.8 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotationController : MonoBehaviour
{
#region Read-Only Fields
public float RotationPeriod => m_RotationPeriod;
public Vector3 Position => transform.position;
public Vector3 RotationAxis => m_RotationAxis;
public float CorrelusStrength => m_correlusStrength;
public float EnvironmentRotationPeriod => m_RotationPeriod * m_SkyboxRotationMultiplier;
#endregion Read-Only Fields
[SerializeField]
private float m_RotationPeriod;
[SerializeField]
private Vector3 m_RotationAxis = Vector3.forward;
[SerializeField]
private float m_correlusStrength = 100;
[SerializeField]
private Material m_Skybox;
[SerializeField]
private float m_SkyboxRotationMultiplier = 1;
public Vector3 getDownDirection(Vector3 objectPosition, bool normalized = true)
{
if (normalized)
return Vector3.ProjectOnPlane((objectPosition - transform.position), m_RotationAxis).normalized;
else
return Vector3.ProjectOnPlane((objectPosition - transform.position), m_RotationAxis);
}
public Vector3 getPerpendicularDirection(Vector3 objectPosition)
{
return Vector3.Cross(RotationAxis, getDownDirection(objectPosition)).normalized;
}
public Quaternion getUpRotation(Vector3 objectPosition)
{
return Quaternion.FromToRotation(Vector3.up, -getDownDirection(objectPosition));
}
private void Start()
{
if (m_Skybox == null)
m_Skybox = RenderSettings.skybox;
}
private void Update()
{
if (m_Skybox != null)
{
m_Skybox.SetVector("_RotationAxis", m_RotationAxis);
m_Skybox.SetFloat("_Rotation", (Time.time * EnvironmentRotationPeriod) % 360);
}
}
}