Premier post sur ce forum. J'apprends à développer sur Unity en C# en autodidacte depuis peu, et je suis confronté à un problème que je n'arrive pas à résoudre. Le script est assez basique, mais je ne comprends ce qu'il se produit dans Unity pour amener à ce résultat (voir vidéo).
Je cherche à déplacer la caméra à la façon d'un "cliqué déplacé", en calculant le mouvement depuis les coordonnées issues du RaycastHit sur le terrain.
Malheureusement ça ne fonctionne pas car cela entraine des mouvements saccadés de la caméra. Il n'y a pas de contrainte appliquée à la caméra, qui est libre et sans parent.
https://youtu.be/cyrrpI78gqQ
Est-ce que vous voyez d'où le problème peut venir ?
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
Vector3 worldPositionStart;
Vector3 worldPosition;
Vector3 worldDirection;
void Start ()
{
// Rigidbody camRigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
// Obtenir la position initiale de la cible dans l'espace
if (Input.GetMouseButtonDown(0))
{
Ray rayStart = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitDataStart;
Debug.Log("Clic gauche");
if (Physics.Raycast(rayStart, out hitDataStart))
{
worldPositionStart = hitDataStart.point;
}
}
// Obtenir la direction du mouvement dans l'espace
if (Input.GetMouseButton(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitData;
if (Physics.Raycast(ray, out hitData))
{
worldPosition = hitData.point;
}
worldDirection = worldPositionStart - worldPosition;
}
// Translation de la caméra
this.transform.position = new Vector3(worldDirection.x, this.transform.position.y, worldDirection.z);
Debug.Log(this.transform.position);
}
}