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
cortoh
Messages : 159
Inscription : 22 Nov 2014 23:05

Re: Collision pas au top

Message par cortoh » 02 Sep 2017 15:32

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 :pleur4:

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 15:48

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:

Code : Tout sélectionner

	Vector3 localPosition = conteneurcube.transform.localPosition.z;  
	int iposZ = (int) localPosition.z; // Conversion
	localPosition.z = (float) iposZ;
	conteneurcube.transform.position = localPosition;
mais si j'ai bien compris ce que tu cherches à faire, tu peux à écrire:

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;
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 17:04

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'

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 17:07

cortoh a écrit :
02 Sep 2017 17:04
toujours une erreur: Assets/TestCube.cs(41,65): error CS0029: Cannot implicitly convert type `float' to `UnityEngine.Vector3'
tu as le code que tu as employé ?
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 17:23

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);

	}
	}
	}


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 17:24

remplace

Code : Tout sélectionner

Vector3 localPosition = conteneurcube.transform.localPosition.z;  
par

Code : Tout sélectionner

Vector3 localPosition = conteneurcube.transform.localPosition;
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 17:42

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 !

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 » 04 Sep 2017 08:54

cortoh a écrit :
02 Sep 2017 17:42
Un gros merci pour le coup de pouce !
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

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

Re: Collision pas au top

Message par cortoh » 07 Sep 2017 19:19

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:

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 //////////////////////////////////////////////////////////////////////////////

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Collision pas au top

Message par Moi 1971 » 08 Sep 2017 10:31

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.

Verrouillé

Revenir vers « (Js) Javascript »