Collision pas au top
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
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
- boubouk50
- ModoGenereux
- Messages : 6255
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Collision pas au top
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?
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- E3DStef
- Administrateur
- Messages : 1646
- Inscription : 14 Juil 2013 18:30
- Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/
Re: Collision pas au top
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 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
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
- boubouk50
- ModoGenereux
- Messages : 6255
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Collision pas au top
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.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Collision pas au top
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.
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.
- E3DStef
- Administrateur
- Messages : 1646
- Inscription : 14 Juil 2013 18:30
- Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/
Re: Collision pas au top
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
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));
}
}
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
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com
Re: Collision pas au top
j'ai testé avec ça fonctionne pas mal, merci pour les liens.
Code : Tout sélectionner
int myfloat = (int) posiEnCours;
Dernière édition par cortoh le 02 Sep 2017 13:32, édité 1 fois.
Re: Collision pas au top
Bonjour,
ToString() te produira une chaine de caractères. C'est pas ce que tu cherches.
donc pour toi, les options possibles de base:
Voilou
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;
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
Re: Collision pas au top
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
Mon code C#;
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);
}
}
}
Re: Collision pas au top
pourquoi le 'int' devant myfloat ?
dans ce cas tu devrais écrire 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
dans ce cas tu devrais écrire
Code : Tout sélectionner
conteneurcube.transform.position.z = myfloat;
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
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
- E3DStef
- Administrateur
- Messages : 1646
- Inscription : 14 Juil 2013 18:30
- Localisation : https://www.carte-des-membres.com/fr/Unity3D-France/
Re: Collision pas au top
(...) 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
Si besoin urgent de me contacter, faites moi un mail sur : franceunity3d@gmail.com