Sunday, 9 October 2016

carCamera

using UnityEngine;
using System.Collections;

public class carCamera : MonoBehaviour
{
bool canMove;
public Transform target;
public float height = 3f;
public float positionDamping = 3f;
public float velocityDamping = 3;
public float distance = 50f;
public LayerMask ignoreLayers = -1;

private RaycastHit hit = new RaycastHit();

private Vector3 prevVelocity = Vector3.zero;
private LayerMask raycastLayers = -1;

private Vector3 currentVelocity = Vector3.zero;

void Start(){

raycastLayers = ~ignoreLayers;
}

void FixedUpdate()
{

currentVelocity = Vector3.Lerp(prevVelocity, target.root.GetComponent<Rigidbody>().velocity, velocityDamping * Time.deltaTime);
currentVelocity.y = 0;
prevVelocity = currentVelocity;
}

void LateUpdate()
{
float speedFactor = Mathf.Clamp01(target.root.GetComponent<Rigidbody>().velocity.magnitude / 170.0f);
GetComponent<Camera>().fieldOfView = Mathf.Lerp(55, 72, speedFactor);
float currentDistance = Mathf.Lerp(10.0f, 10.0f, speedFactor);

currentVelocity = currentVelocity.normalized;

Vector3 newTargetPosition = target.position + Vector3.up * height;
Vector3 newPosition = newTargetPosition - (currentVelocity * currentDistance);
newPosition.y = newTargetPosition.y;

Vector3 targetDirection = newPosition - newTargetPosition;
if(Physics.Raycast(newTargetPosition, targetDirection, out hit, currentDistance, raycastLayers))
newPosition = hit.point + hit.normal;


Vector3 up = transform.TransformDirection(Vector3.up);
// RaycastHit hit;
Debug.DrawRay(transform.position, -up * 1, Color.green);

if(Physics.Raycast(transform.position, -up, out hit, 1f))
{
if(hit.collider.gameObject.tag == "Maps")
{
canMove = false;
}
}

//Add something like 'bool canMove' to your script and add this if statement before you assign your new position
if (canMove)
transform.position = newPosition;


transform.position = new Vector3(transform.position.x, 7f, transform.position.z);   //added c codr that worked
transform.position = newPosition;
transform.LookAt (newTargetPosition);

}

}

Car Movement

using UnityEngine;
using UnityEngine.UI;
using CnControls;
using System.Collections;

public class car : MonoBehaviour {

public Transform centerOfMass;
public Transform steerWheel;

public float steerAngle;
public Camera[] cam;

public GameObject Steerwheel;
public GameObject[] backLights;
public GameObject hands;
public Color color;

public float Cdrag=0.2f;
public float Fdrag;

public int maxTorque ;
public int maxTorqueValue;
public int maxBrakeTorque ;
public float MaxWheelRotateAngle= 14;
public float lowestSpeedAtSteer = 45;
public float lowSpeedSteerAngle = 32;
public float highSpeedSteerAngle = 1;
public float torque;
public float steerWheelAngle;
public float steerWheelRotateFactor=1;
public bool braked;



public WheelCollider WheelFrontRight;
public WheelCollider WheelFrontLeft;
public WheelCollider WheelRearRight;
public WheelCollider WheelRearLeft;
public Text MissionScoreText;
public Text levelSpeedtext;
public static int tempScore1;

public GameObject wheelFR;
public GameObject wheelFL;
public GameObject wheelRR;
public GameObject wheelRL;
public GameObject Gamewin;
public GameObject Pausemenu;
public GameObject Sensormode;
public GameObject Buttonmode;

public float speed;
float oldAngle=0;
float newAngle=0;
float timer=0;
float angleChangeTimer=0;
float steerwheelOffset=0;
int i;
Quaternion rot;
int gMode;
void Awake()
{  //PlayerPrefs.DeleteAll ();

scoresaved = false;
adObj.SetActive (false);

if (PlayerPrefs.GetInt ("Brake") != 0) {
maxBrakeTorque = PlayerPrefs.GetInt ("Brake") + 1;
} else {
maxBrakeTorque = 1;
}


Debug.Log (maxBrakeTorque);
if (InventryManager.Speed2 == 1) {
speed = PlayerPrefs.GetInt ("CarSpeed");
topSpeed = PlayerPrefs.GetInt ("TopSpeed");
} else if (InventryManager.Speed2 == 2) {
speed = PlayerPrefs.GetInt ("CarSpeed");
topSpeed = PlayerPrefs.GetInt ("TopSpeed");
} else if (InventryManager.Speed2 == 3) {
speed = PlayerPrefs.GetInt ("CarSpeed");
topSpeed = PlayerPrefs.GetInt ("TopSpeed");
} else if (InventryManager.Speed2 == 4) {
speed = PlayerPrefs.GetInt ("CarSpeed");
topSpeed = PlayerPrefs.GetInt ("TopSpeed");
} else if (InventryManager.Speed2 == 5) {
speed = PlayerPrefs.GetInt ("CarSpeed");
topSpeed = PlayerPrefs.GetInt ("TopSpeed");
} else {
topSpeed = 60;
}

gMode = PlayerPrefs.GetInt ("CONTROL");
if (gMode == 0) {
Sensormode.SetActive (true);
} else {
Sensormode.SetActive (false);
}
}

void Start () {




maxTorque = maxTorqueValue;

GetComponent<Rigidbody>().centerOfMass = centerOfMass.localPosition;
// color=backLights[0].GetComponent<Renderer>().material.GetColor("_TintColor");
rot=steerWheel.transform.rotation;

hands.SetActive(false);
}


void Update () {

//CameraSwitch();
control();

//steerWheel.transform.localRotation=rot * Quaternion.Euler(new Vector3(0,steerAngle,0));
}

void FixedUpdate () {





HandBrake();

Fdrag=Cdrag*Mathf.Pow(speed,2);

WheelOffset(wheelFL, WheelFrontLeft);
WheelOffset(wheelFR, WheelFrontRight);
WheelOffset(wheelRL, WheelRearLeft);
WheelOffset(wheelRR, WheelRearRight);

//for(int i=0;i<backLights.Length;i++)
// backLights[i].GetComponent<Renderer>().material.SetColor("_TintColor",color);

}

public int topSpeed;
void control (){


torque = maxTorque * (CnInputManager.GetAxis ("Vertical"));

if (CnInputManager.GetAxis ("Vertical") < 0 && speed > 20)
torque = 0;
torque -= Fdrag;

if ((int)speed < topSpeed) {

WheelRearRight.motorTorque = torque;
WheelRearLeft.motorTorque = torque;
WheelFrontRight.motorTorque = torque;
WheelFrontLeft.motorTorque = torque;
} else {
WheelRearRight.motorTorque = 0;
WheelRearLeft.motorTorque = 0;
WheelFrontRight.motorTorque = 0;
WheelFrontLeft.motorTorque = 0;
}
SteerWheelControl ();

}

void LateUpdate()
{

speed=GetComponent<Rigidbody>().velocity.magnitude*3.6f;
if((int)speed < topSpeed - 1 ){
levelSpeedtext.text = "Speed : " +(int)speed;

}else{
levelSpeedtext.text = "Speed : " + topSpeed;
}

if (Input.GetKeyDown(KeyCode.Escape)) {

Time.timeScale = 0;
Pausemenu.SetActive (true);
Buttonmode.SetActive(false);
//Sensormode.SetActive(false);

adObj.SetActive (true);

}

}

void SteerWheelControl(){
if(gMode == 0)
{
//Sensormode.SetActive (true);
if(angleChangeTimer<0){
steerwheelOffset=Random.Range(-0.4f,0.4f)*speed;
angleChangeTimer+=Random.Range(0.2f,1);
}

float speedFactor = (speed/3.6f)/lowestSpeedAtSteer;
float currentSteerAngle = Mathf.Lerp(lowSpeedSteerAngle,highSpeedSteerAngle,speedFactor);
//currentSteerAngle = currentSteerAngle * (float)Input.acceleration.x;

currentSteerAngle *= CnInputManager.GetAxis("Horizontal");

WheelFrontRight.steerAngle = currentSteerAngle;
WheelFrontLeft.steerAngle = currentSteerAngle;

timer+=Time.deltaTime*steerWheelRotateFactor;

newAngle=Mathf.Lerp(oldAngle,(currentSteerAngle*10)+steerwheelOffset, timer);

//steerWheelAngle=currentSteerAngle*10;
steerWheelAngle=newAngle;

steerWheel.transform.localRotation=rot * Quaternion.Euler(new Vector3(0,steerWheelAngle,0));


oldAngle=steerWheelAngle;

if(oldAngle==newAngle)
timer=0;

angleChangeTimer-=Time.deltaTime;
}
else {
//Buttonmode.SetActive (false);
if(angleChangeTimer<0){
steerwheelOffset=Random.Range(-0.4f,0.4f)*speed;
angleChangeTimer+=Random.Range(0.2f,1);
}

float speedFactor = (speed/3.6f)/lowestSpeedAtSteer;
float currentSteerAngle = Mathf.Lerp(lowSpeedSteerAngle,highSpeedSteerAngle,speedFactor);
currentSteerAngle = currentSteerAngle * Input.acceleration.x;

//currentSteerAngle *= CnInputManager.GetAxis("Horizontal");

WheelFrontRight.steerAngle = currentSteerAngle;
WheelFrontLeft.steerAngle = currentSteerAngle;

timer+=Time.deltaTime*steerWheelRotateFactor;

newAngle=Mathf.Lerp(oldAngle,(currentSteerAngle*10)+steerwheelOffset, timer);

//steerWheelAngle=currentSteerAngle*10;
steerWheelAngle=newAngle;
steerWheel.transform.localRotation=rot * Quaternion.Euler(new Vector3(0,steerWheelAngle,0));


oldAngle=steerWheelAngle;

if(oldAngle==newAngle)
timer=0;

angleChangeTimer-=Time.deltaTime;
}
}


void WheelOffset (GameObject model, WheelCollider collider)
{
Quaternion quart;
Vector3 pos;
collider.GetWorldPose(out pos,out quart);
model.transform.position=pos;
model.transform.rotation=quart;
}

public void HandBrake()
{
if (CnInputManager.GetButton ("Jump"))
{
braked = true;
}
else
{
braked = false;
}
if (braked) {
WheelRearLeft.brakeTorque = maxTorqueValue * maxBrakeTorque;
WheelRearRight.brakeTorque = maxTorqueValue * maxBrakeTorque;


WheelFrontLeft.brakeTorque = maxTorqueValue * maxBrakeTorque;
WheelFrontRight.brakeTorque = maxTorqueValue * maxBrakeTorque;
WheelRearRight.motorTorque = 0;
WheelRearLeft.motorTorque = 0;
WheelFrontRight.motorTorque = 0;
WheelFrontLeft.motorTorque = 0;

//gameObject.GetComponent<Rigidbody>().velocity =   - gameObject.GetComponent<Rigidbody>().velocity * Time.smoothDeltaTime;
// gameObject.GetComponent<Rigidbody>().angularVelocity = -Vector3.zero * Time.deltaTime;

color.a = 1f;
} else {
WheelRearLeft.brakeTorque = 0;
WheelRearRight.brakeTorque = 0;
WheelFrontRight.brakeTorque = 0;
WheelFrontLeft.brakeTorque = 0;
color.a = 0.5f;
}
}

bool scoresaved;
public int levelLock;

public GameObject adObj;

void OnTriggerEnter(Collider other)
{


if(scoresaved==false)
{
scoresaved = true;

adObj.SetActive (true);

Gamewin.SetActive (true);
Buttonmode.SetActive (false);

if (other.gameObject.tag == "Goal") {


tempScore1 = PlayerPrefs.GetInt ("Coin");
int tempScore = BoxCount.temp18 * 50;

if (BoxCount.temp18 == BoxCount.temp19) {
int tempScore6 = tempScore + 50;
PlayerPrefs.SetInt ("Coin", tempScore1 + tempScore6);
MissionScoreText.text = "Coin : " + tempScore6;
} else {
PlayerPrefs.SetInt ("Coin", tempScore1 + tempScore);
MissionScoreText.text = "Coin : " + tempScore;
}
//level Lock
if (PlayerPrefs.GetInt ("LevelLock") < levelLock) {
PlayerPrefs.SetInt ("LevelLock", levelLock);
}


Time.timeScale = 0;

}

}

}











//======================================Level Buttons Code ===================================================
public void Retry()
{

Application.LoadLevel (Application.loadedLevel);

}

public string NextLevelName;
public void Nextlevel()
{

Application.LoadLevel (NextLevelName);
}

public void MainMenu()
{

Application.LoadLevel ("Main menu");
}
public void Pause()
{
Time.timeScale = 0;
Pausemenu.SetActive (true);
Buttonmode.SetActive(false);
//Sensormode.SetActive(false);

adObj.SetActive (true);
}
public void Resume()
{
Time.timeScale = 1;
Pausemenu.SetActive (false);
Buttonmode.SetActive(true);

}

public void CameraSwitch(){
//if(Input.GetKeyDown(KeyCode.C)){
cam[i].enabled=false;
cam[i].GetComponent<AudioListener>().enabled=false;
i++;
if(i>=cam.Length)
i=0;
cam[i].enabled=true;
cam[i].GetComponent<AudioListener>().enabled=true;
hands.SetActive(i==1);
}

public void Repswan(){
transform.rotation = Quaternion.Euler (new Vector3 (0, 0, 0));
transform.position = new Vector3(gameObject.transform.position.x,gameObject.transform.position.y+5,gameObject.transform.position.z);

gameObject.GetComponent<Rigidbody>().velocity = Vector3.zero;
gameObject.GetComponent<Rigidbody>().angularVelocity = Vector3.zero;

}


}

Timer Clock

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Timer : MonoBehaviour {

public float startTime;
public float staTime;
public static double timeRemaining;
public Text MissionTimeText;
public GameObject Gameover;
public GameObject Playing;


void Start()
{
Time.timeScale = 1;
staTime = startTime;
}

void LateUpdate()
{
Countdown();
staTime -= Time.deltaTime;
}

void Countdown(){

timeRemaining = staTime;
ShowTime();

if (timeRemaining < 0 || BoxCount.temp18 == 0) {
timeRemaining = 0;
Gameover.SetActive (true);
Playing.SetActive (false);
Start();
Time.timeScale = 0;

}
}

void ShowTime(){
int hour;
int minutes;
int seconds;
string timeString;
hour = (int)timeRemaining / 3600;
minutes = (int)timeRemaining/60;

seconds = (int)timeRemaining%60;
timeString = hour.ToString() + ":" + minutes.ToString() + ":" + seconds.ToString();
MissionTimeText.text = "Time : " + timeString;
}



}

TiltWindow

using UnityEngine;

public class TiltWindow : MonoBehaviour
{
public Vector2 range = new Vector2(5f, 3f);

Transform mTrans;
Quaternion mStart;
Vector2 mRot = Vector2.zero;

void Start ()
{
mTrans = transform;
mStart = mTrans.localRotation;
}

void Update ()
{
Vector3 pos = Input.mousePosition;

float halfWidth = Screen.width * 0.5f;
float halfHeight = Screen.height * 0.5f;
float x = Mathf.Clamp((pos.x - halfWidth) / halfWidth, -1f, 1f);
float y = Mathf.Clamp((pos.y - halfHeight) / halfHeight, -1f, 1f);
mRot = Vector2.Lerp(mRot, new Vector2(x, y), Time.deltaTime * 5f);

mTrans.localRotation = mStart * Quaternion.Euler(-mRot.y * range.y, mRot.x * range.x, 0f);
}
}

Smooth Camera in 3D

using UnityEngine;
using System.Collections;

public class SmoothFollow2 : MonoBehaviour {



public Transform car;
public float distance               = 8.0f;
public float rayCastdistance               = 1.0f;
public float height                 = 2.5f;
public float rotationDampening      = 3.0f;
public float heightDampening        = 2.0f;
public float zoomRatio              = 20.0f;
public float defaultFOV             = 60.0f;
private Vector3 rotationVector;

private LayerMask raycastLayers = -1;
public LayerMask ignoreLayers = -1;
private RaycastHit hit = new RaycastHit();
bool canMove;
// Use this for initialization
void Start ()
{
raycastLayers = ~ignoreLayers;
}
// Update is called once per frame
void LateUpdate ()
{




float wantedAngle = rotationVector.y;
float wantedHeight = car.position.y + height;
float myAngle = transform.eulerAngles.y;
float myHeight = transform.position.y;
myAngle = Mathf.LerpAngle(myAngle, wantedAngle, rotationDampening * Time.deltaTime);
myHeight = Mathf.Lerp(myHeight, wantedHeight, heightDampening * Time.deltaTime);


Quaternion currentRotation = Quaternion.Euler(0, myAngle, myAngle);

/* if (Physics.Raycast (transform.position, transform.eulerAngles, out hit, 2f, raycastLayers)) {

transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x-3, myHeight+4, transform.position.z);
transform.LookAt(car);

} else {
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward*distance;
gameObject.transform.position = new Vector3(transform.position.x, myHeight, transform.position.z);
transform.LookAt(car);
}*/
//car.position = hit.point + hit.normal;



Vector3 up = transform.TransformDirection(Vector3.up);
// RaycastHit hit;
Debug.DrawRay(transform.position, -up * 1, Color.green);

/*if (Physics.Raycast (transform.position, -up, out hit, rayCastdistance)) {
Debug.Log ("Hit");
if (hit.collider.gameObject.tag == "Maps") {
Debug.Log ("ma");
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x,  myHeight+20*Time.smoothDeltaTime, transform.position.z);
transform.LookAt (car);
}
} else {*/
transform.position = car.position;
//transform.position = car.position;
transform.position -= currentRotation * Vector3.forward * distance;
gameObject.transform.position = new Vector3 (transform.position.x, myHeight, transform.position.z);
transform.LookAt (car);
// }


}  
void FixedUpdate()
{
Vector3 localVelocity = car.InverseTransformDirection(car.GetComponent<Rigidbody>().velocity);
if(localVelocity.z < -1.0f)
{
rotationVector.y = car.eulerAngles.y + 180;
}
else
{
rotationVector.y = car.eulerAngles.y;
}
float acceleration = car.GetComponent<Rigidbody>().velocity.magnitude;
GetComponent<Camera>().fieldOfView = defaultFOV + acceleration*zoomRatio*Time.deltaTime;
}

}

Bumper in Car

using UnityEngine;
using CnControls;
using System.Collections;

public class skidMarks : MonoBehaviour {
public AudioClip skidSound;
AudioSource skidAudio = null;

public AudioClip bumpSound;
AudioSource bumpAudio = null;
public float bumpMinForce = 4000;
public float bumpMaxForse = 18000;
float bumpMinVolume = 0.2f;
float bumpMaxVolume = 0.6f;

public car car1;

public float minToSlip=150;
public bool rear;
public float skidAt=5.5f;
public float markWidth=0.2f;
public Material skidMaterial;
public GameObject skidSmoke;
public float currentfrictionValue;
int skidding;
Vector3[] lastPos=new Vector3[2];
WheelHit hit;

float force;
float stress;

void Start () {
skidAudio = gameObject.AddComponent<AudioSource>();
skidAudio.loop = true;
skidAudio.clip = skidSound;
skidAudio.volume = 0.25f;
skidAudio.spatialBlend=0.8f;

bumpAudio = gameObject.AddComponent<AudioSource>();
bumpAudio.loop = false;
bumpAudio.clip = bumpSound;
bumpAudio.spatialBlend=0.8f;

}


void FixedUpdate () {
transform.GetComponent<WheelCollider>().GetGroundHit(out hit);
currentfrictionValue=Mathf.Abs(hit.sidewaysSlip);

stress=force-hit.force;
force=hit.force;

BumpPlay (stress);

float rpm = transform.GetComponent<WheelCollider>().rpm;

if((skidAt<= currentfrictionValue) || (rpm<minToSlip && Input.GetAxis("Vertical")>0&& rear) && hit.collider ){
SkidMesh();
if(!skidAudio.isPlaying)
skidAudio.Play();
}
else{
skidding=0;
skidSmoke.GetComponent<ParticleSystem>().enableEmission=false;
skidAudio.Stop();
}
if(transform.GetComponentInParent<Rigidbody>().velocity.magnitude>5){
skidSmoke.GetComponent<ParticleSystem>().enableEmission=true;
}
else{
skidSmoke.GetComponent<ParticleSystem>().enableEmission=false;
}
}

void SkidMesh(){

GameObject mark=new GameObject("Mark");
MeshFilter filter = mark.AddComponent<MeshFilter>();
mark.AddComponent<MeshRenderer>();
Mesh markMesh=new Mesh();
Vector3[] vertices=new Vector3[4];
int[] triangles=new int[6];
if(skidding==0){

vertices[0]=hit.point + Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(markWidth,0.01f,0);
vertices[0]=hit.point + Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(-markWidth,0.01f,0);
vertices[2]=hit.point + Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(-markWidth,0.01f,0);
vertices[3]=hit.point +Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(markWidth,0.01f,0);
lastPos[0]=vertices[2];
lastPos[1]=vertices[3];
skidding=1;
}
else{
vertices[1]=lastPos[0];
vertices[0]=lastPos[1];
vertices[2]=hit.point + Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(-markWidth,0.01f,0);
vertices[3]=hit.point +Quaternion.Euler(transform.eulerAngles.x,transform.eulerAngles.y,transform.eulerAngles.z)*new Vector3(markWidth,0.01f,0);
lastPos[0]=vertices[2];
lastPos[1]=vertices[3];
}

triangles[0]=0;
triangles[1]=1;
triangles[2]=2;
triangles[3]=2;
triangles[4]=3;
triangles[5]=0;
markMesh.vertices=vertices;
markMesh.triangles=triangles;
markMesh.RecalculateNormals();
Vector2[] uvm=new Vector2[4];
uvm[0]=new Vector2(1,0);
uvm[1]=new Vector2(0,0);
uvm[2]=new Vector2(0,1);
uvm[3]=new Vector2(1,1);
markMesh.uv=uvm;
filter.mesh=markMesh;
mark.GetComponent<Renderer>().material=skidMaterial;
mark.AddComponent<destroyAfter>();
}

void BumpPlay(float SuspensionStress){
float bumpRatio=Mathf.InverseLerp(bumpMinForce,bumpMaxForse,SuspensionStress);
if(bumpRatio>0){
bumpAudio.volume=Mathf.Lerp (bumpMinVolume,bumpMaxVolume,bumpRatio);
bumpAudio.pitch=bumpRatio;
bumpAudio.PlayOneShot(bumpSound);
}
}
}

ScrollDetailTexture

using UnityEngine;
using UnityEngine.UI;


[RequireComponent(typeof(Image))]
public class ScrollDetailTexture : MonoBehaviour
{
public bool uniqueMaterial = false;
public Vector2 scrollPerSecond = Vector2.zero;

Matrix4x4 m_Matrix;
Material mCopy;
Material mOriginal;
Image mSprite;
Material m_Mat;

void OnEnable ()
{
mSprite = GetComponent<Image>();
mOriginal = mSprite.material;

if (uniqueMaterial && mSprite.material != null)
{
mCopy = new Material(mOriginal);
mCopy.name = "Copy of " + mOriginal.name;
mCopy.hideFlags = HideFlags.DontSave;
mSprite.material = mCopy;
}
}

void OnDisable ()
{
if (mCopy != null)
{
mSprite.material = mOriginal;
if (Application.isEditor)
UnityEngine.Object.DestroyImmediate(mCopy);
else
UnityEngine.Object.Destroy(mCopy);
mCopy = null;
}
mOriginal = null;
}

void Update ()
{
Material mat = (mCopy != null) ? mCopy : mOriginal;

if (mat != null)
{
Texture tex = mat.GetTexture("_DetailTex");

if (tex != null)
{
mat.SetTextureOffset("_DetailTex", scrollPerSecond * Time.time);

// TODO: It would be better to add support for MaterialBlocks on UIRenderer,
// because currently only one Update() function's matrix can be active at a time.
// With material block properties, the batching would be correctly broken up instead,
// and would work with multiple widgets using this detail shader.
}
}
}
}