[RESOLU]Débutant cherche solution architecture script.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
wudang64
Messages : 5
Inscription : 05 Mars 2021 23:06

[RESOLU]Débutant cherche solution architecture script.

Message par wudang64 » 06 Mars 2021 20:26

Bonjour, je suis débutant, je suis plein de tuto pour apprendre, mais la je bloque depuis 2 jours.

J’instancie un player gameObject dans le script creationMap à partir d'un prefabs.

Code : Tout sélectionner

GameObject newPlayer = player;
Instantiate(newPlayer);
newPlayer.transform.position = new Vector3(1,1,0);
Dans le Script player je peux modifier la position du player avec un Input.

Maintenant je souhaiterai modifier la position de newPlayer avec un boutton.
C'est la ou je bloque je n'arrive pas a récupérer le gameobject dans le script du button pour modifier ça position.
J'arrive a récupérer ça position, la modifier mais je n'arrive pas a l'actualiser dans le Script newPlayer.

Je suis vraiment un noob je manque surement de base technique, si vous avez des pistes de tuto a regarder pour comprendre merci.
Dernière édition par wudang64 le 07 Mars 2021 14:36, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: Débutant cherche solution architecture script.

Message par Max » 06 Mars 2021 21:21

Bonsoir,
wudang64 a écrit :
06 Mars 2021 20:26
Maintenant je souhaiterai modifier la position de newPlayer avec un boutton.
C'est la ou je bloque je n'arrive pas a récupérer le gameobject dans le script du button pour modifier ça position.
En général on affecte le tag Player aux Players. Dans un script, tu peux donc par exemple récupérer le GameObject Player en faisant un GameObject.FindWithTag("Player")
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

wudang64
Messages : 5
Inscription : 05 Mars 2021 23:06

Re: Débutant cherche solution architecture script.

Message par wudang64 » 07 Mars 2021 00:31

Voici le script de mon button avec la fonction on click.

Code : Tout sélectionner

public class ButtonSc : MonoBehaviour
{
[SerializeField]
 public GrassSc grassSc;
 
 public void clickRight()
    {
        grassSc.transform.position += new Vector3(1, 1, 0);
        Debug.Log(grassSc.transform.position);
    }
 ]
 
J'ai donc accès à mon Object Grass et modifie donc la position. Mais la modification n'affecte pas le script GrassSc de Grass. Mon gameObject grass ne bouge pas.

Code : Tout sélectionner

public class GrassSc : MonoBehaviour
{
    void Update()
    {
        Debug.Log(transform.position);
    }
}
Désolé de vous faire perdre du temps pour quelque chose de si simple.
Merci
Edit: J'ai utilisé [SerializeField] au lieu de GameObject.FindWithTag("Player"). Ces deux techniques sont-elles équivalentes ou je rate quelque chose.
Désolé je suis perdu, je pars de zéro.

Avatar de l’utilisateur
Max
Messages : 8765
Inscription : 30 Juil 2011 13:57
Contact :

Re: Débutant cherche solution architecture script.

Message par Max » 07 Mars 2021 11:44

Bonjour,

je pense que tu mélanges un peu tout, et tu confonds un peu GameObject, component et script.
Quand tu définis public GrassSc grassSc;, tu fais référence à un script, qui est positionné sur un de tes GameObject en tant que Component.
Là on parle d'un script qui s'appelle GrassSc et d'un GameObject qui lui se nomme Grass (et sur lequel le script doit être placé comme component).
Donc si tu veux changer la position du GameObject Grass lors d'un click button, c'est la référence vers le GameObject Grass qu'il faut chercher (ou simplement son Transform)., et donc dans ton code remplacer
public GrassSc grassSc; par public GameObject grass;, puis dans ta fonction clickRight() écrire grass.transform.position += new Vector3(1, 1, 0); par exemple.
Edit: J'ai utilisé [SerializeField] au lieu de GameObject.FindWithTag("Player"). Ces deux techniques sont-elles équivalentes ou je rate quelque chose.
Désolé je suis perdu, je pars de zéro.
Non rien à voir. [SerializeField] permet d'accéder au niveau de l'inspector à une donnée qui ne serait pas public. Quand à GameObject.FindWithTag(), comme son nom l'indique, il permet de récupérer la référence d'un GameObject de ta scène qui aurait le tag spécifié (si il existe bien sûr).

Je pense que travailler les bases serait une bonne approche dans un premier temps. Car là tu butes sur des trucs vraiment simples, et tu te prend la tête sur des choses où tu ne devrais pas ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

wudang64
Messages : 5
Inscription : 05 Mars 2021 23:06

Re: Débutant cherche solution architecture script.

Message par wudang64 » 07 Mars 2021 12:26

Merci ! Super merci Max je vais bosser dessus. Merci encore et bonne journée.

wudang64
Messages : 5
Inscription : 05 Mars 2021 23:06

Re: Débutant cherche solution architecture script.

Message par wudang64 » 07 Mars 2021 14:36

C'est bon j'ai réussi. J'ai déclaré le tag dans le script du GameObject a bouger.

Code : Tout sélectionner

gameObject.tag = "Player";
Puis remplir la fonction on click avec: GameObject.FindGameObjectsWithTag()

Code : Tout sélectionner

    public void clickRightBut()
    {
        GameObject[] players;
        players = GameObject.FindGameObjectsWithTag("Player");
        
        foreach(GameObject player in players)
        {
            
            player.transform.position += new Vector3(1, 0, 0);
        }
    }
Merci Max ! :amen:

Répondre

Revenir vers « Scripting »