Page 1 sur 1

[MY-AL] POO et déplacement d'objet

Publié : 17 Juin 2018 10:57
par pcpunch
Bonjour je me met a la POO avec Unity, mais je ne comprend pas commet utiliser un classe dependant du MonoBehaviour et une methode public de cette classe qui me permettrais de faire avancer un cube :

Ma classe Cube

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Cube :MonoBehaviour {

    private string Couleur {get ; set; }
    private int Vitesse {get;set;}


	public Cube(string c, int v)
    {
        Couleur = c;
        Vitesse = v;
    }

    public void Avance()
    {        
        transform.Translate(Vector3.forward * Vitesse);
    }
       
}
Le script sur mon cube :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeScript : MonoBehaviour {

    Cube monCube = new Cube("rouge", 2);

		
	void Update () {
		
        if(Input.GetKeyDown(KeyCode.UpArrow))
        {
            monCube.Avance();
        }
	}
}
Est ce seulement possible ou la POO traite uniquement les données ?
je ne trouve pas de tuto sur ce sujet (POO et unity)

Merci de m'éclairer :)

Re: [MY-AL] POO et déplacement d'objet

Publié : 17 Juin 2018 11:53
par Max
Hello,

effectivement, tout cela semble un peu confut. Déjà, tu ne peux pas instancier comme tu le fait une classe dérivant de MonoBehaviours. Au mieux, il faut passer par AddComponent().
Mais au delà de la POO, là je dirais que l'on touche plus à la compréhension des mécaniques de base lié à Unity et l'écriture de scripts associés.
Si tu souhaites faire avancer un cube, pourquoi deux scripts ? C'est vrai que séparer les tâches est souvent conseillé, mais il ne faut pas pousser ce concept à l’excès.
Donc, tu pourrais écrire simplement (avec pour base ce que tu as écris plus haut):

Code : Tout sélectionner

public class CubeScript : MonoBehaviour {

    [SerializeField]
    float vitesse = 1.0f;
    [SerializeField]
    Color color;

    // Use this for initialization
    void Start () {
        GetComponent<MeshRenderer>().material.color = color;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            transform.Translate(Vector3.forward * vitesse);
        }
    }
}
Après au niveau de l'apprentissage, il y a deux aspects:
- bien appréhender la POO avec le C# en générale, et la je t'encourage à suivre ces tuto:
https://openclassrooms.com/courses/appr ... opper-en-c
https://openclassrooms.com/courses/prog ... jet-avec-c
- en suite, la partie spécifique à Unity, et en particulier tout ce qui touche la partie script:
https://unity3d.com/fr/learn/tutorials/s/scripting

Re: [MY-AL] POO et déplacement d'objet

Publié : 17 Juin 2018 12:08
par pcpunch
Merci pour ces infos le but est de pouvoir par exemple utiliser des classes pour effectuer des actions différentes selon les objets.

Je maîtrise assez le c# au niveau d'unity mais la POO un peu moins mais j'avance;

Re: [MY-AL] POO et déplacement d'objet

Publié : 17 Juin 2018 12:18
par pcpunch
Par contre ce que je comprend pas , pourquoi dans le peu de tuto video sur la POO ou de cours on nous pressente toujours une méthode style attaquer, sauter, avancer ????

Si ce n'est pas ce qu'il faut faire

Cordialement

Re: [MY-AL] POO et déplacement d'objet

Publié : 17 Juin 2018 13:21
par Max
pcpunch a écrit :
17 Juin 2018 12:18
Par contre ce que je comprend pas , pourquoi dans le peu de tuto video sur la POO ou de cours on nous pressente toujours une méthode style attaquer, sauter, avancer ????

Si ce n'est pas ce qu'il faut faire
Je n'ai jamais dit cela :-/
Il ne faut pas confondre classe et méthodes. Les termes ont leur importance. Effectivement quand tu commences à aborder des mécanismes un peu plus complexes, il est toujours mieux de séparer et hiérarchiser le code, et de le rendre le plus générique possible, facilitant une approche modulaire. Après dans chaque classe, tu auras plusieurs méthodes en charge de fonctionnalités différentes.
Mais dans le cas que tu exposes dans ton message initial par exemple, tu cherches à écrire une classe indépendante pour finalement une seule ligne de code... donc est-ce bien utile ?