CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • Black Friday
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : J'aide les gens dans Unity

DébutPage précedente
«1  ... 7879808182838485868788  ... 180»
Page suivanteFin
aurock aurock
MP
Niveau 12
23 novembre 2015 à 12:48:13

Bonjour,

Je viens pour vous demandez un conseil ou une aide.

Je suis sur un petit projet de jeu de gestion 2D, mais une chose me chiffone, j'ai une scene ou il y une liste de matériaux, donc j'affiche 4 choses par materiau, le nom, le stock, un bouton d'achat et un autre de vente. Donc 4 objet par materiaux, c'est assez fastidieux à mettre en place , j'en ai que 2 pour l'instant vu que cette partie marche bien je planche sur le reste ( au final c'est du bete copier coller pour en rajouter )

Mais je trouve que ma scene se charge vite en objet et admettons que je voudrais mettre une 20aine de materiaux ça va vite devenir bordelique. Donc y'a-t-il une méthode pour allégé tout ça ?

https://gyazo.com/cdd53f8f1f50bcff526e87e6eaaf04eb je vous laisse un screen pour vous aidez à visualiser.

Merci d'avance !

gorz94 gorz94
MP
Niveau 6
23 novembre 2015 à 12:53:55

Tu peux utiliser un slider, ou regrouper des matériaux

aurock aurock
MP
Niveau 12
23 novembre 2015 à 13:18:46

C'est à dire ?

Le slider servirait à quoi ici ?
Et quand tu dis regrouper les matériaux, faire un dossier avec un gameobject vide ?

gorz94 gorz94
MP
Niveau 6
23 novembre 2015 à 16:18:00

Ce que j'ai compris, c'est que quand t'auras trop de matériaux, ça va saturer l'écran, non ?
Si c'est ça, le slider te permettrait de faire défiler l'affichage de tes matériaux.

aurock aurock
MP
Niveau 12
23 novembre 2015 à 16:42:08

Je me suis mal exprimé du coup désolé, j'ai penser au slider effictivement, mon problème est en fait au niveau de hierarchy et en général dans la conception ( pas dans le jeu quoi ) ça fait beaucoup d'élément répété.

Dans le code quand tu répètes trop de fois le même bout de code tu en fais une fonction par exemple.

Je voulais savoir si je pouvais amélioré la façon de faire mes boutons et text etc pour que ça soit moins lourd.

J'espère que je me suis mieux exprimé cette fois, merci d'essayer de m'aider en tout cas :)

aurock aurock
MP
Niveau 12
23 novembre 2015 à 18:04:37

J'en profite pour vous poser une autre question.

J'ai fait un script d'achat, quand je clique sur un bouton sa increment et decremente des variables etc, j'aimerais qu'a chaque fois que j'appuie sur le bouton et qu'un achat est effectuer, un message s'affiche dans une zone pour indiquer au joueur son action.

J'ai tenter un bête code, comme si je modifiais simplement un texte mais je dois mal m'y prendre car unity me retourne un joli NullReferenceException: Object reference not set to an instance of an object.

	public UnityEngine.UI.Text ControlText;

	void FAchat (string mat, ref int m, ref int ca, ref int s, ref int st, ref int sm, ref int nb, ref int dc){
		if (m > 0 && ca <= m && s > 0 && st < sm){
			m -= ca;
			s -= 1;
			st += 1;
			nb += 1;
			dc = ca;
			ControlText.text = "Vous avez acheté " + nb + " " + mat + " pour " + ca + " po !";		
		}

Voilà comment j'ai procédé. J'ai aussi une fonction cliked() dans ce script.

gorz94 gorz94
MP
Niveau 6
23 novembre 2015 à 19:26:02

Est-ce que tu as attribué ton TextMesh à ton ControlText ?

Si tu l'as pas fait, tu passes ControlText en public et tu l'assignes par l'inspector.

katk katk
MP
Niveau 10
23 novembre 2015 à 19:28:44

il faut mettre une instance du texte, soit tu mets le texte en public et tu dois le glisser soit en private et dans la void start tu mets un GetComponent

d'ailleurs je te conseille plutôt au debut du script d'utiliser Unity.Engine simplement et de mettre une public class

katk katk
MP
Niveau 10
23 novembre 2015 à 19:31:09

après sinon je comprends pas ton problème de hierarchy, crée un Canvas regroupant les textes/boutons et tu fais un seul script qui traite tout

aurock aurock
MP
Niveau 12
23 novembre 2015 à 19:56:04

Bah le soucis ( qui n'en est peut être pas vraiment un hein ! ) c'est que j'aimerais rajouter plein de materiaux mais ça va faire un paquet enorme de bouton quoi.

Sinon un script qui les génèrent tous avec une fonction ?

using UnityEngine;
using System.Collections;

public class Achat : MonoBehaviour {
	//Script qui permet l'achat de materiaux dans les villages

	public UnityEngine.UI.Text ControlText;

	void FAchat (string mat, ref int m, ref int ca, ref int s, ref int st, ref int sm, ref int nb, ref int dc){
		if (m > 0 && ca <= m && s > 0 && st < sm){
			m -= ca;
			s -= 1;
			st += 1;
			nb += 1;
			dc = ca;
			ControlText.text = "Vous avez acheté " + nb + " " + mat + " pour " + ca + " po !";		
		}
	} 

	public void Cliked(){
		if (gameObject.name == "ButtonBuyWood"){
			FAchat("bois", ref Ressource.Money, ref Ressource.CA_Bois, ref Ressource.StockBois, ref Ressource.Stockage, ref Ressource.StockageMax, ref Ressource.NbBois, ref Ressource.DernierCoutBois);
		}

		else if(gameObject.name == "ButtonBuyIron"){
			FAchat("fer", ref Ressource.Money, ref Ressource.CA_Fer, ref Ressource.StockFer, ref Ressource.Stockage, ref Ressource.StockageMax, ref Ressource.NbFer, ref Ressource.DernierCoutFer);
		}
	}
}

voilà le code complet de mon script.

J'ai bien assigné dans l'inspector. J'ai fait comme je fais d'habitude en fait, sauf que c'est la première fois que je caler ça ailleurs que dans l'Update() ou le Start() du coup j'ai pas du utiliser la bonne méthode.

katk katk
MP
Niveau 10
23 novembre 2015 à 20:41:27

ça me perturbe ta déclaration de texte
dégage le UnityEngine :hap:
public Text nom;

quand tu parles de matériaux c'est le nom des objets à acheter ?

katk katk
MP
Niveau 10
23 novembre 2015 à 21:16:57

et du coup using UnityEngine.UI en haut

aurock aurock
MP
Niveau 12
23 novembre 2015 à 21:19:46

Oui c'est des items dans le jeu.

Ah oui ok j'avais lu un truc sur ce que tu viens de me dire en faisant le rapprochement avec Python mais j'avais pas fait gaffe.

Merci.

J'ai toujours la même erreur, je commence à être fatiguer j'ai du mal a réfléchir la :(

Message édité le 23 novembre 2015 à 21:23:36 par aurock
katk katk
MP
Niveau 10
23 novembre 2015 à 21:30:11

si tu as un seul texte attaché au gameObject qui porte ton script

private Text nomDuText = gameObject.GetComponent<Text> ();
et là tu travailles avec ce texte là, c'est une instance de ton texte

aurock aurock
MP
Niveau 12
23 novembre 2015 à 21:33:51

Ok j'avais commencé à me renseigner sur ça je vais finir.

Mais en fait à ce gameObject j'aimerais y attacher tout un tas de texte issu de plusieurs script au final.

Je devrais peut être faire un script à part pour gerer ça du coup ? Peut être moins compliquer.

Merci de ton aide en tous cas.

katk katk
MP
Niveau 10
23 novembre 2015 à 21:40:16

ce qui peut être pas mal plutôt que de placer 500 texts sur ton gameObject c'est de les instancier dans le script, en prenant 4 textes de référence pour les positions/police/taille
tu peux faire des arrays (en gros listes) aussi pour les gérer plus facilement

aurock aurock
MP
Niveau 12
23 novembre 2015 à 21:44:08

Ok j'irais voir ça demain a la fraiche.

Merci encore pour ton aide !

katk katk
MP
Niveau 10
24 novembre 2015 à 22:22:01

les gens j'ai un gros problème

je suis en train de faire mon script de first person controller moi-même (j'aime pas utiliser des assets et surtout ne pas comprendre un script) en m'inspirant de l'asset, tout va bien pour le moment niveau déplacement, caméra etc sauf pour la limite de la rotation de la caméra en x.

en fait c'est pour bloquer à 90 et -90 degrés pour pas pouvoir faire des tours de rotation entiers en X(rotation sur la caméra, et celle en Y sur le player comme le first person controller asset)

donc sur l'asset ils ont fait une fonction qui tronque la valeur de la rotation en x (le quaternion q c'est celui de la caméra) :
Quaternion ClampRotationAroundXAxis(Quaternion q)
{
q.x /= q.w;
q.y /= q.w;
q.z /= q.w;
q.w = 1.0f;

float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan (q.x);

angleX = Mathf.Clamp (angleX, MinimumX, MaximumX);

q.x = Mathf.Tan (0.5f * Mathf.Deg2Rad * angleX);

return q;
}

bon déjà je suis pas familier avec les quaternions donc je ne sais absolument pas ce que représente le w, ni les /=
du coup j'ai essayé de faire comme eux en appelant la fonction pareil, mais ça fait faire n'importe quoi à la caméra (même pas descriptible, on dirait que ça oscille entre 2 rotations) quand on lance.

Du coup j'ai fait un Debug.Log(cam.transform.rotation.x), et j'obtiens :
-pour 270°(90 vers le haut) : -0.6931648
-pour 90° (90 vers le bas) : 0.6995172

et si j'ai bien compris les valeurs sont censées être des radians alors que là pas du tout (ça devrait être 1/2pi là il me semble), donc c'est plutôt inexploitable sachant que je veux utiliser deux variables pour le min et le max

j'ai aussi essayé avec les eulerAngles sauf que quand on dépasse les 90° (270 vers le haut, ou 90 vers le bas) la caméra se tourne de 180° en y et z (wtf) et l'angle en x devient croissant pour 270, et décroissant pour 90 fin c'est inexploitable

ça me prend la tête depuis des heures, quelqu'un aurait une idée de comment exploiter le x du Quaternion de ma caméra ? merci

Helliot_Ness Helliot_Ness
MP
Niveau 5
25 novembre 2015 à 00:49:32

Bonjour,

@kaTk :
Evite tant que possible de manipuler directement les quaternions.

Voici une possible solution non testée :


    /// <summary>
    /// Clamp la rotation locale sur l'axe des X de tout composant.
    /// </summary>
    /// <param name="behaviour">Le composant.</param>
    /// <param name="ClampEulerX">L'angle delta en degrés mimimum et maximum autorisé.</param>
    public void ClampRotation(Behaviour behaviour, float ClampEulerX)
    {
        Transform transformObject = behaviour.transform;
        Vector3 localEulerAngle = transformObject.localEulerAngles;

        if (localEulerAngle.x > (360f - ClampEulerX))
            localEulerAngle.x = (360f - ClampEulerX);
        else if (localEulerAngle.x > ClampEulerX)
            localEulerAngle.x = ClampEulerX;

        if (transformObject.localEulerAngles.x != localEulerAngle.x)
            transformObject.localEulerAngles = localEulerAngle;
    }

J'ai écrit cela vite fait mais le principe est la.
Cela devrait fonctionner en principe.

Helliot_Ness Helliot_Ness
MP
Niveau 5
25 novembre 2015 à 00:55:26

NB :
Bien sur dans le cas de deux valeurs minX et maxX, à toi d'adapter...

DébutPage précedente
«1  ... 7879808182838485868788  ... 180»
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?