Instancier, je n'arrive pas trop à comprendre.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
LjDelire
Messages : 11
Inscription : 03 Nov 2021 13:56

Instancier, je n'arrive pas trop à comprendre.

Message par LjDelire » 08 Nov 2021 14:19

Bonjour, Mesdames Messieurs

Je suis nouveau dans unity3D et j'aime beaucoup la programmation, mais je suis bloqué pour certaine chose.
J'essaye de créer un agar.io sans vidéo juste avec moi et la documentation, mais le problème que quand je ne sais pas faire certaine chose comme changer le "Scale" D'un component. Je regarde donc sur le wiki, et il me donne la méthode "d'instance".
Le problème est : Que même avec des recherches interne,je n'arrive pas à comprendre à quoi Sert "l'intance" et pourquoi le faire. exemple :

Code : Tout sélectionner

GameObject Player = GameObject.FindWithTag("Player");

void OnTriggerEnter ( Collider other)
{
      If(other.gameObject.tag == "Bonbon")
       { Destroy(other.gameObject);
       // Le problème est ici :
     Player.transform.LocalScale = Player.transform.LocalScale + new Vector3(0.1F,0.1F,0.1F);
Ma question est : Pourquoi est-ce qu'on instancie un Vector3 ? et à quoi ça sert ? et en résumé ( pour les nuls : qu'est ce qu'est instancier ?).
Et pourquoi on ne peux pas faire ? : Player.transform.LocalScale= Player.transform.LocalScale(0.1F,0.1F,0.1F);

Avec mes plus grandes et sincères salutations,
Cordialement, LjDelire
 ! Message de : boubouk50
Merci d'utiliser les balises CODE prévues pour encapsuler du code et ainsi améliorer sa visibilité

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Instancier, je n'arrive pas trop à comprendre.

Message par jmhoubre » 08 Nov 2021 15:31

Bonjour,

ce serait pas mal d'aller te présenter sur le sujet prévu à cet effet. En te connaissant mieux (âge, profil scolaire, expérience informatique), on peut adapter la réponse.

En cherchant sur google "définition instance", on voit dans "Autres questions posées" : Qu'est-ce qu'une instance informatique ?
La réponse est : "Dans l'univers de la programmation objet, l'instance désigne une occurrence d'une classe. Cette dernière est elle-même définie comme la structure d'un objet, c'est-à-dire comme l'ensemble des fonctionnalités et des comportements qui caractérisent cet objet".
Décortiquons : une classe est en gros un modèle. On peut créer une classe Ball. Une classe possède des attributs qui décrivent la balle (la taille du ballon, sa couleur, son degré d'usure, etc...), et des méthodes qui permettent d'agir dessus (Inflate() pour gonfler le ballon, etc...). Il faut retenir que dans la plupart des cas, on ne peut pas intervenir sur une classe. On intervient sur une instance de cette classe, qui est la représentation concrète de cette classe. Par exemple, on instancie une balle avec :

Code : Tout sélectionner

myBall = new Ball ();
On peut agir sur myBall, soit en modifiant ses attributs, soit en utilisant ses méthodes.

Vector3 n'est pas vraiment une classe, mais une structure, qui a beaucoup de points communs :

Code : Tout sélectionner

// Création (ou instanciation) d'un Vector3.
Vector3 myVector = new Vector3(0f, 0f, 1f);
// Obtient la taille du vecteur en utilisant sa propriété magnitude (c'est en gros une méthode).
float sizeVector = myVector.magnitude;
Pour ton problème, en C#, une majuscule n'est pas égale à une minuscule : transform.LocalScale n'existe pas. Essaie transform.localScale.

Pour finir, je te conseille d'apprendre à programmer avec des tutos pour débutants. Par exemple celui-ci.

LjDelire
Messages : 11
Inscription : 03 Nov 2021 13:56

Re: Instancier, je n'arrive pas trop à comprendre.

Message par LjDelire » 09 Nov 2021 20:45

Bonjour jmhoubre,

Je te remercie énormément pour ton aide, et je suis encode désolé pour ces questions.

Donc si j'ai bien compris. Quand on créer un objet, il est composé de plusieurs classes différentes, et ces classes différentes, sont soit des : attributs soit des méthodes ?
Ces attribues et ses méthodes comporte plusieurs autres méthodes ?
Et donc pour pouvoir changer ou modifier une certaine méthode/attribues de l'Object , il faut instancier la classe qui comporte cette attribue ou Object, pour pouvoir la modifier ?

Merci encore,
Cordialement, Loïck.S

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Instancier, je n'arrive pas trop à comprendre.

Message par jmhoubre » 10 Nov 2021 11:57

En général non : en C# pur, un objet classique = une classe.

Dans Unity, un objet est un assemblage de composants, chaque composant est une classe. Quand tu écris un script Monobehaviour, et que tu l'attaches à un objet, tu as créé un composant.

Une classe n'a pas soit des attributs, soit des méthodes : elle a des attributs ou des méthodes, ou étant inclusif (et / ou).
jmhoubre a écrit :Une classe possède des attributs qui décrivent la balle (la taille du ballon, sa couleur, son degré d'usure, etc...), et des méthodes qui permettent d'agir dessus (Inflate() pour gonfler le ballon, etc...).
Ces attribues et ses méthodes comporte plusieurs autres méthodes ? Non.

Et donc pour pouvoir changer ou modifier une certaine méthode/attribues de l'Object
Changer une méthode : on change la méthode dans le code. Exemple : on a une méthode qui additionne deux nombres, et on veut qu'elle les multiplie :

Code : Tout sélectionner

// Méthode initiale
private int Add(int a, int b)
{
	return a + b;
}
// Méthode modifiée
private int Add(int a, int b)
{
	return a * b;
}
Remarque 1 : ce code ne fonctionnera pas, car les 2 fonctions ont le même nom et les mêmes paramètres.
Remarque 2 : la seconde méthode n'est pas fausse, mais maladroite. On s'attend à ce qu'une méthode Add additionne des nombres. Ce n'est pas vraiment un bug, plutôt une erreur de conception.
Remarque 3 : en nommant la seconde méthode Mult, les remarques 1 et 2 n'ont plus lieu d'être.

Changer un attribut
Un attribut se change dans le code ou dans l'inspecteur.

Code : Tout sélectionner

public Class Example : MonoBehaviour
{
	private int a = 3;
	public int b;

	private void Start ()
	{
		a = 5;
		b = b + a;
	}
}
La classe Example a une méthode (Start) et deux attributs (a et b). Elle dérive de MonoBehaviour, on peut donc l'attacher à un GameObject(par exemple un Empty).
L'attribut b est public : il apparaîtra dans l'inspecteur, dans le composant Example, aissi que les autres composants de du GameObject que tu as créé (si tu as créé un Empty, il n'y a qu'un composant Transform). Dans l'inspecteur, tu peux lui donner la valeur désirée, et la manipuler dans le code.
L'attribut a est privé. Il n'apparaît pas dans l'inspecteur, mais peut également être manipulé dans le code.

Dans Unity, attacher une classe à un GameObject revient à l'instancier.

Mais je te conseille de suivre cette série.

LjDelire
Messages : 11
Inscription : 03 Nov 2021 13:56

Re: Instancier, je n'arrive pas trop à comprendre.

Message par LjDelire » 10 Nov 2021 16:47

Bonjour jmhoubre,

Merci beaucoup pour ton aide,
Je crois comprendre. mais pour en être sur je vais aller regarder la série que tu m'as proposé !
Merci encore !

Cordialement, Loïck.S

Répondre

Revenir vers « Scripting »