Collision pas au top

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Collision pas au top

Message par boubouk50 » 01 Sep 2017 12:06

1/ Désactivation temporaire du Collider d'un objet touché?
2/ Un objet touché est déclaré 'touché' (via booléen publique) dans le OnCollider/TriggerEnter ()? Cette variable est réinitialisée par le gameObject touché à partir d'un certain temps.
3/ Récupération des colliders touchés dans une liste -> test?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: Collision pas au top

Message par E3DStef » 01 Sep 2017 16:24

Oui plutot le 1)

Le but recherché est de comptabiliser le nombre de fois que ma voiture touche un mur, un pieton, une barrière.
Ors quand je touche, les GO se touchent x fois et je ne veux compter que = 1 fois

Mais ton idée de désactiver le collider/trigger me semble direct une bonne piste.
Je pourrai le réactiver quand je serai à x pixels de lui (et ainsi détecter une 2e touche du mm GO) ^^

Ce qui m'amène une autre question : Peux-t-on identifier un collider en particulier quand son GO en as plusieurs ?

Genre dé à 6 faces à qui on mets 6 colliders et qu'on laisse tomber.
Comment connaitre la face touchée vu que c'est le mm GO qui a 6 colliders différents ?

Merci de vos éclaircissements.

A+
Stef
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Collision pas au top

Message par boubouk50 » 01 Sep 2017 17:07

Ne pas mettre les Colliders sur le même GO, mais faire des enfants peut être une solution.
Créer une liste des Colliders du GO puis comparer le Collider touché avec ceux de la liste peut-être.

Comme l'information reçu est le Collider touché, celui-ci n'a pas d'information propre.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Collision pas au top

Message par cortoh » 02 Sep 2017 11:10

J'ai trouvé une solution pour rectifier la postion de mon cube.
J'ai creé une variable int qui me donne la position en cours de mon cube, une fois que mon cube c'est arrêté je récupère la valeur int pour repositionner mon cube, ex: si mon cube c'est arrêté sur une position de 3.056, je peux avec la valeur entière le repositionner en 3 et ça fonctionne très bien, cela dit je n'arrive pas à le transcrire en C# car Unity n'accepte pas la variable int et m'oblige à utiliser un float, y a t-il un moyen de convertir éventuellement le float en int ou une autre solution ?
Merci.

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: Collision pas au top

Message par E3DStef » 02 Sep 2017 11:25

cortoh a écrit :
02 Sep 2017 11:10
y a t-il un moyen de convertir éventuellement le float en int ou une autre solution ?
Dans ce genre de besoin le plus simple est de chercher du coté des ToInt.

Une simple recherche "unity3d c# float to int" m'a donnée plusieurs résultats dont :


floatVariable.ToString

Code : Tout sélectionner

floatVariable.ToString ("0")

//this displays only full numbers, if you put "0.0" instead it would 
//display numbers with just one decimal
> source : https://forum.unity3d.com/threads/conve ... ger.27511/


Mathf.RoundToInt

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Example() {
        Debug.Log(Mathf.RoundToInt(10.0F));
        Debug.Log(Mathf.RoundToInt(10.2F));
        Debug.Log(Mathf.RoundToInt(10.7F));
        Debug.Log(Mathf.RoundToInt(10.5F));
        Debug.Log(Mathf.RoundToInt(11.5F));
        Debug.Log(Mathf.RoundToInt(-10.0F));
        Debug.Log(Mathf.RoundToInt(-10.2F));
        Debug.Log(Mathf.RoundToInt(-10.7F));
        Debug.Log(Mathf.RoundToInt(-10.5F));
        Debug.Log(Mathf.RoundToInt(-11.5F));
    }
}
> source : https://docs.unity3d.com/ScriptReferenc ... ToInt.html


Perso j'utilisais la 2e solution (extraite de la doc) ou Mathf.FloorToInt mais la 1ere me semble réellement intéressante.
A+

Stef
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Collision pas au top

Message par cortoh » 02 Sep 2017 13:05

j'ai testé avec

Code : Tout sélectionner

int myfloat = (int) posiEnCours;
ça fonctionne pas mal, merci pour les liens.
Dernière édition par cortoh le 02 Sep 2017 13:32, édité 1 fois.

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

Re: Collision pas au top

Message par Max » 02 Sep 2017 13:20

Bonjour,

ToString() te produira une chaine de caractères. C'est pas ce que tu cherches.

donc pour toi, les options possibles de base:

Code : Tout sélectionner

float posiEnCours;
posiEnCours = conteneurcube.transform.localPosition.z;

int localZ = Mathf.FloorToInt(posiEnCours); // sans arrondi
(ou)
int localZ = Mathf.RoundToInt(posiEnCours); // avec arrondi
(ou)
int localZ = (int) posiEnCours;
Voilou ;)
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

cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Collision pas au top

Message par cortoh » 02 Sep 2017 14:10

Dans la console j'ai bien la confirmation que ma variable est convertie en int mais je n'arrive pas à la récupérer pour repositionner le cube, est-ce que c'est parce ce que je suis dans la fonction Trigger ? je pensais faire

Code : Tout sélectionner

conteneurcube.transform.position.z = int myfloat;


Mon code C#;

Code : Tout sélectionner

public float posiEnCours;		
public int speed = 3;
public int action;
public int contact;
public Transform conteneurcube;

void OnMouseDown() {

	if (contact == 0) {
	action = 1;

	}
	}

void OnTriggerEnter() {
	
	contact = 1;
	action = 0;

	posiEnCours = conteneurcube.transform.localPosition.z;  // Console affiche: 3.036288
	int myfloat = (int) posiEnCours; // Conversion
	print (myfloat); // Console affiche: 3 (c'est ok)
	conteneurcube.transform.position.z = int myfloat; // ?§!!!

	}

void OnTriggerExit() {

	contact = 0;

	}

	void Update() {

	if (action == 1) {
	conteneurcube.transform.Translate(Vector3.forward * speed * Time.deltaTime);

	}
	}
	}


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

Re: Collision pas au top

Message par Max » 02 Sep 2017 14:20

pourquoi le 'int' devant myfloat ?
dans ce cas tu devrais écrire

Code : Tout sélectionner

conteneurcube.transform.position.z = myfloat;
Sinon, dans le nommage de tes données, petit conseil en passant, essais d'être plus rigoureux.
Tu nommes un int avec "myfloat". Cela ne peut qu'apporter de la confusion. Si je parcours rapidement ton code, en lisant cette ligne je m'attends à ce que 'myfloat' soit ... un float.
Dans tes codes, qui seront au fil du temps de plus en plus important, tu te rendra compte de l'importance que cela a, pour toi, mais aussi pour tous ceux qui seront amené à les lire ;)
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

Avatar de l’utilisateur
E3DStef
Administrateur
Administrateur
Messages : 1646
Inscription : 14 Juil 2013 18:30
Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/

Re: Collision pas au top

Message par E3DStef » 02 Sep 2017 14:47

Max a écrit :
02 Sep 2017 14:20
tu te rendra compte de l'importance
(...) des règles de nommage
+1 @Max
Le Savoir n'est Précieux que s'il est Partagé

Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com

Verrouillé

Revenir vers « (Js) Javascript »