Hello everybody!
First of all, I don't know anything about Scripting, I only use part of script find here and there.
I'm just trying to create a script to look only when the left button of the mouse is pressed. And also try to reduce the "micro freeze" on the mouse move.
For now I succeed in moving the head on axis X and Y when I press the mouse left button. But the issue is that my Y axis is always "activated" and I can move along this axis without pressing the mouse button.
If anyone can help me on this, it would be great.
here is my code:
using UnityEngine;
using System.Collections; using System.Collections.Generic;
[AddComponentMenu("Camera-Control/Smooth Mouse Look")] public class SmoothMouseLookClick : 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;
private List<float> rotArrayX = new List<float>();
float rotAverageX = 0F;
private List<float> rotArrayY = new List<float>();
float rotAverageY = 0F;
public float frameCounter = 20;
Quaternion originalRotation;
void Update ()
{
if (Input.GetMouseButton(0))
if (axes == RotationAxes.MouseXAndY)
{
rotAverageY = 0f;
rotAverageX = 0f;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotArrayY.Add(rotationY);
rotArrayX.Add(rotationX);
if (rotArrayY.Count >= frameCounter) {
rotArrayY.RemoveAt(0);
}
if (rotArrayX.Count >= frameCounter) {
rotArrayX.RemoveAt(0);
}
for(int j = 0; j < rotArrayY.Count; j++) {
rotAverageY += rotArrayY[j];
}
for(int i = 0; i < rotArrayX.Count; i++) {
rotAverageX += rotArrayX*;*
*}*
*rotAverageY /= rotArrayY.Count;*
*rotAverageX /= rotArrayX.Count;*
*rotAverageY = ClampAngle (rotAverageY, minimumY, maximumY);*
*rotAverageX = ClampAngle (rotAverageX, minimumX, maximumX);*
*Quaternion yQuaternion = Quaternion.AngleAxis (rotAverageY, Vector3.left);*
*Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);*
_transform.localRotation = originalRotation * xQuaternion * yQuaternion;_
*}*
*else if (axes == RotationAxes.MouseX)*
*{*
*rotAverageX = 0f;*
_rotationX += Input.GetAxis("Mouse X") * sensitivityX;_
*rotArrayX.Add(rotationX);*
*if (rotArrayX.Count >= frameCounter) {*
*rotArrayX.RemoveAt(0);*
*}*
*for(int i = 0; i < rotArrayX.Count; i++) {*
_rotAverageX += rotArrayX*;*_
_*}*_
_*rotAverageX /= rotArrayX.Count;*_
_*rotAverageX = ClampAngle (rotAverageX, minimumX, maximumX);*_
_*Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);*_
<em>_transform.localRotation = originalRotation * xQuaternion;_</em>
_*}*_
_*else*_
_*{*_
_*rotAverageY = 0f;*_
<em>_rotationY += Input.GetAxis("Mouse Y") * sensitivityY;_</em>
_*rotArrayY.Add(rotationY);*_
_*if (rotArrayY.Count >= frameCounter) {*_
_*rotArrayY.RemoveAt(0);*_
_*}*_
_*for(int j = 0; j < rotArrayY.Count; j++) {*_
_*rotAverageY += rotArrayY[j];*_
_*}*_
_*rotAverageY /= rotArrayY.Count;*_
_*rotAverageY = ClampAngle (rotAverageY, minimumY, maximumY);*_
_*Quaternion yQuaternion = Quaternion.AngleAxis (rotAverageY, Vector3.left);*_
<em>_transform.localRotation = originalRotation * yQuaternion;_</em>
_*}*_
_*}*_
_*void Start ()*_
_*{*_
_*if (rigidbody)*_
_*rigidbody.freezeRotation = true;*_
_*originalRotation = transform.localRotation;*_
_*}*_
_*public static float ClampAngle (float angle, float min, float max)*_
_*{*_
_*angle = angle % 360;*_
_*if ((angle >= -360F) && (angle <= 360F)) {*_
_*if (angle < -360F) {*_
_*angle += 360F;*_
_*}*_
_*if (angle > 360F) {*_
_*angle -= 360F;*_
_*}*_
_*}*_
_*return Mathf.Clamp (angle, min, max);*_
_*}*_
_*```*_
_*<p>}</p>*_
I can't decipher what behavior you are attempting to achieve; your sentence doesn't make any sense to me. If you want a script that moves the camera only while holding down the left mouse button, what I've posted works (for both X and Y axis). If you want to achieve something different, please give more details about what you want.
– anon92224933Hi all. I'm trying to use this code applied at (Mouse Look) Main Camera within Frist Person Controler, but does not work. I changed the script in C + default and moves back and forth but the nod pressing the mouse button effect does not arise. Help, please.
– wuen18