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
Re: Collision pas au top
Oui, je fait habituellement attention au nom de mes variables mais là j'ai fait vite car ça me prend la tête à certain moment mais c'est bien de le rappeler au débutant.
Pour le int devant myfloat c'est une faute (copier/coller) et je n'ai pas relu, de toute facon ça ne fonction pas plus en le retirant, j'ai une erreur: Assets/TestCube.cs(40,36): error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable. c'est pas faute de faire des efforts j'ai réussi à écrire un script en JS qui fonctionne et maintenant que je tente le C# je galère à nouveau
Pour le int devant myfloat c'est une faute (copier/coller) et je n'ai pas relu, de toute facon ça ne fonction pas plus en le retirant, j'ai une erreur: Assets/TestCube.cs(40,36): error CS1612: Cannot modify a value type return value of `UnityEngine.Transform.position'. Consider storing the value in a temporary variable. c'est pas faute de faire des efforts j'ai réussi à écrire un script en JS qui fonctionne et maintenant que je tente le C# je galère à nouveau
Re: Collision pas au top
arf, j'ai pas fait attention. En effet, contrairement au JS, tu ne peux pas changer directement les valeur de position de ton transform.
Il faut passer par une variable temporaire (comme suggéré dans le message d'erreur).
par exemple:
mais si j'ai bien compris ce que tu cherches à faire, tu peux à écrire:
Il faut passer par une variable temporaire (comme suggéré dans le message d'erreur).
par exemple:
Code : Tout sélectionner
Vector3 localPosition = conteneurcube.transform.localPosition.z;
int iposZ = (int) localPosition.z; // Conversion
localPosition.z = (float) iposZ;
conteneurcube.transform.position = localPosition;
Code : Tout sélectionner
Vector3 localPosition = conteneurcube.transform.localPosition;
localPosition.z = (int) localPosition.z; // ou (float) ( (int)localPosition.z ); pour s'astreindre aux casts et conversions explicites.
conteneurcube.transform.position = localPosition;
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
Oui, c'est exactement ce que je veux faire et ce que tu as écrit correspond bien et reste ma fois pertinent, j'ai inseré l'ensemble dans le trigger mais ça ne fonctionne toujours pas, toujours une erreur: Assets/TestCube.cs(41,65): error CS0029: Cannot implicitly convert type `float' to `UnityEngine.Vector3'
Re: Collision pas au top
tu as le code que tu as employé ?
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
Code : Tout sélectionner
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;
Vector3 localPosition = conteneurcube.transform.localPosition.z;
localPosition.z = (int) localPosition.z; // ou (float) ( (int)localPosition.z ); pour s'astreindre aux casts et conversions explicites.
conteneurcube.transform.position = localPosition;
}
void OnTriggerExit() {
contact = 0;
}
void Update() {
if (action == 1) {
conteneurcube.transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
}
Re: Collision pas au top
remplace
par
Code : Tout sélectionner
Vector3 localPosition = conteneurcube.transform.localPosition.z;
Code : Tout sélectionner
Vector3 localPosition = conteneurcube.transform.localPosition;
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
Oui, ça fonctionne parfaitement, autand j'ai pas trop peiner à réaliser cette bidouille en JS que là en C# je n'aurais jamais pu y arriver sans aide, cela dit c'est bizarre de devoir passer par ce genre d'astuce pour régler ce genre de probleme qui n'est pas important pour fps par exemple mais dans mon cas plusieurs cubes vont se croiser et se toucher à plusieurs reprise d'ou la néccessité d'etre précis quand à leur position.
Un gros merci pour le coup de pouce !
Un gros merci pour le coup de pouce !
- 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
Si ton problème est résolu, penses à le mettre en [RESOLU] ....
Sujet intéressant ^^
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
Bonsoir,
J'ai mis le post en (Résolu) mais il s'avère que je rencontre un autre problème, merci de me dire si je dois refaire un autre post ou modifier le titre.
Ma premiere partie devait faire que mon cube se déplace et s'arrete quand il rencontre un mur avec une rectification de la position qui n'était pas terrible ce qui était le motif inital du post et çà fonctionne parfaitement quelque soit la direction du cube.
Alors j'ai passé une semaine complète à tester et tenter de solutionner mon problème mais en vain rien à faire.
Voici le topo, j'ai pour la suite de mon jeu dupliqué le cube qui se déplace (Il y en aura plusieurs), donc j'ai dans la scène maintenant deux cubes qui sont sensés se rencontrer c'est là que mon problème commence, pour donner un exemple précis du problème rencontré, j'ai le cube 1 qui est en Z -4 et le cube 2 en position Z -1 quand mon cube 1 se déplace et qu'il touche le cube 2, le cube 1 rentre dans le cube 2 ?! suite à des tests j'ai laissé le cube 1 en position Z -4 mais j'ai placé le cube 2 en Z 2 dans ce cas le cube 1 s'arrete parfaitement devant le cube 2, le problème est identique dans les déplacement dans l'axe X, donc pour résumer mes tests un départ dans une position négative doit avoir un arret dans une valeur positive pour que ça fonctionne et vis versa un départ dans une valeur positive doit s'arreter dans une valeur négative pour que ça fonctionne.
Vous pouvez me dire d'ou viens le problème ?
Merci.
Mon code pour un déplacement dans l'axe Z:
J'ai mis le post en (Résolu) mais il s'avère que je rencontre un autre problème, merci de me dire si je dois refaire un autre post ou modifier le titre.
Ma premiere partie devait faire que mon cube se déplace et s'arrete quand il rencontre un mur avec une rectification de la position qui n'était pas terrible ce qui était le motif inital du post et çà fonctionne parfaitement quelque soit la direction du cube.
Alors j'ai passé une semaine complète à tester et tenter de solutionner mon problème mais en vain rien à faire.
Voici le topo, j'ai pour la suite de mon jeu dupliqué le cube qui se déplace (Il y en aura plusieurs), donc j'ai dans la scène maintenant deux cubes qui sont sensés se rencontrer c'est là que mon problème commence, pour donner un exemple précis du problème rencontré, j'ai le cube 1 qui est en Z -4 et le cube 2 en position Z -1 quand mon cube 1 se déplace et qu'il touche le cube 2, le cube 1 rentre dans le cube 2 ?! suite à des tests j'ai laissé le cube 1 en position Z -4 mais j'ai placé le cube 2 en Z 2 dans ce cas le cube 1 s'arrete parfaitement devant le cube 2, le problème est identique dans les déplacement dans l'axe X, donc pour résumer mes tests un départ dans une position négative doit avoir un arret dans une valeur positive pour que ça fonctionne et vis versa un départ dans une valeur positive doit s'arreter dans une valeur négative pour que ça fonctionne.
Vous pouvez me dire d'ou viens le problème ?
Merci.
Mon code pour un déplacement dans l'axe Z:
Code : Tout sélectionner
// VARIABLES //////////////////////////////////////////////////////////////////////////////
int speed = 3;
public int action;
public int contact;
public Transform conteneurcube;
// ACTIVER LE CUBE //////////////////////////////////////////////////////////////////////////////
void OnMouseDown() {
if (contact == 0) {
action = 1;
}
}
// ON TRIGGER ENTER //////////////////////////////////////////////////////////////////////////////
void OnTriggerEnter() {
contact = 1;
action = 0;
Vector3 localPosition = conteneurcube.transform.localPosition;
localPosition.z = (int) localPosition.z;
conteneurcube.transform.position = localPosition;
}
// ON TRIGGER EXIT //////////////////////////////////////////////////////////////////////////////
void OnTriggerExit() {
contact = 0;
}
// UPDATE //////////////////////////////////////////////////////////////////////////////
void Update() {
if (action == 1) {
conteneurcube.transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
} // FIN UPDATE //////////////////////////////////////////////////////////////////////////////
} // FIN SCRIPT //////////////////////////////////////////////////////////////////////////////
Re: Collision pas au top
Bonjour,
Il ne faut pas gérer le déplacement en fonction des positions, mais en fonction des distances.
NE PAS FAIRE :
Si ( position de 1 == position de 2 ) Alors ....
FAIRE :
Si ( ValeurAbsolue de position de 1 - ValeurAbsolue de position de 2 ) < 1 Alors ...
Bonne continuation.
Il ne faut pas gérer le déplacement en fonction des positions, mais en fonction des distances.
NE PAS FAIRE :
Si ( position de 1 == position de 2 ) Alors ....
FAIRE :
Si ( ValeurAbsolue de position de 1 - ValeurAbsolue de position de 2 ) < 1 Alors ...
Bonne continuation.