I’ve been trying to figure out how to fix this for hours and its driving me crazy already.
So, here how it works.
- I have this one panel
- Then I generated a bunch of buttons on it, add a grid layout group, content size fitter, Nothing special. Just making sure my buttons will fit in the panel.
- Then I add ‘Event Triggers’ to every single of this buttons. These are BeginDrag, OnPointEnter, and EndDrag. I’m not sure why I used OnPointerEnter instead of the regular Drag event but it also works.
- I put a simple Line Renderer that draws in the screen everytime the user starts dragging one of the tiles up to the ending tile. Some sort of a highlighting features because my game is a ‘Word Search’ game.
- All of this works magically good in Unity Editor.
But android build ended my happiness. The tiles in my grid can’t be clicked nor dragged. It just there doing nothing. But I can still click on the UI’s outside of the said panel like when tapping the ‘Menu’ button to return to menu. The panel isn’t the only one accepting touches and I can’t figure out why.
Here is the code of the functions I’m adding to the buttons:
btw, dragHighlight is the BeginDrag
public void dragHighlight(PointerEventData data, GameObject LetterContainer)
{
int r = Random.Range(0, randomFoundColors.Count);
//=====================LINE RENDERER===========================//
lr = Instantiate(lineRendererPrefab);
lr.AddComponent<LineRenderer>();
lr.GetComponent<LineRenderer>().enabled = true;
lr.GetComponent<LineRenderer>().positionCount = 2;
lr.GetComponent<LineRenderer>().material = new Material(Shader.Find("Mobile/Particles/Multiply"));
lr.GetComponent<LineRenderer>().SetColors(randomFoundColors[r], randomFoundColors[r]);
GameObject tile = LetterContainer;
Vector2 tilePos = tile.transform.position;
startPos = tilePos;
endPos = tilePos;
lr.GetComponent<LineRenderer>().SetPosition(1, endPos);
lr.GetComponent<LineRenderer>().SetPosition(0, startPos);
lr.GetComponent<LineRenderer>().useWorldSpace = true;
lr.GetComponent<LineRenderer>().widthCurve = ac;
lr.GetComponent<LineRenderer>().numCapVertices = 10;
lr.GetComponent<LineRenderer>().GetComponent<LineRenderer>().sortingOrder = 4;
//=====================END OF LINE RENDERER===========================//
string tag = LetterContainer.tag;
storeDiagonalID = tag;
tag = tag.Substring(0, tag.Length - 1);
Debug.Log("Tag is: " + tag);
if (dragging == false)
{
letterSwipeSound();
LetterContainer.GetComponent<Button>().interactable = false;
for (int x = 0; x < maxVerticalLine; x++)
{
for (int y = 0; y < maxHorizontalLine; y++)
{
if (gridSize[x, y] == LetterContainer)
{
firstLetter_x = x;
firstLetter_y = y;
break;
}
else
continue;
}
}
dragging = true;
}
}
public void pointerEnter(PointerEventData data, GameObject LetterContainer)
{
wordFormed = "";
if (dragging == true)
{
//==========================LINE RENDERER=======================================//
GameObject tile = LetterContainer;
Vector3 tilePos = tile.transform.position;
endPos = tilePos;
lr.GetComponent<LineRenderer>().SetPosition(1, endPos);
//=========================END OF LINE RENDERER================================//
letterSwipeSound();
for (int x = 0; x < maxVerticalLine; x++)
{
for (int y = 0; y < maxHorizontalLine; y++)
{
if (gridSize[x, y] == LetterContainer)
{
lastLetter_x = x;
lastLetter_y = y;
break;
}
else
continue;
}
}
if(firstLetter_x == lastLetter_x)
{
if(firstLetter_y < lastLetter_y)
{
for (int y = firstLetter_y; y <= lastLetter_y; y++)
{
string selectedLetter = gridSize[firstLetter_x, y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
}
}
else
for (int y = firstLetter_y; y >= lastLetter_y; y--)
{
string selectedLetter = gridSize[firstLetter_x, y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
}
}
if(firstLetter_y == lastLetter_y)
{
if(firstLetter_x < lastLetter_x)
{
for (int x = firstLetter_x; x <= lastLetter_x; x++)
{
string selectedLetter = gridSize[x, firstLetter_y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
}
}
else
{
for (int x = firstLetter_x; x >= lastLetter_x; x--)
{
string selectedLetter = gridSize[x, firstLetter_y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
}
}
}
if(firstLetter_x != lastLetter_x)
{
if(firstLetter_y != lastLetter_y)
{
if(firstLetter_x < lastLetter_x)
{
int y = firstLetter_y;
for (int x = firstLetter_x; x <= lastLetter_x; x++)
{
string selectedLetter = gridSize[x, y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
y++;
}
}
else
{
int y = firstLetter_y;
for (int x = firstLetter_x; x >= lastLetter_x; x--)
{
string selectedLetter = gridSize[x, y].GetComponentInChildren<TMPro.TMP_Text>().text;
wordFormed = wordFormed + selectedLetter;
y--;
}
}
}
}
Debug.Log("Formed word is: " + wordFormed);
}
}
public void dragEnd(PointerEventData data, GameObject LetterContainer)
{
int r = Random.Range(0, randomFoundColors.Count);
var objects = GameObject.FindGameObjectsWithTag("words");
var objectCount = objects.Length;
foreach (var obj in objects)
{
string reversed = ReverseString(wordFormed);
if (obj.GetComponent<TMPro.TMP_Text>().text.Trim().Equals(wordFormed) || obj.GetComponent<TMPro.TMP_Text>().text.Trim().Equals(reversed))
{
wordFoundSound();
unableToFindWord = false;
obj.GetComponent<TMPro.TMP_Text>().fontStyle = TMPro.FontStyles.Strikethrough;
wordFormed = "";
var letters = GameObject.FindGameObjectsWithTag("letters");
var lettersCount = objects.Length;
foreach (var let in letters)
{
if (let.GetComponent<Image>().color == green)
{
let.GetComponent<Image>().color = randomFoundColors[r];
let.tag = "letters(found)";
}
}
var letters_diagonal = GameObject.FindGameObjectsWithTag(storeDiagonalID);
var lettersCount_diagonal = objects.Length;
foreach (var let in letters_diagonal)
{
if (let.GetComponent<Image>().color == green)
{
let.GetComponent<Image>().color = randomFoundColors[r];
}
}
wordInStage--;
if (wordInStage == 0)
{
int medals = PlayerPrefs.GetInt("Medals") + 1;
PlayerPrefs.SetInt("Medals", medals);
PlayerPrefs.Save();
resultScreen.SetActive(true);
isGameComplete = true;
}
break;
}
else
unableToFindWord = true;
}
if(unableToFindWord == true)
{
Destroy(lr);
unableToFindWord = false;
}
foreach (GameObject _let in GameObject.FindObjectsOfType<GameObject>())
{
if (_let.name == "Letter(Clone)")
{
if (_let.GetComponent<Image>().color == green)
{
_let.GetComponent<Image>().color = Color.white;
}
}
}
wordFormed = "";
dragging = false;
diagonalDragging = false;
}
And I tried drawing a line renderer outside of the panel and it works so I think its not Line Renderer’s fault.
I also tried messing around with the Panel’s raycast, graphics raycasters, sorting order, etc thinking that something might be blocking the taps. Still no luck.
Any help?