Collisions de la caméra

Fermé
CrazyGeekMan Messages postés 871 Date d'inscription dimanche 1 novembre 2015 Statut Membre Dernière intervention 29 octobre 2022 - 23 févr. 2019 à 21:15
LolixDudu Messages postés 43 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 13 avril 2019 - 13 avril 2019 à 21:37
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 :

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:

1 réponse

LolixDudu Messages postés 43 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 13 avril 2019
13 avril 2019 à 21:37
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
0