Collisions de la caméra
CrazyGeekMan
Messages postés
971
Statut
Membre
-
LolixDudu Messages postés 45 Statut Membre -
LolixDudu Messages postés 45 Statut Membre -
Bonsoir,
Je me permets de solliciter votre aide puisque je n'arrive pas à comprendre pourquoi je n'obtiens pas le résultat voulu.
Je programme en C# sous le moteur de jeu Unity.
J'ai une caméra qui se déplace de façon autonome (elle n'est pas liée à un GameObject parent).
Cette caméra se déplace en fonction de son orientation en 3D, ZQSD pour le déplacement sur les axes x et z, EF pour les déplacements sur l'axe y.
Je n'obtient aucune collision avec d'autres objets, pourtant les nombreux objets ont bien un MeshCollider et un RigidBody.
Je voudrais tout simplement que la caméra soit bloquée par les éléments avec lesquels elle rentre en collision.
Voici le script pour le déplacement de la caméra :
J'ai bien conscience que c'est ce script qui interfère avec le bon fonctionnement des collisions.
Pour essayer de debugger j'ai mis ces lignes :
Aucun message ne s'affiche dans la console et ma caméra traverse les murs :/
Merci à celui qui prendra le temps de m'expliquer mon erreur :)
Bonne soirée !
Je me permets de solliciter votre aide puisque je n'arrive pas à comprendre pourquoi je n'obtiens pas le résultat voulu.
Je programme en C# sous le moteur de jeu Unity.
J'ai une caméra qui se déplace de façon autonome (elle n'est pas liée à un GameObject parent).
Cette caméra se déplace en fonction de son orientation en 3D, ZQSD pour le déplacement sur les axes x et z, EF pour les déplacements sur l'axe y.
Je n'obtient aucune collision avec d'autres objets, pourtant les nombreux objets ont bien un MeshCollider et un RigidBody.
Je voudrais tout simplement que la caméra soit bloquée par les éléments avec lesquels elle rentre en collision.
Voici le script pour le déplacement de la caméra :
using UnityEngine;
public class CameraController : MonoBehaviour
{
public float vitesse = 20f;
// Position de la caméra
Vector3 pos;
// Direction de vue de la caméra
Vector3 vue;
// Chemin à parcourir
Vector3 chemin;
private void Start()
{
pos = transform.position;
}
void Update()
{
vue = transform.forward;
chemin = vue * vitesse * Time.deltaTime;
if (Input.GetKey(KeyCode.Z))
pos += new Vector3(chemin.x, 0, chemin.z);
if (Input.GetKey(KeyCode.S))
pos += new Vector3(-chemin.x, 0, -chemin.z);
if (Input.GetKey(KeyCode.Q))
{
// Vecteur perpendiculaire à la direction de la vue de la caméra
Vector2 temp = Vector2.Perpendicular(new Vector2(vue.x, vue.z));
// Changement du repère de déplacement de la caméra
vue = new Vector3(temp.x, 0, temp.y);
chemin = vue * vitesse * Time.deltaTime;
pos += new Vector3(chemin.x, 0, chemin.z);
}
if (Input.GetKey(KeyCode.D))
{
Vector2 temp = Vector2.Perpendicular(new Vector2(vue.x, vue.z));
vue = new Vector3(temp.x, 0, temp.y);
chemin = vue * vitesse * Time.deltaTime;
pos += new Vector3(-chemin.x, 0, -chemin.z);
}
if (Input.GetKey(KeyCode.E))
pos.y += vitesse * Time.deltaTime;
if (Input.GetKey(KeyCode.F))
pos.y -= vitesse * Time.deltaTime;
transform.position = pos;
}
}
J'ai bien conscience que c'est ce script qui interfère avec le bon fonctionnement des collisions.
Pour essayer de debugger j'ai mis ces lignes :
void OnCollisionEnter(Collision collision)
{
Debug.Log("test");
}
Aucun message ne s'affiche dans la console et ma caméra traverse les murs :/
Merci à celui qui prendra le temps de m'expliquer mon erreur :)
Bonne soirée !
A voir également:
- Collisions de la caméra
- La caméra ne fonctionne pas - Guide
- Camera pc windows 7 - Télécharger - TV & Vidéo
- Camera espion salle de bain - Accueil - Confidentialité
- Pilote camera logitech - Télécharger - Pilotes & Matériel
- Camera assistant samsung - Accueil - Téléphones
1 réponse
Il faut que tu utilises la fonction transform.Translate.
En utilisant transform.position, ta camera se téléporte en fait, tu ne le vois pas car c'est minime
Voila un peu de doc :
https://docs.unity3d.com/ScriptReference/Transform.Translate.html
PS: oublie pas * Time.deltaTime pour que ce soit smooth
En utilisant transform.position, ta camera se téléporte en fait, tu ne le vois pas car c'est minime
Voila un peu de doc :
https://docs.unity3d.com/ScriptReference/Transform.Translate.html
PS: oublie pas * Time.deltaTime pour que ce soit smooth