Question by
computron59 · Feb 24, 2018 at 04:21 PM ·
androidtouchoptimizationtouchscreen
How to optimize touch input script
Hi I wrote this to get the OLDEST touch on the screen area , ie only track the FIRST landed touch on the area. It seems to cause considerable lag on my Alcatel (pish phone I know). SO, I am looking for a way to optimize/streamline/do-it-better it as it has to happen twice, once for each player.
Below is the simplified update loop that needs optimisation. Here....
private void Update()
{ latestTime = 1000000;
// dictionary of active touches
for (int i = 0; i < Input.touchCount; i++)
{
if (Input.GetTouch(i).position.x < (Screen.width / 2) && Input.GetTouch(i).phase == TouchPhase.Began ) {
float currenttime = Time.time;
if (!Ltouches.ContainsValue(currenttime) && Input.GetTouch(i).position.x < Screen.width / 2 ) {
Ltouches.Add(Input.GetTouch(i).fingerId, currenttime);
}
}
if ((Input.GetTouch(i).position.x > Screen.width / 2) || Input.GetTouch(i).phase == TouchPhase.Ended)
{
Ltouches.Remove(Input.GetTouch(i).fingerId);
}
}
//gets the oldest touch in dictionary. need only be done when dictionary size changes..... unless finger replaced in one frame?
float selectedkey=0;
if ( Ltouches.Count >= 1 /*&& LtouchCount != Ltouches.Count*/)
{
//LtouchCount = Ltouches.Count;
foreach (KeyValuePair<int, float> i in Ltouches)
{ // for active touches
// if time is earliest yet
if (i.Value < latestTime)
{
latestTime = i.Value;
selectedkey = i.Key;
}
}
// selects relevant touch
for (int j = 0; j < Input.touchCount; j++)
{
if (Input.GetTouch(j).fingerId == selectedkey)
{
selectedTouch = Input.GetTouch(j);
}
}
}
if (Input.touchCount >= 1)
{
LPlayerY = C.ScreenToWorldPoint(selectedTouch.position).y;
}
}
Comment