Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • 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
0
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 ship 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 ship 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 this? (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 this isn't the normal mouse look, it's another version of it.

Here Are Some Screenshots

Comment
Add comment · 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
0
Best Answer

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

For what are you using this 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 this, 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 this is what you want, but this 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 this 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
Add comment · 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("$$anonymous$$ouse X") * sensitivityX;
     rotationY += Input.GetAxis("$$anonymous$$ouse Y") * sensitivityY;
     if ((rotationX >= -360) && (rotationX <= 360)){
         rotationX = $$anonymous$$athf.Clamp (rotationX, $$anonymous$$imumX, maximumX);
     }else if (rotationX < -360){
         rotationX = $$anonymous$$athf.Clamp (rotationX+360, $$anonymous$$imumX, maximumX);
     }else{ 
         rotationX = $$anonymous$$athf.Clamp (rotationX-360, $$anonymous$$imumX, maximumX);
     }
 
     if ((rotationY >= -360) && (rotationY <= 360)){
         rotationY = $$anonymous$$athf.Clamp (rotationY, $$anonymous$$imumY, maximumY);
     }else if (rotationY < -360){ 
         rotationY = $$anonymous$$athf.Clamp (rotationY+360, $$anonymous$$imumY, maximumY);
     }else{
         rotationY = $$anonymous$$athf.Clamp (rotationY-360, $$anonymous$$imumY, 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.

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

Rotate to mouse cursor error 1 Answer

Huh click and go script working 50% 0 Answers

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