• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by DayyanSisson · Aug 30, 2011 at 12:18 AM · rotationmouseaxiscursorflight

Flight Sim Mouselook

I'm making a space sim. The problem is, the player uses the left and right arrow keys to change the s$$anonymous$$p rotation. When the player rotates, let's say 180 degrees to the left so it's upside down, if I move the mouse cursor up, the s$$anonymous$$p moves down. That's because the mouselook script is translating the mouselook script so when the player moves cursor up on the screen, the player will move up on the y-axis. Same type of problem for the x-axis. So if the player is at a wierd angle, moving would be really hard. How should I fix t$$anonymous$$s? (I'm a UnityScript guy and the mouselook is in C# so I can't fix it myself):

Smooth Mouselook

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 [AddComponentMenu("Camera-Control/Smooth Mouse Look")]
 public class SmoothMouseLook : 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 (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[i];
             }
             
             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[i];
             }
             rotAverageX /= rotArrayX.Count;
             
             rotAverageX = ClampAngle (rotAverageX, minimumX, maximumX);
 
             Quaternion xQuaternion = Quaternion.AngleAxis (rotAverageX, Vector3.up);
             transform.localRotation = originalRotation * xQuaternion;         
         }
         else
         {         
             rotAverageY = 0f;
             
             rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
             
             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);
             transform.localRotation = originalRotation * yQuaternion;
         }
     }
     
     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);
     }
 }

By the way, know t$$anonymous$$s isn't the normal mouse look, it's another version of it.

Here Are Some Screenshots

Comment

People who like this

0 Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image DayyanSisson · Sep 02, 2011 at 04:57 AM 0
Share

It also doesn't work for the normal mouselook

1 Reply

· Add your reply
  • Sort: 
avatar image
Best Answer

Answer by aldonaletto · Aug 30, 2011 at 04:47 AM

For what are you using t$$anonymous$$s MouseLook? It's intended to control a first person camera, so it modifies the local rotation to keep the camera in the same character perspective. If you don't want t$$anonymous$$s, replace all localRotation with rotation. Depending on what you're trying to do, it may solve your problems - or make them even worse, thus save a copy of your script before doing such a modification.
NOTE: Save it outside the Assets folder, or Unity will complain that are two scripts with the same name.

EDITED: I'm not sure if t$$anonymous$$s is what you want, but t$$anonymous$$s script rolls with left/right arrows, points up or down (local direction) with Mouse Y and turns left or right with Mouse X (local direction). Maybe the sensitivity should be adjusted in some axes (it's 30 in all of them in t$$anonymous$$s code).

function Update(){

 var pitch = Input.GetAxis("Mouse Y")*30*Time.deltaTime;
 var roll = -Input.GetAxis("Horizontal")*30*Time.deltaTime;
 var yaw = Input.GetAxis("Mouse X")*30*Time.deltaTime;
 transform.Rotate(pitch, yaw, roll);

}

Comment

People who like this

0 Show 8 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image DayyanSisson · Aug 30, 2011 at 11:50 PM 0
Share

I'm using this for a Space Sim, so the space ship will be following the mouse. Well I tried it and it didn't work. It didn't make it better or worse, just stayed the same.

avatar image DayyanSisson · Oct 14, 2011 at 04:47 AM 0
Share

I haven't approached this question in a while, but right now, I'm using a java version of the mouselook. Here it is without the variables:

 function Start (){
     if (rigidbody) rigidbody.freezeRotation = true;
     originalRotation = transform.localRotation;
 }
 
 
 function Update() 
 {
     rotationX += Input.GetAxis("Mouse X") * sensitivityX;
     rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
     if ((rotationX >= -360) && (rotationX <= 360)){
         rotationX = Mathf.Clamp (rotationX, minimumX, maximumX);
     }else if (rotationX < -360){
         rotationX = Mathf.Clamp (rotationX+360, minimumX, maximumX);
     }else{ 
         rotationX = Mathf.Clamp (rotationX-360, minimumX, maximumX);
     }
 
     if ((rotationY >= -360) && (rotationY <= 360)){
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
     }else if (rotationY < -360){ 
         rotationY = Mathf.Clamp (rotationY+360, minimumY, maximumY);
     }else{
         rotationY = Mathf.Clamp (rotationY-360, minimumY, maximumY);
     }
     xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
     yQuaternion = Quaternion.AngleAxis (rotationY, Vector3.left);
 
     transform.localRotation = originalRotation * xQuaternion * yQuaternion;
avatar image aldonaletto · Oct 14, 2011 at 01:19 PM 0
Share

How is your game? 2D? If so, is the camera pointing the Z axis or -Y? Is it top-down? Post a screenshot in your question.

avatar image DayyanSisson · Oct 14, 2011 at 06:52 PM 0
Share

I posted the screenshots in the bottom of the question. To answer your question, it's 3D space sim, and so the camera is pointing at no specific axis.

avatar image aldonaletto · Oct 15, 2011 at 12:28 AM 0
Share

Is it behaving the way you wanted?

Show more comments

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

6 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Huh click and go script working 50% 0 Answers

Rotate to mouse cursor error 1 Answer

Cursor/Mouse movement to controller 0 Answers

'Camera' does not contain a definition for 'ScreenPointToRay' 1 Answer

Rotate and Move towards Mouse Point 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges