Désolé j'ai voulu faire court pour faire simple et éviter de raconter des détails pouvant être inutile mais je vais développer alors en expliquant le contexte, et je comprend que utiliser le terme "Evenement" était très mal choisi car il à dans mon cas aucun rapport avec les EventsUnity
Par contre je suis encore dans les balbutiements de mon apprentissage alors je gère peut être (sans doute) mal des choses surtout que je code un peu à la volé déjà pour avoir une idée de mon projet. Bref !
J'ai plusieurs cubes dans ma scène, possédant chacun un SOobject dans lequel il y a entre autre un gameObject monstre
Mon but final se fait en deux étapes :
1 - Lorsque je place mon curseur souris sur un cube, le monstre apparait au dessus du cube. Lorsque je retire ma souris il disparait.
2 - Si je clique sur un cube et que je valide avec un bouton de mon canvas, tout mes cubes disparaissent et je me retrouve avec le monstre du cube sélectionné qui suit mon curseur souris pour le placer dans ma scène en bougeant ma souris et validant sa position avec un clic.
L'étape 2 fonctionne sans soucis.
pour gérer l'affichage lorsque je survole un dé j'ai un morceau de code qui est le suivant :
Code : Tout sélectionner
if (hit.collider.tag == "Dice") //hit est mon raycast pour savoir ce que pointe la souris
{
hit.collider.GetComponent<Dice>().ColorDice(true); //Dice sont mes cubes
if (mouseOnDice == false) // pour éviter d'instancier un nombre infini d'objet lorsque ma souris reste sur le cube
{
mouseOnDice = true;
GameObject monster = Instantiate(hit.collider.gameObject.GetComponent<Dice>().GetMonster().model3D, new Vector3(hit.collider.transform.position.x, hit.collider.transform.position.y + 0.6f, hit.collider.transform.position.z) , Quaternion.identity) ;
monster.GetComponent<MonsterAction>().SetMonster(gameManager.GetComponent<GameManager>().GetPlayer(0), hit.collider.gameObject.GetComponent<Dice>().GetMonster(), true);
}
Pour gérer l'étape 1 j'ai ajouté un booléen dans le script de mon monstre pour savoir si il est temporaire (dans la scène lorsque on survole un dé) ou définitif (dans la scène lorsque l'on a choisi le cube et qu'on est à la phase ou l'on place le model3D)
Ici ma fonction SetMonster()
Code : Tout sélectionner
public void SetMonster(PlayerStat currentPlayer, SOMonster monster, bool tempo)
{
playerOwned = currentPlayer;
soMonster = monster;
tempoMonster = tempo; //tempo == true (monstre temporaire) // tempo== false (monstre définitif)
}
Lorsque ma souris ne se trouve plus sur un dé je Destroy tout les monstres ayant tempo==true comme ci dessous
Code : Tout sélectionner
GameObject[] monster;
monster = GameObject.FindGameObjectsWithTag("Monster");
foreach(GameObject var in monster)
{
if(var.GetComponent<MonsterAction>().IsTempo() == true)
{
Destroy(var.gameObject);
}
}
mouseOnDice = false;
Maintenant pour valider le cube choisi et placer le monstre correspondant voici la partie intéressante que j'ai fait :
Code : Tout sélectionner
if (monsterInDice == null)
{
monsterInDice = Instantiate(diceMonster.model3D, new Vector3(tilePos.x + afix.x + 0.5f, 0, tilePos.y + afix.y + 0.5f), Quaternion.identity);
monsterInDice.GetComponent<MonsterAction>().SetMonster(gameManager.GetComponent<GameManager>().GetPlayer(0), diceMonster, false);
}
monsterInDice est une variable GameObject déclaré en début de script que j'utilise pour pouvoir accéder au transform et ainsi déplacer avec le curseur souris mon monstre instancié .
Quand je valide mon monstre est bien positionné et ne bouge plus mais je doit rendre ma variable monsterInDice Null (dans le if qui se déclenche quand je clique sur ma souris pour valider la position de mon monstre) pour qu'on prochain tour je passe bien dans le if ci dessus et qu'il m'instancie bien un autre monstre.
A l'heure actuel mon systeme marche 1 fois mais pas deux car une fois validée il ne rentre pas dans mon if (vu que je n'ai pas réussi à mettre monsterInDice à Null et donc ne m'instancie pas mon monstre)
Je sais pas si c'est clair et si j'ai mis les bonnes info mais j'ai essayé de faire au mieux.
Merci