PDA

Voir la version complète : Développez Couché, saison 4 : le topic officiel



L-F. Sébum
27/08/2014, 15h49
Vous l'avez lu dans le Canard PC 303, cette année nous allons développer un jeu avec Unity (téléchargeable ICI (http://unity3d.com/))

Contenu nécessaire aux leçons :
Tous les fichiers de média (son, image, etc.) nécessaires pour le moment se trouvent dans le fichier canardage_saison4.zip (https://sites.google.com/site/developpezcouche/canardage_saison4.zip?attredirects=0&d=1).

La totalité du projet Unity tel qu'il était à la fin de la leçon 10 (Canard PC n°312) : Canardage_PostLecon10.7z (https://sites.google.com/site/developpezcouche/Canardage_PostLecon10.7z?attredirects=0&d=1).

Koala77
05/11/2014, 13h51
Gracias senior Sébum d'avoir ouvert le topic.

Je me lance donc dans l'aventure après avoir suivi et apprécié la saison 3 (celle dans laquelle JackBauer apprend à faire du javascript). J'espère que cette saison 4 sera encore une fois l'occasion déchanger des protips de haut niveau entre canard du genre "t'as pensé à sauvegarder ton code avant de relancer, couillon ?". Au plaisir !

JulLeBarge
05/11/2014, 16h09
Je m'y suis mis aussi, j'ai déjà touché à Unity mais jamais pour la 2D, c'est la bonne occasion !

Poussin Joyeux
08/11/2014, 16h03
Coucou! Bon démarrage de la saison, ça me permet de mettre à Unity alors que j'hésitais depuis quelques temps.
J'avoue qu'en septembre, je me suis dit "oh encore Canardage et ses saucisses volantes..." car j'avais bien apprécié le Roguelike d'il y a 2 ans et son originalité (de mon point de vue!) mais finalement, ce sera l'occasion de pratiquer Unity alors c'est bien :)

Juste une question sur la dernière leçon:

gameObject.transform.Translate (-Vitesse, 0f, 0);

On aurait tout autant pu enlever le f et écrire:

gameObject.transform.Translate (-Vitesse, 0, 0);

c'est bien ça?
Juste pour être sûr que rien ne m'ait échappé! Merci!
Et vivement la suite! ;)

Koala77
09/11/2014, 00h17
Bonne question, je n'ai pas bien compris à quoi correspondent les f. Sur le coup j'ai pensé à un nombre de frames, mais ça ne voudrait rien dire.... puis que cela doit être plutot d'une unite de distance.

Louck
09/11/2014, 10h55
Bonne question, je n'ai pas bien compris à quoi correspondent les f.

En C# (et Java je crois), une valeur est considérée comme type entière (int) par défaut. Même si tu tentes d'entrer une valeur avec décimale, ca sera considéré comme de type int (et dans ce cas, l'IDE monodevelop te crache une erreur).
Le symbole f après une valeur, c'est pour indiquer au système que c'est une valeur flottante (float). Par exemple: 1.42f.

Du coup oui: 0f = 0. C'est la même valeur, juste que la première sera considérée de type float, et la seconde de type int.


Par contre, je ne sais pas si cette indication, c'est pour l'IDE (pour qu'il ne crache pas d'erreur "int != float") ou pour le système.



Note: Il existe aussi la notation l pour long (très grosse valeur entière), et s pour short (toute petite valeur entière).

Koala77
09/11/2014, 11h05
Rho là honte j'ai fait un peu de C# dans mon boulot mais cette façon de typer à la volée une valeur constante m'avait complètement échappé. Merci !!!

Black Wolf
10/11/2014, 11h49
En C# en effet les nombres sans "virgule" sont considérés comme étant de type int. Les nombres réels/à "virgule" (oui je met les guillemets parce qu'on met un . plutôt qu'une , :p) sont considérés comme étant de type Double, codés sur 64 bits. Sauf que Unity, qui était pendant très longtemps tout en 32 bits (ce qui n’empêche pas d'utiliser des double en 64 bits pour autant, mais ça prend plus de mémoire et est un peu plus lent à traiter lors des opérations sur une appli 32 bits sauf erreur) utilise des floats codés sur 32 bits pour la plupart de ses opérations. C'est pour ça qu'on rajoute un f après les nombres "hardcodés" pour préciser au compilateur qu'on lui passe un nombre réel "float" à coder en 32 bits plutôt qu'un "double" à coder en 64 bits.

Koala77
11/11/2014, 18h06
Merci pour cette explication précise.

hammerfest
15/11/2014, 07h57
Bonjour à tous, je suis tout nouveau sur CanardPC et j'avoue beaucoup apprécier ce magazine et je compte d'ailleurs m'y abonner sous peu, j'en avais déjà lu quelques uns grâce à des amis (qui ont bon gout manifestement) mais mon premier vrai achat est le n°306 du 1er Novembre. J'ai donc pu découvrir la leçon n°4 de Développez Couché, je me demandais donc si il y avait moyen de télécharger ou d'obtenir les leçons précédentes, je m'intéresse pas mal à la programmation sous Unity, et j'aimerai donc logiquement suivre les leçons dans l'ordre.

Merci d'avance pour vos réponses.

CanardLaquais
15/11/2014, 15h42
Bonjour à tous, je suis tout nouveau sur CanardPC et j'avoue beaucoup apprécier ce magazine et je compte d'ailleurs m'y abonner sous peu, j'en avais déjà lu quelques uns grâce à des amis (qui ont bon gout manifestement) mais mon premier vrai achat est le n°306 du 1er Novembre. J'ai donc pu découvrir la leçon n°4 de Développez Couché, je me demandais donc si il y avait moyen de télécharger ou d'obtenir les leçons précédentes, je m'intéresse pas mal à la programmation sous Unity, et j'aimerai donc logiquement suivre les leçons dans l'ordre.

Merci d'avance pour vos réponses.
Envoyé en message privé.

CanardLaquais
15/11/2014, 23h13
J'ai fini la leçon 4, tout fonctionne bien mais je me posais quelques questions.
Pourquoi, on ne voit pas le soleil complètement ?
Pourquoi, il y a un bout de ciel (bleu) tout en bas ?
Pourquoi ciel1b et ciel2b sont positionnés en X=25.6 (valeur qui est aussi utilisée dans ScriptDecor) ?

Déjà, on peut constater en sélectionnant ciel0 (ou ciel1 ou ciel2) dans Assets\Media afin qu'il apparaisse dans l' "Inspector" que PixelToUnits = 100. On voit aussi Pivot=Center, cela veut dire que le point de référence pour positionner l'image dans la scène est le centre de l'image.
http://tof.canardpc.com/view/c6592908-8d4c-4371-b3c3-e42cb37a5f39.jpg

ciel0 fait 640 x 480 pixels donc en unités cela fait 6.4 x 4.8 (on divise par 100).
On applique un grossissement de 3 (Scale X=3 Y=3) => 19.2 x 14.4

ciel1 et ciel2 font 1280 x 480 avec un grossissement x 2 => 25.6 x 9.6

On comprend mieux si on dézoome un peu la scene:
http://tof.canardpc.com/preview2/b36b19b0-2405-4f93-a207-075833c6b581.jpg (http://tof.canardpc.com/view/b36b19b0-2405-4f93-a207-075833c6b581.jpg)

Le point origine (X=0, Y=0) est au centre de la scène, l'axe des X est à l’horizontale et l'axe des Y est à la verticale. C'est comme en math, un repére orthonormé direct.
Les carrés de la grille font 10 x 10 et on voit aussi le cadre qui représente la caméra (la partie qui est visible quand on exécute le jeu).
La caméra est définie avec une taille de 5 (Size = 5 - en dessous de Projection = Ortographic). En fait cela représente la demi-hauteur de la caméra donc la caméra fait 10 unités de haut (centrée sur le point origine donc 5 en dessous et 5 en dessus).

On voit qu'il reste un bout de ciel bleu en bas et que le haut de l'écran est tronqué, c'est pour cela qu'on ne voit pas tout le soleil.

Si vous exécutez le projet (menu File / Build & Run) vous constaterez qu'on ne voit pas la même portion de la scène selon que l'on choisisse une fenêtre 1024 x768 (ratio 4/3) ou 1280 x 720 (ratio 16/9).
En effet , la largeur de la caméra dépend du ratio de l'écran (en mode plein écran) ou du ratio de la fenêtre (en mode fenêtré).
Par exemple, avec une fenêtre de 1024x768 (ratio 4/3), largeur de camera = 10 * 4 / 3 = (environ) 13.3 unités

Pour finir, je signale qu'on peut aussi utiliser Visual Studio pour éditer et debugger les scripts Unity. D'ailleurs, depuis peu Microsoft propose une version Community Edition de VS 2013 qui est gratuite et qui est équivalente à la version Pro : http://msdn.microsoft.com/en-us/visual-studio-community-vs.aspx
On peut aussi faire du développement java script/typescript pour ceux qui continuent sur la lancée de "Développer couché" saison 3.

hammerfest
16/11/2014, 13h07
CanardLaquais: Envoyé en message privé.

Merci beaucoup! C'est vraiment très sympa de ta part! Je vais pouvoir potasser tout ça maintenant :)

Par contre pour répondre à ton dernier message, je dirais que pour les deux premières questions, c'est juste une "décision artistique", le jeu -ou du moins l'exercice- n'a pas vraiment pour but d’être réaliste, du coup le bout de ciel en bas et le soleil pas entier sont des détails, en plus ton screen a l'air de correspondre à celui que l'on entrevoit sur la leçon n°4. Donc, je pense, pas de soucis de ce côté là, pour le reste je saurais pas dire désolé.

CanardLaquais
16/11/2014, 13h30
Par contre pour répondre à ton dernier message, je dirais que pour les deux premières questions, c'est juste une "décision artistique", le jeu -ou du moins l'exercice- n'a pas vraiment pour but d’être réaliste, du coup le bout de ciel en bas et le soleil pas entier sont des détails, en plus ton screen a l'air de correspondre à celui que l'on entrevoit sur la leçon n°4. Donc, je pense, pas de soucis de ce côté là, pour le reste je saurais pas dire désolé.

Je n'ai pas de soucis avec le coté technique ou artistique. Je me posais ces questions car je voulais comprendre comment ça marche. C'est à ces questions que j'essaye de répondre dans mon message.

Poussin Joyeux
16/11/2014, 15h41
J'ai implémenté la leçon 4 et ça fonctionne bien (j'ai juste dû décocher "Play on Awake" pour le son du tir sinon ça faisait le "panpan" une fois au lancement du jeu).

Par contre, l'icône de mon prefab "tir" est restée en cube bleu. Ca vous a fait pareil?

CanardLaquais
16/11/2014, 17h45
J'ai implémenté la leçon 4 et ça fonctionne bien (j'ai juste dû décocher "Play on Awake" pour le son du tir sinon ça faisait le "panpan" une fois au lancement du jeu).
Par contre, l'icône de mon prefab "tir" est restée en cube bleu. Ca vous a fait pareil?

C'est plutôt la leçon 5 du 15 Novembre ?
Je n'ai pas encore reçu ce Canard PC.

Poussin Joyeux
18/11/2014, 11h50
Ah oui c'est la 5!

CanardLaquais
30/11/2014, 15h00
J'ai implémenté la leçon 4 et ça fonctionne bien (j'ai juste dû décocher "Play on Awake" pour le son du tir sinon ça faisait le "panpan" une fois au lancement du jeu).
Par contre, l'icône de mon prefab "tir" est restée en cube bleu. Ca vous a fait pareil?

L’icône de mon prefab "tir" n'est pas un cube bleu : c'est l'image "tir" sur un fond gris foncé.
Je n'ai pas le son "panpan" au lancement du jeu.

Tu as quoi dans Audio Clip (juste en dessous de Audio Source) ?

Normalement il y a "None (Audio Clip)" donc pas de son.
Par la suite, j'ai glissé/déposé "music" pour entendre la musique du jeu (en laissant coché "Play on Awake") mais ce sera surement pour une prochaine leçon.

Remarque: j'ai installé la version la plus récente d'Unity (4.6.0) mais je ne pense pas que nos différences viennent de ça.

J'ai remarqué que le son est plus fort quand le joueur est au centre de la scène (et moins fort sur les bords).
Pour que le son ne change pas selon la position du joueur, Il faut sélectionner le son dans Media et décocher "3D Sound" dans l'Inspector.

Mietzsche
03/12/2014, 15h40
Bonjour, je me suis amusé à faire quelques modifications à ma sauce. Décor fixe, joueur mobile et caméra attachée au jour. Jusque là tout allait bien. Puis j'ai voulu faire en sorte que les touches haut/bas modifie la vitesse et la touche gauche/droite l'inclinaison.

Le script attaché à la soucoupe est devenu ainsi :


using UnityEngine;
using System.Collections;

public class ScriptJoueur_arkham : MonoBehaviour {

public float angle = 0f;
public float sinus = 0f;
public float cosinus = 0f;
float v = 0f;

// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.UpArrow))
v = v+0.01f;
else if (Input.GetKey (KeyCode.DownArrow))
v = v-0.01f;

if (Input.GetKey (KeyCode.RightArrow)) {
angle = angle - 1f;
gameObject.transform.Rotate (0f, 0f, -1f);
} else if (Input.GetKey (KeyCode.LeftArrow)) {
angle = angle + 1f;
gameObject.transform.Rotate (0f, 0f, 1f);
}
if (Input.GetKey (KeyCode.Space))
{v = 0;};

cosinus = Mathf.Cos (angle * 3.141592f / 180f);
sinus = Mathf.Sin (angle * 3.141592f / 180f);


gameObject.transform.Translate ( v * cosinus, v * sinus, 0f);
}
}



Et ici, gros problème, quand mon angle vaut 45° ma soucoupe monte vers le haut, quand il vaut 90, elle va vers l'arrière.

J'ai retourné le problème dans tout les sens, je ne vois absolument pas pourquoi il double mes angles.

Un petit dessin :

http://tof.canardpc.com/view/0e49691f-95ce-43fe-91d5-93cedb6c9572.jpg

Dans cette situation ma soucoupe monte à la verticale alors que sinus et cosinus valent bien 0,71 chacun (du moins selon l'inspector) et donc qu'elle devrait monter avec une pente de 45°.

A ce moment, la cause de bug la plus probable de mon point de vue serait un problème de compilation... mais j'ai beau recompiler dans tout les sens ça me fait toujours le même stuud.

Quelqu'un aurait-il une idée ?

---------- Post added at 15h40 ---------- Previous post was at 15h15 ----------

[Fixed]

Oki, j'ai trouvé. En fait le processus "translate" tient déjà compte de l'angle de rotation. Donc quand je rajoutait mes sinus et cosinus dans ma translation, il prenait donc 2x l'angle en compte.

Du coup, j'ai viré les sinus et cosinus et corrigé ainsi :


gameObject.transform.Translate ( v, 0f, 0f);

Et maintenant ça fonctionne !

Merci pour l'aide ;)

P.S. : Le script s'appelle "Joueur_arkham", car j'ai un vieux rêve d'adaptation d'Arkham Horror en roguelike coop' 2D temps réel.

Black Wolf
03/12/2014, 19h13
T'as trouvé la solution tout seul on dirait :) mais oui Translate à un dernier paramètre optionnel qui vaut par défaut Space.Self (il tient compte de sa position et son orientation pour faire le translate), si tu avais fait gameObject.transform.Translate ( v, 0f, 0f, Space.World); tu aurais eu le résultat que tu attendais. Mais ta solution est plus efficace maintenant :) !

Gasna
08/01/2015, 18h32
Bon j'ouvre le post des boulets:

J'ai un problème de saucisses que je n'arrive pas à résoudre.

Mes saucisses se contentes de pop en bas de la scène :

http://tof.canardpc.com/preview2/6dcf0018-160b-4f96-a368-5446ff05f1ef.jpg (http://tof.canardpc.com/view/6dcf0018-160b-4f96-a368-5446ff05f1ef.jpg)

Surement une subtilité que je n'ai point saisi...

public class ScriptSaucisse : MonoBehaviour {
public AudioClip sonImpact;
public AudioClip sonImpact_Pourri;

bool pourri;

GameObject joueur = null;
GameObject camera = null;



void Start () {
joueur = GameObject.Find("joueur");
camera = GameObject.Find("Main Camera");

NouvelleSaucisse ();
gameObject.transform.Translate(Random.Range (0,10),0,0);
}

void Update () {
gameObject.transform.Translate (-0.1f,0,0);

if(Vector3.Distance(gameObject.transform.position, joueur.transform.position) < 1f)
{
if(pourri)camera.audio.PlayOneShot(sonImpact_Pourr i);
else camera.audio.PlayOneShot(sonImpact);

NouvelleSaucisse();
return;
}

if(gameObject.transform.position.x<-10f)NouvelleSaucisse();
}

private void NouvelleSaucisse ()
{
pourri =(Random.Range (0,3)==0);

if(pourri)gameObject.renderer.material.color=new Color(0,.7f,.6f);
else gameObject.renderer.material.color=Color.white;

gameObject.transform.position=new Vector3 (10.0f+Random.Range (1.0f,4f),Random.Range (-4f,-4.5f),-9);
}
}
Si vous voyez une erreur, je ne suis pas contre un petite explication. Merci

Mietzsche
08/01/2015, 18h47
L'eerreur vient de ta dernière ligne, ce n'est pas

gameObject.transform.position=new Vector3 (10.0f+Random.Range (1.0f,4f),Random.Range (-4f,-4.5f),-9);

mais bien...


gameObject.transform.position=new Vector3 (10.0f+Random.Range (1.0f,4f),Random.Range (-4f, 4.5f),-9);

...de manière à ce que tout l'axe vertical (de -4 à 4.5) soit balayé et non pas une petite partie en bas allant de -4.5 à -4

Gasna
08/01/2015, 19h22
:| Ah ba voila, je sais pas pourquoi j'ai mis un moins là moi. Je recherchais autre part alors que c’était sous mes nez.

Sujet gros boulet clos.:tired: En te remerciant.

CanardLaquais
18/01/2015, 15h26
Au sujet de la leçon 8 "Effets de particules", j'ai du mettre "Rotation =0,0,0" sinon les étoiles montent vers le haut.
Dans "Force over LifeTime" j'ai mis -5,0,0 parce que je trouvais que les étoiles n'étaient pas éjectées assez vite.

rotoclap
19/01/2015, 09h52
En effet, mais c'est peut-être voulu. Suivant l'angle que tu mets, t'as les particules qui peuvent gêner la vision quand tu fais faire marche arrière à ton vaisseau.

XoRk0
20/01/2015, 21h09
Salut, y'aurait moyen qu'on me passe les leçon de 1 à 7 (en mp a la limite) svp car je n'ai pas acheté de CPC depuis Aout du coup j'ai loupé le début de cette saison de Developpez Couché, ce serait sympa merci :)

CanardLaquais
21/01/2015, 20h06
Salut, y'aurait moyen qu'on me passe les leçon de 1 à 7 (en mp a la limite) svp car je n'ai pas acheté de CPC depuis Aout du coup j'ai loupé le début de cette saison de Developpez Couché, ce serait sympa merci :)
Envoyé en MP.

Koala77
23/01/2015, 17h26
Bon j'ai une couille dans le potage (à la saucisse), mes particules partent vers le haut. Il faut que je règle Transform.Rotation à 200,0,0 environ pour que ça parte vers l'arrière. Et surtout elle n'apparaissent pas quand je "joue" ma scène en appuyant sur le bouton "play" en haut de l'interface.
C'est grave docteur ?

CanardLaquais
24/01/2015, 00h12
Moi aussi, elles partaient le haut. J'ai mis rotation = 0,0,0. Voir mon message précédent. C'est OK chez moi quand je fais "Play".

maseo
24/01/2015, 09h34
je vient de débuté et a la leçon 3 les scripts bug

http://tof.canardpc.com/view/c727d5f0-fcf0-44f7-a2bc-4da6c732ead1.jpg

---------- Post added at 09h34 ---------- Previous post was at 09h23 ----------

ps: mon scripts
http://tof.canardpc.com/preview/417256d2-a8a0-4a95-940d-843c09189dee.jpg (http://tof.canardpc.com/view/417256d2-a8a0-4a95-940d-843c09189dee.jpg)

Louck
24/01/2015, 11h18
Ton code est en dehors de la fonction Update().
Ou tu as confondu la fin de la fonction avec la fin de la classe.
Bref, attention aux accolades !

Ca serait plutôt:
public class scriptjoueur : MonoBehaviour {
void Update() {
if ....
else if ....
if ....
else if ....
}
}

rotoclap
27/01/2015, 09h28
Ligne 11, t'as aussi oublié un point dans le 2ème argument de l'appel à Translate().

Grhyll
18/02/2015, 19h50
Holà !

J'ose mon premier post sur ce forum pour faire mon petit moralisateur :)

Concernant la dernière leçon, il y a deux trucs qui me paraissent pas exacts, dont un qui pourrait être un peu confusant pour un développeur débutant : l'histoire de DontDestroyOnLoad sur le MenuPrincipal.
Etant donné que la variable Difficulte est statique, l'instance de MenuPrincipal peut être supprimée, ça ne change rien ; du coup ça va faire un objet qui va traîner dans le jeu, et si on a des allers-retours entre la scène de jeu et le menu principal c'est pas terrible (même si bon, une instance de MenuPrincipal devrait pas pomper trop de mémoire avant un bon bout de temps, dans l'idée c'est une méthode de programmation qui pourrait mener à des trucs pas beaux :) ).
L'autre truc, pas très important, c'est le "transform.gameObject" ; on peut accéder directement à gameObject depuis le script, pas besoin de passer par transform.

Wàlà, petite contribution pour les gens qui seraient en train de s'essayer à la programmation via ces leçons :)

JulLeBarge
19/02/2015, 11h24
Hello !

J'avais laissé de côté les leçons et en reprenant ce matin j'ai un souci avec le HUD dans la leçon 7: je ne vois pas le texte à l'écra, même après voir configuré en 16:9 comme c'est indiqué. Comment faire ?

CanardLaquais
21/02/2015, 02h34
Concernant la dernière leçon, il y a deux trucs qui me paraissent pas exacts, dont un qui pourrait être un peu confusant pour un développeur débutant : l'histoire de DontDestroyOnLoad sur le MenuPrincipal.
Etant donné que la variable Difficulte est statique, l'instance de MenuPrincipal peut être supprimée, ça ne change rien ; du coup ça va faire un objet qui va traîner dans le jeu, et si on a des allers-retours entre la scène de jeu et le menu principal c'est pas terrible (même si bon, une instance de MenuPrincipal devrait pas pomper trop de mémoire avant un bon bout de temps, dans l'idée c'est une méthode de programmation qui pourrait mener à des trucs pas beaux :) ).
L'autre truc, pas très important, c'est le "transform.gameObject" ; on peut accéder directement à gameObject depuis le script, pas besoin de passer par transform.

Effectivement, "DontDestroyOnLoad" ne semble pas utile si on déclare des variables "static".

Sinon voir Object.DontDestroyOnLoad sur docs.unity3d.com (http://docs.unity3d.com/412/Documentation/ScriptReference/Object.DontDestroyOnLoad.html)
transform.gameObject semble correct car c'est ce qui est utilisé dans l'exemple.

---------- Post added at 02h34 ---------- Previous post was at 02h28 ----------


Hello !
J'avais laissé de côté les leçons et en reprenant ce matin j'ai un souci avec le HUD dans la leçon 7: je ne vois pas le texte à l'écra, même après voir configuré en 16:9 comme c'est indiqué. Comment faire ?

Tu peux comparer ton projet avec celui de L-F. Sébum tel qu'il est à la fin de la leçon 10 : voir 1er message de ce thread.
D'ailleurs je remarque que L-F. S. semble utiliser Visual Studio 2008, alors que Visual Studio 2013 Community Edition (http://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) est disponible gratuitement et permet de debugger les scripts Unity avec Visual Studio 2013 Tools for Unity (https://visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2)

Grhyll
21/02/2015, 11h03
Sinon voir Object.DontDestroyOnLoad sur docs.unity3d.com (http://docs.unity3d.com/412/Documentation/ScriptReference/Object.DontDestroyOnLoad.html)
transform.gameObject semble correct car ce qui c'est utilisé dans l'exemple.
Ah oui, c'est curieux ! Je me demande quel est l'intérêt de faire ça comme ça.

CanardLaquais
22/02/2015, 01h42
En fait gameObject est égal à transform.gameObject , j'ai vérifié en ajoutant cette ligne dans la fonction Awake :

Debug.Log("gameObject == transform.gameObject :" + (gameObject == transform.gameObject));

Ce qui donne lors de l’exécution (dans la console - l'onglet à coté de "Project" en bas à gauche) :
gameObject == transform.gameObject :True

Grhyll
22/02/2015, 11h28
Ben, effectivement j'ai de mon côté toujours utilisé juste ".gameObject", sans passer par le transform ; ce qui est bizarre, c'est qu'ils passent par le transform dans une page de doc. A moins que ce ne soit juste une inattention de leur part !

JulLeBarge
22/02/2015, 11h34
Tu peux comparer ton projet avec celui de L-F. Sébum tel qu'il est à la fin de la leçon 10 : voir 1er message de ce thread.
D'ailleurs je remarque que L-F. S. semble utiliser Visual Studio 2008, alors que Visual Studio 2013 Community Edition (http://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) est disponible gratuitement et permet de debugger les scripts Unity avec Visual Studio 2013 Tools for Unity (https://visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2)

Finalement j'ai réglé le problème en jouant avec les valeurs PosX et PosY

SNPtg
24/02/2015, 18h51
Bonjour,

Mon exemplaire 305 ayant profité d'un moment d'inattention pour apprendre la brasse coulé au fond du bain, je me trouve fort dépourvu entre les leçon 2 et 4.

Je demande humblement votre assistance.

CanardLaquais
25/02/2015, 01h36
Bonjour,
Mon exemplaire 305 ayant profité d'un moment d'inattention pour apprendre la brasse coulé au fond du bain, je me trouve fort dépourvu entre les leçon 2 et 4.
Je demande humblement votre assistance.

Envoyé en MP.

SNPtg
26/02/2015, 03h50
Merci

CanardLaquais
03/03/2015, 22h02
J'ai testé Unity 5 (éditeur 64 bits sous Windows 10 Technical Preview) : tout fonctionne bien mais le projet doit être converti vers le nouveau format et certaines lignes de script sont modifiées (automatiquement) lors de la conversion.

Par exemple,

if (pourri)
gameObject.renderer.material.color = new Color(0, .7f, .6f);

else
gameObject.renderer.material.color = Color.white;devient avec Unity 5 :

if (pourri)
gameObject.GetComponent<Renderer>().material.color = new Color(0, 0.7f, 0.6f);
else
gameObject.GetComponent<Renderer>().material.color = Color.white;Sinon, pour la leçon 11, j'ai ajouté cette ligne dans ViePerdue pour rafraichir l'écran :

GameObject.Find("HUD_Vies").GetComponent<Text>().text = "Vies : " + Vies.ToString();

Juniadkhan
05/03/2015, 11h03
Salut aux quelques-uns qui trainent par ici, et mes excuses pour l'invasion du topic. Je recherche les premières saisons de ce beau projet histoire de me cultiver. Or, plus rien ne semble disponible sur le site officiel de la rubrique, sur le ftp, en somme sur les internets universels, il n'y a plus rien pour prendre ce train en marche. Est-ce trop tard, trop "old", ou trop 2012? Je vous le demande.
Merci aux éventuelles âmes charitables des archivistes qui me répondraient! Développez bien!

gxp
11/03/2015, 13h24
Salut à tous !
Je suis à la recherche d'une bonne âme qui pourrait m'aider à récupérer les premières leçons de cette saison. Mon déménagement a eu raison des mes piles de canards aussi je ne me retrouve qu'avec les leçons 8, 9 et 10.
Merci.

CanardLaquais
12/03/2015, 19h34
Salut à tous !
Je suis à la recherche d'une bonne âme qui pourrait m'aider à récupérer les premières leçons de cette saison. Mon déménagement a eu raison des mes piles de canards aussi je ne me retrouve qu'avec les leçons 8, 9 et 10.
Merci.
Envoyé en MP

gxp
12/03/2015, 19h43
Super ! Merci beaucoup !

GrmlnsGlx
12/03/2015, 23h10
Salut,
Il me manque le numéro 3 impossible de remettre la main dessus, si un canard charitable aurait ça sous le coude, ce serait fort sympathique :)

Et merci au passage pour cette rubrique très intéressante.

CanardLaquais
13/03/2015, 00h22
Salut,
Il me manque le numéro 3 impossible de remettre la main dessus, si un canard charitable aurait ça sous le coude, ce serait fort sympathique :)

Envoyé en MP

CanardLaquais
21/03/2015, 23h11
Si mes calculs sont exacts, une saucisse à 6 chances sur 9 d'être normale ( 6/9 = 2/3), 1/9 pourrie, 1/9 méchante et 1/9 bonus.

J'ai donc réécrit à ma façon la fonction NouvelleSaucisse, le résultat devrait être identique.




void NouvelleSaucisse ()
{
int rnd = Random.Range (0, 9);
Color color;

if (rnd < 6)
{
TypeDeSaucisse = SaucisseTypes.Normale;
color = Color.white;
Vitesse = 0;
}
else
{
switch (rnd - 6)
{
case 0:
TypeDeSaucisse = SaucisseTypes.Pourrie;
color = Color.red;
Vitesse = 0;
break;
case 1:
TypeDeSaucisse = SaucisseTypes.Mechante;
color = Color.red;
Vitesse = 0.05f;
break;
default:
TypeDeSaucisse = SaucisseTypes.Bonus;
color = Color.white;
Vitesse = 0.05f;
break;
}
}

gameObject.GetComponent<Renderer> ().material.color = color;
gameObject.transform.position = new Vector3 (10 + Random.Range (1, 4), Random.Range (-4, 4.5f), -9);

if( gameObject.transform.position.y > 0)
Vitesse = -Vitesse;

//Debug.Log(string.Format( "NouvelleSaucisse rnd:{0} -> {1} {2} V={3} Y={4}", rnd, TypeDeSaucisse, color, Vitesse, gameObject.transform.position.y));
}

CanardLaquais
02/04/2015, 23h47
Pas de leçon 13 dans le numéro 315 du 1er Avril ?
C'est un poisson d'Avril ?

Koala77
10/04/2015, 16h02
Oui je viens seulement de remarquer aussi, la rubrique aurait elle souffert d'un manque de succès ? :(

frisette
16/04/2015, 17h14
La rubrique est de retour dans le numéro 316 ! :lol:

J'ai une question: est-ce-que le projet est compatible avec Unity 5 ?

J'ai envie de passer à la dernière version mais j'ai peur de tout casser....:unsure:

Grhyll
16/04/2015, 21h39
Tu peux garder l'ancienne version de Unity installée en renommant le dossier d'install, et mettre en plus Unity 5 ; tu fais une copie du projet puis tu l'ouvres dans Unity 5, il va updater des trucs, et tu verras bien si ça roule toujours aussi bien :)

CanardLaquais
17/04/2015, 00h10
La rubrique est de retour dans le numéro 316 ! :lol:
J'ai une question: est-ce-que le projet est compatible avec Unity 5 ?
J'ai envie de passer à la dernière version mais j'ai peur de tout casser....:unsure:

J'ai testé Unity 5. Ça fonctionne (avec modifications). Voir mon message un peu plus haut (http://forum.canardpc.com/threads/91668-D%C3%A9veloppez-Couch%C3%A9-saison-4-le-topic-officiel?p=8676524&viewfull=1#post8676524)

frisette
17/04/2015, 00h33
J'ai testé Unity 5. Ça fonctionne (avec modifications). Voir mon message un peu plus haut (http://forum.canardpc.com/threads/91668-D%C3%A9veloppez-Couch%C3%A9-saison-4-le-topic-officiel?p=8676524&viewfull=1#post8676524)


Tu peux garder l'ancienne version de Unity installée en renommant le dossier d'install, et mettre en plus Unity 5 ; tu fais une copie du projet puis tu l'ouvres dans Unity 5, il va updater des trucs, et tu verras bien si ça roule toujours aussi bien :)

Merci des réponses ! ;)
Désolé CanardLaquais, j'avais pas vu ton message. Je vais quand même rester sous unity 4 pour le développez couché et installer Unity 5 à part pour faire mon jeu pour la Jam.

antoahn
22/04/2015, 08h29
Salut,

Je voulais me mettre à la saison 2, avec le rogue like, mais il me manque genre 3 ou 4 numéros qui sont épuisés en plus, est-ce qu'il y aurait moyen de mettre la main sur ces leçons numérisées? Est-ce que quelqu'un aurait le courage de sortir ses vieux cpc pour me scanner les quelques pages qu'il me manque?

Désolé du HS, mais le topic de la saison 2 est clos, du coup je me suis dit que peut être ici...

Gaetz
24/04/2015, 22h36
Bonjour ! J'ai la même question que Hammerfest et que d'autres gens sur le topic. J'avais suivi la première saison de Développez couché, le début de la seconde, mais mon abonnement s'est ensuite fini et j'ai déménagé, donc jeté tous mes magazines.

Si c'était possible, j'aimerais récupérer les saisons 1 et 2, d'autant qu'un ami cherche à apprendre la programmation Xna/Monogame. A titre personnel, je ne suis pas contre les saisons 3 et 4, d'autant que Unity m'intéresse beaucoup :)

EDIT - inscription en 2009, et c'est mon premier message, huhu ^^

bigsoobig
15/05/2015, 05h33
J'ai testé Unity 5. Ça fonctionne (avec modifications). Voir mon message un peu plus haut (http://forum.canardpc.com/threads/91668-D%C3%A9veloppez-Couch%C3%A9-saison-4-le-topic-officiel?p=8676524&viewfull=1#post8676524)

salut salut!

Je ne crois pas que l'on puisse écrire directement faire le projet sous Unity 5... tu as juste réimporté le projet que tu as realisé sous unity 5 non?

parce que par exemple, quand je tape
if (Input.GetKeyDown(KeyCode.Space))
{
gameObject.audio.PlayOneShot(sonTir);

}

VS 2013 m'insulte de la sorte

Error 1 'UnityEngine.Component' does not contain a definition for 'PlayOneShot' and no extension method 'PlayOneShot' accepting a first argument of type 'UnityEngine.Component' could be found (are you missing a using directive or an assembly reference?)

Bref je suis qu'un grand débutant mais on dirait que la méthode PlayOneShot n'existe plus... d'ailleur intelisense ne trouve même pas PlayOneShot...

CanardLaquais
16/05/2015, 00h47
Comme indiqué dans mon message, il faut remplacer gameObject.renderer par gameObject.GetComponent<Renderer>()

Cf. http://unity3d.com/ru/unity/whats-new/unity-5.0

Removed quick property accessors, like .rigidBody, .rigidbody2D, .camera, .light, .animation, .constantForce, .renderer, .audio, .networkView, .guiTexture, .collider, .collider2D, .particleSystem, .particleEmitter, .guiText, .hingeJoint for modularization. Instead, use GetComponent to get references.

CanardLaquais
17/05/2015, 20h27
A l'issue de la leçon 14, j'ai fait un "build" du projet en mode "Web Player" et je l'ai mis sur mon site perso :
http://gilles.veyet.free.fr/canardage2/

Vous devez avoir installé le Web Player Unity pour que cela fonctionne.
Ça fonctionne avec Firefox chez moi (mais pas avec Chrome 64 bits car le plugin n'est pas supporté).

Pour info, la résolution est de 1110 x 620.
J'ai utilisé Unity 5.0.2f1 (et aussi Visual Studio 2015 RC mais j'ai du bricoler un peu le fichier de projet à la main).

J'ai remarqué que le Tir ne détruisait pas les saucisses donc j'ai modifié ScriptJoueur comme ceci :


public float vx
{
get { return joueur.GetComponent<AudioSource>().pitch * joueur.GetComponent<AudioSource>().pitch * (1 + MenuPrincipal.Difficulte) * -0.1f - Mathf.Abs(Vitesse); }
}

public float vy
{
get { return Vitesse; }
}


// Update is called once per frame
void Update ()
{
gameObject.transform.Translate (vx, vy, 0);
...
...


Et ScriptTir comme cela :


public class ScriptTir : MonoBehaviour
{
ScriptSaucisse[] saucisses;

void Start()
{
saucisses = GameObject.FindObjectsOfType<ScriptSaucisse>();
}

const float VX = 0.5f;

// Update is called once per frame
void Update()
{
gameObject.transform.Translate(VX, 0, 0);

if (gameObject.transform.position.x > 13)
{
Destroy(gameObject);
return;
}

foreach (ScriptSaucisse saucisse in saucisses)
{
if (Mathf.Abs(gameObject.transform.position.y - saucisse.gameObject.transform.position.y) < 0.5)
{
if (saucisse.gameObject.transform.position.x >= gameObject.transform.position.x
&& saucisse.gameObject.transform.position.x + saucisse.vx <= gameObject.transform.position.x + VX)
{
saucisse.NouvelleSaucisse();
}

}
}
}
}


Ce n'est surement pas parfait mais ça à l'air de fonctionner à peu prés. Il faudrait peut être que je tienne compte de la largeur (x) du tir et des saucisses ainsi que de la vitesse verticale (vy) pour les saucisses méchantes et bonus.

CanardLaquais
17/05/2015, 23h32
Voici maintenant la version WebGL (preview) : http://gilles.veyet.free.fr/canardage2webgl

Le temps de chargement est assez long mais il n'y a pas besoin d'installer le Player Web Unity sur son PC.
Ne fonctionne pas bien sous Firefox (saccadé, pourcentage CPU assez élevé). [Edit] c'est parce que j'avais désactivé l'accélération matérielle dans Firefox.
Par contre c'est OK sous Chrome (aussi OK en mode plein écran à part le placement de "Score" et Vies).

Fonctionne aussi sous Microsoft Edge (Spartan) - Windows 10 build 10074 - sauf le mode plein écran.

Il y un petit probléme si votre écran est trop petit ou si votre navigateur n'est pas en plein écran car les touches fléchées font défiler les ascenseurs en même temps que le vaisseau.

yubaba
20/05/2015, 10h55
Voici maintenant la version WebGL (preview) : http://gilles.veyet.free.fr/canardage2webgl


Salut,

J'ai testé ta version et il me semble qu'il y a un petit bug visuel. Je l'ai testé sous Firefox (et chez moi j'ai aucun problème).
Le bug en question : au démarrage du jeu il se produit une explosion comme si tu venais de heurter une saucisse. L'explosion continue après à intervalle régulier sans rien toucher. N'aurais tu pas mis l'explosion dès le démarrage de l'application par hasard ?

Gaetz
20/05/2015, 20h01
Bonjour, je souhaitais savoir s'il était possible de récupérer les développez-coucher des précédentes saisons ? J'ai jeté les Canard PC qui les contenaient, suite à un déménagement.

CanardLaquais
21/05/2015, 01h08
Salut,

J'ai testé ta version et il me semble qu'il y a un petit bug visuel. Je l'ai testé sous Firefox (et chez moi j'ai aucun problème).
Le bug en question : au démarrage du jeu il se produit une explosion comme si tu venais de heurter une saucisse. L'explosion continue après à intervalle régulier sans rien toucher. N'aurais tu pas mis l'explosion dès le démarrage de l'application par hasard ?

J'avais oublié de décocher "Looping" donc l'explosion revenait toutes les 5 secondes.
Par contre, je ne sais pas comment empêcher qu'elle joue au démarrage car si je décoche "Play on Awake", cela ne fonctionne plus du tout.

J'ai corrigé et déployé les 2 versions (webgl et web player).
Forcer le rafraichissement de la page ou vider le cache si vous avez toujours l'ancienne version.

En ce qui concerne les saccades sous Firefox avec la version WebGL, c'est parce que j'avais désactivé l'accélération matérielle (à cause des crash avec Flash Player). Effectivement ça fonctionne très bien quand l'accélération est activée.

yubaba
21/05/2015, 12h37
J'avais oublié de décocher "Looping" donc l'explosion revenait toutes les 5 secondes.
Par contre, je ne sais pas comment empêcher qu'elle joue au démarrage car si je décoche "Play on Awake", cela ne fonctionne plus du tout.

J'ai eu un souci comme le tiens au début. J'avais mis un ";" à la fin d'une ligne ou il ne fallait pas en mettre. Le programme compilait bien un truc mais va savoir comment et il faisait le même problème.

Si tu as suivi scrupuleusement les leçons, vérifie du côté du "scriptSaucisse" à la ligne qui sert à instancier les particules. Elle doit commencer par :

GameObject = (GameObject) instantiate (explosionPrefab)...
...
...
destroy(e, 1f);

L'erreur doit se trouver quelque part par ici :)

CanardLaquais
22/05/2015, 00h35
Mon code semble correct (conforme au magazine Canard PC) :


if (Vector3.Distance (gameObject.transform.position, joueur.transform.position) < 1)
{
Debug.Log("Explosion!!!");
GameObject explosion = (GameObject)Instantiate(explosionPrefab, joueur.transform.position + new Vector3(0, 0, 1), Quaternion.identity);

if (TypeDeSaucisse == SaucisseTypes.Pourrie || TypeDeSaucisse == SaucisseTypes.Mechante)
{
explosion.GetComponent<ParticleSystem>().startColor = Color.red;
explosion.GetComponent<ParticleSystem>().gravityModifier = 2;
}

Destroy(explosion, 1);


Le souci qui reste, c'est l’explosion au démarrage de l'application mais cela ne peut pas venir de cette partie du code. J'ai mis une ligne Debug qui écrit dans la console pour en être sûr.
Peut être une différence de comportement entre Unity 4.6 et Unity 5.0.

Quelle version de Unity utilises-tu?
Est-ce que tu as coché "Play On Awake" pour explosion ?

Grhyll
22/05/2015, 09h28
Si tu as référencé le prefab d'explosion dans ton component, tu peux supprimer l'original de la scène, pour éviter qu'il se lance sans raison au lancement. (Et garder Play on Awake coché, pour que ça soit joué automatiquement quand tu en instancies un nouveau.)

yubaba
22/05/2015, 12h01
Le souci qui reste, c'est l’explosion au démarrage de l'application mais cela ne peut pas venir de cette partie du code. J'ai mis une ligne Debug qui écrit dans la console pour en être sûr.
Peut être une différence de comportement entre Unity 4.6 et Unity 5.0.

Quelle version de Unity utilises-tu?
Est-ce que tu as coché "Play On Awake" pour explosion ?

J'utilise Unity 4.6.
Ceci dit la personne au dessus de moi a vu juste. Si tu as explosion dans Hierarchy décoche "play on awake" ou supprime le. Par contre dans le prefab explosion tu dois cocher "play on awake".

CanardLaquais
22/05/2015, 22h23
Si tu as référencé le prefab d'explosion dans ton component, tu peux supprimer l'original de la scène, pour éviter qu'il se lance sans raison au lancement. (Et garder Play on Awake coché, pour que ça soit joué automatiquement quand tu en instancies un nouveau.)

Merci, c'était bien ça mon probléme.
En plus, au lieu de référencer le prefab explosion dans les saucisses (ScriptSaucisse), j'avais mis celui de la scène (sous Hierarchy).

Poussin Joyeux
23/08/2015, 09h37
Une saison 5 cette année? :)

Ruvon
28/03/2016, 16h46
Un dernier rush vers les noeufs !

http://img15.hostingpics.net/pics/487862OeufsdePaques.jpg (http://img15.hostingpics.net/pics/632074OeufsdePaques21.jpg)

Poussin Joyeux
28/03/2016, 17h59
Merci pour 3089!!! :lol:

Nocturno
23/08/2016, 14h19
Bonjour à tous,

une âme errante pourrait-elle me donner ou m'indiquer où trouver le user et password pour se connecter au ftp de canardpc (ftp://ftp.canardpc.com) pour télécharger les ressources de la saison 1 ?
J'ai cherché partout, épluché la saison 1 de développez couché dans les mags, mais rien, désolé je n'ai pas trouvé...

Merci