- Home /
MouseLook Problem
I am a complete idiot when it comes to scripting, so please bear with me. Anyway, I want to make a script that will activate the pre-installed Unity script 'MouseLook' when control is pressed down. This is a C# script that I want to activate with a UnityScript (although I don't know if that matters). Please help!!!
This is what I've tried to make, but I messed it up somewhere. Actually, I never finished it.
function Update () { if (Input.GetKeyDown (KeyCode.LeftControl))
//Right here, I want to activate the C# MouseLook script that comes with Unity... Any help? }
I know, I probably won't understand anything from what you guys try to tell me, but at least I could make a deserving game.
Answer by IJM · Oct 20, 2010 at 10:08 PM
I think that this will work for you:
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 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 rotationX = 0F;
float rotationY = 0F;
Quaternion originalRotation;
void Update()
{
if(Input.GetKey(KeyCode.LeftControl))
OldUpdate();
}
void OldUpdate()
{
if (axes == RotationAxes.MouseXAndY)
{
// 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.right);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis (-rotationY, Vector3.right);
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);
}
}
came up with a new problem... is this right?
public class $$anonymous$$ouseLook : $$anonymous$$onoBehaviour; { void Update(); { if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.LeftControl)); OldUpdate(); { runscript ("$$anonymous$$ouseLook") } }
}
Hey, I edited my answer. Delete the whole code form your $$anonymous$$ouseLook.cs and copy this one. It will move your mouse only if left CTRL is down.