using System; using UnityEngine; namespace ABI.CCK.Components { public class CVRMaterialUpdater : MonoBehaviour { public enum UpdateType { Update = 0, FixedUpdate = 1, } public UpdateType updateType = UpdateType.Update; private Renderer renderer; private Vector3 lastPos; private Vector3 velocity; private Vector3 lastRot; private Vector3 angularVelocity; private void Start() { renderer = GetComponent(); } private void Update() { if (updateType == UpdateType.FixedUpdate || renderer == null) return; ProcessUpdate(); } private void FixedUpdate() { if (updateType == UpdateType.Update || renderer == null) return; ProcessUpdate(); } private void ProcessUpdate() { velocity = (lastPos - transform.position) / (updateType == UpdateType.Update?Time.deltaTime:Time.fixedDeltaTime); angularVelocity = transform.rotation.eulerAngles - lastRot; renderer.material.SetVector("_CVR_Velocity", velocity); renderer.material.SetVector("_CVR_Angular_Velocity", angularVelocity); lastPos = transform.position; lastRot = transform.rotation.eulerAngles; } } }