Unity 3D – Cliquer pour observer

clip_image002

Dans les logiciels 3D, le bouton gauche est enfoncé pour observer. Pour déclencher une action, il faut libérer le bouton, positionner la souris au niveau de la zone sensible et cliquer. Ces actions, devenue naturelles, n’existent pas en standard dans Unity de fait de l’héritage « jeux vidéo ». Il faudra dès lors ajouter un script qui modifiera l’ergonomie de base du logiciel.

clip_image004

Le script va s’appliquer sur l’objet « first person controller ». Cet objet est composé de la capsule décrivant l’encombrement du personnagle et de la caméra (Main Camera) restituant le point de vue. L’ensemble est combiné dans un objet parent le « First Person Controller ».

clip_image005

Le script va s’appliquer à deux niveaux différents : le niveau First Person Controller pour la gestion des axes X et dans le Main Camera pour la gestion des axes Y

Créer un script C# et dans Monodevelop copier ci-dessous.

Le script est le suivant :

 
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 a rigid body to the 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 FPSWalker script to the capsule
 
/// - 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 MouseLookClick : 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 rotationX = 0F;
 
float rotationY = 0F;
 
Quaternion originalRotation;
 
void Update ()
 
{
 
if (axes == RotationAxes.MouseXAndY)
 
{
 
if(Input.GetMouseButton(0))
 
{
 
// Read the mouse input axis
 
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
 
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
 
rotationX = ClampAngle (rotationX, minimumX, maximumX);
 
rotationY = ClampAngle (rotationY, minimumY, maximumY);
 
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
 
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
 
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
 
}
 
}
 
else if (axes == RotationAxes.MouseX)
 
{
 
if(Input.GetMouseButton(0))
 
{
 
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
 
rotationX = ClampAngle (rotationX, minimumX, maximumX);
 
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
 
transform.localRotation = originalRotation * xQuaternion;
 
}
 
}
 
else
 
{
 
if(Input.GetMouseButton(0))
 
{
 
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
 
rotationY = ClampAngle (rotationY, minimumY, maximumY);
 
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
 
transform.localRotation = originalRotation * yQuaternion;
 
}
 
}
 
}
 
void Start ()
 
{
 
// Make the rigid body not change rotation
 
if (rigidbody)
 
rigidbody.freezeRotation = true;
 
originalRotation = transform.localRotation;
 
}
 
public static float ClampAngle (float angle, float min, float max)
 
{
 
if (angle < -360F)
 
angle += 360F;
 
if (angle > 360F)
 
angle -= 360F;
 
return Mathf.Clamp (angle, min, max);
 
}
 
}
///

Dans le First Person Controller, il faut ajouter le script, les réglages suivants peuvent être appliqués. Il faut surtout penser à choisir l’axe X

clip_image006

Dans le Main Camera, le même script est appliqué mais cette fois selon l’axe Y.

clip_image007

Il faut bien prendre garde de désactiver pour effacer le script MouseLook, afin de ne pas générer de conflits.

clip_image008

Il ne reste plus qu’à tester.

clip_image010

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.