- Home /
Unable to click/touch event on sprite
Hi, i am new in unity development and i am developing a card game on unity. My question is how to add click event on each card. I have added 52 cards dynamically from Prefabs, index like 0...51. How to determine which card is clicked. OnMouseDown() is working but how to determine for which card its fired.
void AddCard(Vector3 position, int cardIndex, int positionalIndex) {
if (fetchedCards.ContainsKey (cardIndex))
{
if (!faceUp)
{
CardModel model = fetchedCards [cardIndex].Card.GetComponent<CardModel> ();
model.ToggleFace (fetchedCards [cardIndex].IsFaceUp);
}
return;
}
GameObject cardCopy = (GameObject)Instantiate (cardPrefab);
//Debug.Log ("Prefab Name " + cardCopy.GetComponent<Button>().name);
//cardCopy.transform.SetParent(ParentPanel, false);
//cardCopy.transform.localScale = new Vector3(1, 1, 1);
//Button tempButton = cardCopy.GetComponent<Button>();
//UnityEngine.Events.UnityAction action1 = () => { this.btnClicked("testarg"); };
//tempButton.onClick.AddListener(action1);
//tempButton.onClick.AddListener((delegate { OnClickedButton(cardIndex);}));
//tempButton.onClick.AddListener(() => OnClickedButton(cardIndex));
//tempButton.GetComponentInChildren<Text>().text = "Button Numero " + cardIndex.ToString ();
/*tempButton.onClick.AddListener(() =>
{
Debug.Log("IT WORKS");
// Just handle the button clikc inside here
});*/
cardCopy.transform.position = position;
CardModel cardModel = cardCopy.GetComponent<CardModel> ();
cardModel.cardIndex = cardIndex;
cardModel.ToggleFace (faceUp);
SpriteRenderer spriteRenderer = cardCopy.GetComponent<SpriteRenderer> ();
if (reverseLayerOrder)
{
spriteRenderer.sortingOrder = 51 - positionalIndex;
}
else
{
spriteRenderer.sortingOrder = positionalIndex;
}
fetchedCards.Add (cardIndex, new CardView(cardCopy));
//Debug.Log("Hand Value = " + deck.HandValue ());
}
Comment
Answer by KonfuPanda · Apr 13, 2017 at 01:15 PM
I assume that your cards have a Button component.
// card is instantiated...
CardModel cardModel = cardCopy.getComponent<CardModel>();
// cardmodel is initialized...
cardCopy.getComponent<Button>().onclick.AddListener(() => DoSomethingWithCard(cardModel));
//.....
void DoSomethingWithCard(CardModel cardModel)
{
Debug.Log(cardModel.index);
// Your code here...
}
Your answer
Follow this Question
Related Questions
Issues after updating to Unity 5 1 Answer
Can't acces a variable from another script 1 Answer
convert unity versions, 0 Answers
How do you make a rectangle light 0 Answers
why Lagging from tilemap 0 Answers