ça marche, sauf que parfois (pas toujours), le joueur se met à pivoter doucement sur l'axe y, alors que j'ai désactivé le mouvement du joueur et bloqué la caméra.
Voici le script MoveTowardsCamera :
Code : Tout sélectionner
using UnityEngine;
public class MoveTowardsCamera : MonoBehaviour
{
public float speed = 1f; // Vitesse à laquelle l'objet se rapproche
public Transform targetCamera; // La caméra vers laquelle l'objet se rapproche
public float stopDistance = 1f; // Distance minimale à laquelle l'objet doit s'arrêter par rapport à la caméra
void Start()
{
// Si aucune caméra n'est assignée manuellement, utiliser la caméra principale
if (targetCamera == null)
{
if (Camera.main != null)
{
targetCamera = Camera.main.transform;
}
else
{
Debug.LogError("No main camera found. Please assign a camera to the targetCamera field.");
Destroy(this);
}
}
}
void Update()
{
// Calculer la distance actuelle entre l'objet et la caméra
float distanceToCamera = Vector3.Distance(transform.position, targetCamera.position);
// Si l'objet est plus loin que la distance minimale définie, continuer à le rapprocher
if (distanceToCamera > stopDistance)
{
// Calculer la direction vers la caméra
Vector3 directionToCamera = (targetCamera.position - transform.position).normalized;
// Déplacer l'objet dans cette direction à la vitesse définie
transform.position += directionToCamera * speed * Time.deltaTime;
}
}
}
Code : Tout sélectionner
using UnityEngine;
public class mouseRotate : MonoBehaviour
{
public float sensitivityX = 360f;
public float sensitivityY = 360f;
private float rotationX = 0f;
private float rotationY = 0f;
void Start()
{
// Pas besoin de référence de la caméra, on veut que l'objet tourne indépendamment.
}
void Update()
{
// Récupérer les mouvements de la souris pour X et Y
float mouseX = Input.GetAxis("Mouse X") * sensitivityX * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * sensitivityY * Time.deltaTime;
// Ajouter les mouvements de la souris aux variables de rotation
rotationX += mouseX;
rotationY -= mouseY; // On inverse l'axe Y
// Appliquer les rotations sur l'objet indépendamment
//rotationY = Mathf.Clamp(rotationY, -80f, 80f); // Limite la rotation sur l'axe Y
// Appliquer la rotation uniquement à l'objet, sans affecter le joueur ni la caméra
transform.localRotation = Quaternion.Euler(rotationY, rotationX, 0f);
}
}