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