noocrypte.net
http://noozone.free.fr/noocrypte/

Unity 3D- PlayerMouseLook-UnderControl-Remote
http://noozone.free.fr/noocrypte/viewtopic.php?f=47&t=7180
Page 1 sur 1

Auteur:  yann.minh [ Ven Aoû 17, 2012 2:44 am ]
Sujet du message:  Unity 3D- PlayerMouseLook-UnderControl-Remote

Code:
/// 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.)

enum RotationAxesB2 { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
   
public var axes : RotationAxesB2 = RotationAxesB2.MouseXAndY;
public var SensibiliteX : float= 3;
public var SensibiliteY : float= 3;

public var minimumX : float= -360;
public var maximumX : float= 360;

public var  minimumY : float= -60;
public var maximumY : float= 60;

var rotationX : float= 0;
var rotationY : float = 0;

var originalRotation : Quaternion;

var RotationSliderValue : float = 2.0; static var volume : float;




// affiche un curseur permettant de multiplier la vitesse de rotation
function OnGUI () {
RotationSliderValue = GUI.HorizontalSlider (Rect (0, 100, 100, 20), RotationSliderValue, 0.0, 10.0);
GUI.Box(Rect(0,80,100,35),"Rotation");
// AudioListener.volume = RotationSliderValue/10;

Debug.Log(RotationSliderValue);
}


function Update ()
{

var sensitivityX = SensibiliteX*(RotationSliderValue/2);
var sensitivityY = SensibiliteY*(RotationSliderValue/2);

   if(!Screen.lockCursor){
      //return;
   }
   
   var yQuaternion : Quaternion;
   var xQuaternion : Quaternion;
   Debug.Log(xQuaternion);
   
   //Debug.Log(Inputs.GetAxis("Horizontal"));   

   //var seuil = 0.01;
   if(Mathf.Abs(Inputs.GetAxis("Horizontal")) < 0.2) return;
//   if(Inputs.GetAxis("Vertical") < seuil) return;
   
   
   
   if (axes == RotationAxesB2.MouseXAndY)
   {
      // Read the mouse input axis
      rotationX += Inputs.GetAxis("Horizontal") * sensitivityX;
      rotationY += Inputs.GetAxis("Vertical") * sensitivityY;

      rotationX = ClampAngle (rotationX, minimumX, maximumX);
      rotationY = ClampAngle (rotationY, minimumY, maximumY);
      
      xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
      yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
      
      transform.localRotation = originalRotation * xQuaternion * yQuaternion;
   }
   else if (axes == RotationAxesB2.MouseX)
   {
      rotationX += Inputs.GetAxis("Horizontal") * sensitivityX;
      rotationX = ClampAngle (rotationX, minimumX, maximumX);

      xQuaternion  = Quaternion.AngleAxis (rotationX, Vector3.up);
      transform.localRotation = originalRotation * xQuaternion;
   }
   else
   {
      rotationY += Inputs.GetAxis("Vertical") * sensitivityY;
      rotationY = ClampAngle (rotationY, minimumY, maximumY);

      yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
      transform.localRotation = originalRotation * yQuaternion;
   }
}
   
function Start ()
{
   // Make the rigid body not change rotation
   if (rigidbody){
      rigidbody.freezeRotation = true;
   }
   originalRotation = transform.localRotation;
}
   
static function ClampAngle ( angle : float,  min : float, max :  float) : float
{
   if (angle < -360)
      angle += 360;
   if (angle > 360)
      angle -= 360;
   return Mathf.Clamp (angle, min, max);
}

Page 1 sur 1 Heures au format UTC [ Heure d’été ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/