Page 3 sur 4

Re: Collision pas au top

Publié : 02 Sep 2017 15:32
par cortoh
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:

Re: Collision pas au top

Publié : 02 Sep 2017 15:48
par Max
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;

Re: Collision pas au top

Publié : 02 Sep 2017 17:04
par cortoh
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

Publié : 02 Sep 2017 17:07
par Max
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é ?

Re: Collision pas au top

Publié : 02 Sep 2017 17:23
par cortoh

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

Publié : 02 Sep 2017 17:24
par Max
remplace

Code : Tout sélectionner

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

Code : Tout sélectionner

Vector3 localPosition = conteneurcube.transform.localPosition;

Re: Collision pas au top

Publié : 02 Sep 2017 17:42
par cortoh
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 !

Re: Collision pas au top

Publié : 04 Sep 2017 08:54
par E3DStef
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

Re: Collision pas au top

Publié : 07 Sep 2017 19:19
par cortoh
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 //////////////////////////////////////////////////////////////////////////////

Re: Collision pas au top

Publié : 08 Sep 2017 10:31
par Moi 1971
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.