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 Qvibble · Jun 07, 2018 at 04:27 PM · c#scripting problemrotatearound

Vertical camera rotation around player issues

Hi, I have a camera that rotates around a player that I can not seem to get right. The rotation around the horizontal axis works fine but when I add rotation around the vertical axis it can rotate freely (it uses all the axes, not just two). When I use them separately they work fine, other than that the vertical one has choppy/laggy movement that I want to get rid of aswell.

How can I solve this problem?

Video of issues: https://youtu.be/ddrwJVH7CWE

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class PlayerCamera : MonoBehaviour {
 
     GameObject player;
 
     Vector3 cameraOffset;
     Vector3 scrollOffset;
     Vector3 zoom;
 
     public Transform target;
     public Transform cameraPos;
 
     public float Y;
     public float Z;
     public float X;
     public float angularSpeed = 350f;
 
     private void Start()
     {
         player = GameObject.Find("Player");
         cameraOffset = new Vector3(0, 5, -8);
         transform.rotation = Quaternion.Euler(15, 0, 0);
 
         transform.position = player.transform.position + cameraOffset;
 
         if (target == null)
         {
             Debug.LogError("Assign a target for the camera in Unity's inspector");
         }
     }
 
     public void Update()
     {
         X = cameraPos.transform.position.x - target.position.x;
         Y = cameraPos.transform.position.y - target.position.y;
         Z = cameraPos.transform.position.z - target.position.z;
 
         scrollOffset = new Vector3((X / 10), (Y / 10), (Z / 10));
 
         transform.position = player.transform.position + cameraOffset;
 
         if (Input.GetAxis("Mouse ScrollWheel") > 0) //Zoom in
         {
             cameraOffset-= scrollOffset;
         }
 
         if (Input.GetAxis("Mouse ScrollWheel") < 0) //Zoom out
         {
             cameraOffset += scrollOffset;
         }
     }
 
     private void LateUpdate()
     {
         transform.position = target.position + cameraOffset;
 
         float movementHorizontal = Input.GetAxis("Mouse X") * angularSpeed * Time.deltaTime;
         float movementVertical = Input.GetAxis("Mouse Y") * angularSpeed * Time.deltaTime;
 
         if (!Mathf.Approximately(movementHorizontal, 0f))
         {
             transform.RotateAround(target.position, Vector3.up, movementHorizontal);    //Rotation around horizontal axis
             transform.RotateAround(target.position, -Vector3.right, movementVertical);  //Rotation around vertical axis (choppy movement, laggy)  
             cameraOffset = transform.position - target.position;
         }
     }
 }
 
Comment
Add comment
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by C_R_E_A_T_R_O_R · Jun 07, 2018 at 11:15 PM

This is the default behavior of the Rotate function, fortunately - unfortunately, a workaround is to docsomething like:

transform.Rotate(-horizontal, vertical,0) And right after that: float z = transform.eulerAngles.z transform.Rotate(0, 0, -z)

That way you cancel the rotation around the z axis.
You could check if this works

Comment
Add comment · Show 2 · 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 Qvibble · Jun 08, 2018 at 08:22 AM 0
Share

I tried using the code but ins$$anonymous$$d of it focusing on the player rotating around it the camera rotates freely. Removing the transform.Rotate(-horizontal, vertical,0) part makes the horizontal movement work. $$anonymous$$oving the mouse vertically ins$$anonymous$$d makes the camera rotate one of the sides of the player. The remaining code did however lock the Z rotation.

Now I am stuck with the camera rotating around one side rather than over the top. I hope the image makes any sense. alt text

camera.jpg (521.1 kB)
avatar image C_R_E_A_T_R_O_R Qvibble · Jun 08, 2018 at 02:16 PM 0
Share

Yeah, so this is called gimbal lock and it is caused when using euler angles (which rotateAround needs). What it means is that as two axis are rotating simultaniously they will also make the third one rotate. Check this: https://en.wikipedia.org/wiki/Gimbal_lock

This can be solved by using Quaternions, which can be a little bit weird at first glance. I believe that there is no built in function to rotateAround with Quaternions though... If i find something usefull i will let you know

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

524 People are following this question.

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

Related Questions

Rotatearaound a moving object 1 Answer

How do I get the world space up direction for RotateAround? 0 Answers

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

script with individual function for each gameObject or public script variable to solve inventory system problem 1 Answer


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