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/ |