I have about 2400 objects that are Active in the scene with Textmeshpro Geometry
and have code running in the update method, this update method is throughout very expensive in terms of FPS and i want this code to be optimized can anyone please help me with this code.
void Update ()
{
GetPlayerAndCamera();
int layerMask = 1 << 12;
// This would cast rays only against colliders in layer 8.
// But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask.
RaycastHit hit;
// Does the ray intersect any objects excluding the player layer
if (Physics.Raycast(Camera.main.transform.position, Vector3.down, out hit, Mathf.Infinity, layerMask))
{
// Debug.Log(hit.distance);
if (hit.distance > 250 )
{
foreach (var item in closeTransforms)
{
if (item != null)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, Vector3.zero, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
item.gameObject.SetActive(false);
}
}
foreach (var item in nearTransforms)
{
if (item != null)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, Vector3.zero, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
item.gameObject.SetActive(false);
}
}
foreach (var item in farTransforms)
{
if (item != null)
{
item.gameObject.SetActive(true);
item.transform.LookAt(item.transform.position + player.transform.rotation * Vector3.forward * 1,
player.transform.rotation * Vector3.up + offset);
var dist = Vector3.Distance(Camera.main.transform.position, item.transform.position);
if (dist > 250 && dist < 1000)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, scalefor10, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
else if (dist > 1000 && dist < 1500)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, scalefor10, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
else if (dist > 1500 && dist < 2000)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, scalefor10, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
else if (dist > 2000)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, scalefor10, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
}
}
}
else
{
foreach (var item in closeTransforms)
{
if (item != null)
{
item.gameObject.SetActive(true);
var dist = Vector3.Distance(Camera.main.transform.position, item.transform.position);
item.transform.LookAt(item.transform.position + player.transform.rotation * Vector3.forward * 1,
player.transform.rotation * Vector3.up + offset);
if (dist > 0 /*&& dist < 2000*/)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, scalefor2, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
//else
//{
// item.gameObject.SetActive(false);
//}
}
}
foreach (var item in farTransforms)
{
if (item != null)
{
item.gameObject.SetActive(true);
var dist = Vector3.Distance(Camera.main.transform.position, item.transform.position);
item.transform.LookAt(item.transform.position + player.transform.rotation * Vector3.forward * 1,
player.transform.rotation * Vector3.up + offset);
if (dist > 0)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale, Vector3.zero, 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
}
}
foreach (var item in nearTransforms)
{
if (item != null)
{
item.gameObject.SetActive(true);
var dist = Vector3.Distance(Camera.main.transform.position, item.transform.position);
item.transform.LookAt(item.transform.position + player.transform.rotation * Vector3.forward * 1,
player.transform.rotation * Vector3.up + offset);
if (dist > 0/* && dist < 2000*/)
{
Vector3 lerpval = Vector3.Lerp(item.transform.localScale,scalefor2 , 1 * Time.deltaTime);
item.transform.localScale = lerpval;
}
//else
//{
// item.gameObject.SetActive(false);
//}
}
}
}
}
//transform.LookAt(transform.position + player.transform.rotation * Vector3.forward * 1,
// player.transform.rotation * Vector3.up + offset); ////USE THIS IN UPDATE ONLY
}