Dans mon jeu, j'ai un appareil photo et je souhaite avoir un FPS semblable à une rotation attaché à cet appareil photo.
Donc, si je déplace le curseur vers la gauche, je veux que ma caméra tourne vers la gauche. Si je déplace mon curseur vers le haut, la caméra devrait alors lever la tête, etc.
Je l'ai actuellement partiellement. Je peux regarder à gauche et à droite, de haut en bas. Le problème survient lorsque je baisse les yeux puis que je déplace mon curseur à gauche et à droite. Cela me donne alors un effet "Roll".
Regardez cette vidéo pour voir exactement ce que je veux dire: http://www.screencast.com/t/Phedh8H0K13
Évidemment, quand je baisse les yeux, je veux toujours avoir un effet "lacet" au lieu d'un effet "roulement". Quelqu'un sait-il comment faire ça? Voici ce que j'ai jusqu'à présent:
// Update is called once per frame
public override void update ()
{
this.camera.transform.rotation *=
Quaternion.AngleAxis( Time.deltaTime * sensitivityRoll * Input.GetAxis("Vertical"), Vector3.forward );
this.camera.transform.rotation *=
Quaternion.AngleAxis( Time.deltaTime * sensitivityYaw * Input.GetAxis("Mouse X"), Vector3.up );
this.camera.transform.rotation *=
Quaternion.AngleAxis( Time.deltaTime * sensitivityPitch * Input.GetAxis("Mouse Y"), Vector3.left );
}
Je viens de trouver ma réponse dans ce sujet:
http://forum.unity3d.com/threads/109250-Looking-with-the-Mouse?highlight=person+camera
Le code de ce sujet:
Code C # Mono:
using UnityEngine;
using System.Collections;
/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation
/// To make an FPS style character:
/// - Create a capsule.
/// - Add the MouseLook script to the capsule.
/// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSInputController script to the capsule
/// -> A CharacterMotor and a CharacterController component will be automatically added.
/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
/// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
public RotationAxes axes = RotationAxes.MouseXAndY;
public float sensitivityX = 15F;
public float sensitivityY = 15F;
public float minimumX = -360F;
public float maximumX = 360F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Update ()
{
if (axes == RotationAxes.MouseXAndY)
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
}
else if (axes == RotationAxes.MouseX)
{
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
}
}
void Start ()
{
//if(!networkView.isMine)
//enabled = false;
// Make the rigid body not change rotation
//if (rigidbody)
//rigidbody.freezeRotation = true;
}
}
j'ai créé 2 scripts pour mon projet FPS qui fonctionnent parfaitement pour mon mouvement (actuellement, nous n'avons pas ajouté de mécanique de saut) et il semble que vous ayez trop de complications, beaucoup de choses qui peuvent être assez simples et directes. im aussi nouveau pour coder alors corrigez-moi si je me trompe de code
// c'est dans le script du joueur que je mets sur un objet parent vide de la caméra et du lecteur Sprite
public class player : MonoBehaviour
{
[Header("player Movement")]
[SerializeField] float moveSpeed = 5f;
[SerializeField] public float mouseSensitivity = 5f;
Rigidbody rigidBody;
// Use this for initialization
void Start()
{
}
void Update()
{
Move();
}
private void Move()
{
transform.Translate(Vector3.forward * Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime);
transform.Translate(Vector3.right * Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime);
transform.Rotate(Vector3.up * Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime);
}
// c'est le script de mouvement de la caméra que j'ai mis sur la caméra (utilisera également ce script pour ajouter une fonction permettant de passer de la 1ère personne à la 3ème personne pour certaines capacités)
{
player player;
// Use this for initialization
void Start()
{
player = FindObjectOfType<player>();
}
// Update is called once per frame
void Update()
{
MoveView();
}
private void MoveView()
{
transform.Rotate(Vector3.left * Input.GetAxis("Mouse Y") * player.mouseSensitivity * Time.deltaTime);
}
}