[RESOLU][DB-AL] Pb script AddForce et Collision

Pour les scripts écrits en C#
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
Kazuma17
Messages : 33
Inscription : 29 Août 2017 15:56

[RESOLU][DB-AL] Pb script AddForce et Collision

Message par Kazuma17 » 25 Juil 2018 15:08

Bonjour !

Je viens vers vous car j'ai un soucis dans mon script, que je n'arrive pas à résoudre malgré avoir retourné tous les forums d'Internet :lol:

J'ai une caméra à déplacer librement dans ma scène. Aucun problème, voici mon script :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMoveScript : MonoBehaviour {

	public int speed = 7;
	private float H;
	private float V;
	private Vector3 rotateValue;

	void Update()
	{
		H = Input.GetAxis ("Horizontal");
		V = Input.GetAxis ("Vertical");
	}

	void FixedUpdate()
	{
		//___________deplacement______________

		//right
		if (Input.GetKey (KeyCode.D)) {
			transform.Translate(1*speed*Time.deltaTime,0,0);
			Debug.Log ("speed is" + speed);
		}
		//left
		if (Input.GetKey (KeyCode.Q)) {
			transform.Translate(-1*speed*Time.deltaTime,0,0);		}
		//forward
		if (Input.GetKey (KeyCode.Z)) {
			transform.Translate(0,0,1*speed*Time.deltaTime);		}
		//backward
		if (Input.GetKey (KeyCode.S)) {
			transform.Translate(0,0,-1*speed*Time.deltaTime);		}

		//___________rotation______________

		if ((Input.GetKey (KeyCode.D)) || (Input.GetKey (KeyCode.Z)) || (Input.GetKey (KeyCode.Q)) || (Input.GetKey (KeyCode.S) ) || (Input.GetKey (KeyCode.Mouse0) )) {
			H = Input.GetAxis("Mouse X");
			V = Input.GetAxis("Mouse Y");
			rotateValue = new Vector3(V, H*-1, 0);
			transform.eulerAngles = transform.eulerAngles - rotateValue;}
	}
}
Seulement, ma caméra passe ENTIEREMENT à travers les murs malgré un Box collider (sans Trigger bien sûr) sur mon mur ET sur ma caméra, ainsi qu'un rigidbody pour les deux en Is Kinematic et sans gravité.

Après recherches j'ai cru comprendre que sa venait du transform.translate qui me fait passer derrière ma box collider. J'ai donc tenté d'agrandir la boite de collision de mon mur à fond et de mettre le "Collision detection" en "Continuous dynamic" pour les deux. Rien n'y fait.

J'ai vu d'autres personnes utiliser le "rigidbody.AddForce" pour gérer ce problème de "surpassement" de la box collider. Seulement je dois mal m'y prendre, ou ne sais pas comment utiliser cette fonction mais je n'arrive jamais à déplacer ma caméra de cette manière.
C'est donc pour ça que j'ai besoin de votre aide pour comprendre comment on l'utilise, les exemples que je trouve ne sont pas adaptés à mon cas ou ne fonctionne pas chez moi.

Ptete que ce problème de Collider n'a rien à voir avec le transform.translate, mais je le saurai qu'en essayant avec le AddForce. Bref, voici mon code :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraMoveScript : MonoBehaviour {

	public int speed = 7;
	private float H;
	private float V;
	private Vector3 rotateValue;

	void FixedUpdate()
	{
		H = Input.GetAxis ("Horizontal");
		V = Input.GetAxis ("Vertical");
		
		//___________deplacement______________

		//right
		if (Input.GetKey (KeyCode.D)) {
			GetComponent<Rigidbody> ().AddForce (Vector3.right * speed);
		}
		//left
		if (Input.GetKey (KeyCode.Q)) {
			GetComponent<Rigidbody> ().AddForce (-Vector3.right * speed);
		}	
		//forward
		if (Input.GetKey (KeyCode.Z)) {
			GetComponent<Rigidbody> ().AddForce (Vector3.forward * speed);
		}	
		//backward
		if (Input.GetKey (KeyCode.S)) {
			GetComponent<Rigidbody> ().AddForce (-Vector3.forward * speed);
		}

		//___________rotation______________

		if ((Input.GetKey (KeyCode.D)) || (Input.GetKey (KeyCode.Z)) || (Input.GetKey (KeyCode.Q)) || (Input.GetKey (KeyCode.S) ) || (Input.GetKey (KeyCode.Mouse0) )) {
			H = Input.GetAxis("Mouse X");
			V = Input.GetAxis("Mouse Y");
			rotateValue = new Vector3(V, H*-1, 0);
			transform.eulerAngles = transform.eulerAngles - rotateValue;}
	}
}
Ce doit être tout con mais je bloque depuis un moment et je trouve pas l'info. Merci ! ;-)
Dernière édition par Kazuma17 le 31 Juil 2018 13:05, édité 1 fois.

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

Re: [DB-AL] Pb script AddForce et Collision

Message par boubouk50 » 25 Juil 2018 15:40

Effectivement, pour les rigidbodies, il vaut mieux utiliser la physique et les AddForces. Les collisions seront gérées par le moteur physique.
Néanmoins, tu peux ne pas utiliser ce système et tester toi-même les collisions.
Je te conseille de télécharger le Standard Assets d'Unity Technologies sur l'Asset Store et de voir comment cela est fait. Ils passent par le CharacterController pour les déplacements (Move) et testent les collisions avec un SphereCast.
C'est bien plus compliqué que de simplement mapper des touches comme tu le fais.
"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
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL] Pb script AddForce et Collision

Message par Max » 25 Juil 2018 19:19

Hello,

@Kazuma17: juste quelques précisions techniques par rapport à ce que tu exposes dans ton message:
- sur les éléments fixes (comme le décor), tu n'a pas à mettre de Rigidbody, les colliders suffisent.
- concernant les éléments liés à ta camera, si tu est en isKinematic, comme le souligne la doc, tout ce qui est AddForce et consœur n'auront aucun effet. Même les déplacement type Translate te feront passer à travers (If isKinematic is enabled, Forces, collisions or joints will not affect the rigidbody anymore.).
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

Kazuma17
Messages : 33
Inscription : 29 Août 2017 15:56

Re: [DB-AL] Pb script AddForce et Collision

Message par Kazuma17 » 31 Juil 2018 13:05

Hello,

Merci pour les précisions il me manquait ce petit point de détail pour la caméra, et pour le script je n'avais pas pensé à regarder dans les Standard Asset, merci beaucoup ! :-D

Répondre

Revenir vers « (C#) CSharp »