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 Yaw-Loon · May 02, 2016 at 10:33 AM · camerarotationrotate

How to rotate my camera?

I copy the FPS scripts in standard asset example and it's truely work,but I can't understand how it work. I think this script is too complex,but when I want to make a simple version,it's never work.it's my code for camera rotate.it just can shake my camera.

     using UnityEngine;
     using System.Collections;
     public class MyFPML : MonoBehaviour {
     
         private float x;
         private float y;
         private Vector3 targetRotation;
         private Vector3 rotateValue;
         private Quaternion rotation;
     
         void Start ()
         {
             rotation = transform.rotation;
         }
         
         void Update ()
          {
             x = Input.GetAxis("Mouse X");
             y = Input.GetAxis("Mouse Y");
             Debug.Log(x + ":" + y);
             rotateValue = new Vector3(x, y, 0);
             targetRotation = transform.position + rotateValue;
             rotation = Quaternion.Euler(x, y, 0);
             transform.rotation = rotation;
             }
     }
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

3 Replies

· Add your reply
  • Sort: 
avatar image
6
Best Answer

Answer by Nido · May 02, 2016 at 02:03 PM

Tested and working:

 using UnityEngine;
 using System.Collections;
 
 public class CamRotation : MonoBehaviour 
 {
     private float x;
     private float y;
     private Vector3 rotateValue;
 
     void Update()
     {
         y = Input.GetAxis("Mouse X");
         x = Input.GetAxis("Mouse Y");
         Debug.Log(x + ":" + y);
         rotateValue = new Vector3(x, y * -1, 0);
         transform.eulerAngles = transform.eulerAngles - rotateValue;
     }
 }

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 Nido · May 02, 2016 at 02:09 PM 0
Share

Watch out. I changed the class name, so use yours ins$$anonymous$$d!

avatar image DDeathlonger · May 04, 2018 at 11:30 PM 0
Share

transform.eulerAngles -= rotateValue; ;) lol

avatar image
1

Answer by Yaw-Loon · May 19, 2016 at 02:18 PM

 using UnityEngine;
 using System.Collections;
 public class FPSRotate : MonoBehaviour
 {
     public Camera cam;          //Main camera for rotate in y-axis
     void Update()               //Updated every frame;
     {
         this.LookRotation(transform, cam.transform);    //Call LookRotation() to change the x-rotation of the gameobject and the y-rotation of camera
     }
     public void LookRotation(Transform character, Transform camera)     //Change the x-rotation of the gameobject and the y-rotation of camera
     {
         float yRot = Input.GetAxis("Mouse X") * 2f;     //get x and y of mouse in screen
         float xRot = Input.GetAxis("Mouse Y") * 2f;
         character.localRotation *= Quaternion.Euler(0f, yRot, 0f);      //To change character's rotation around y-axis
         camera.localRotation *= Quaternion.Euler(-xRot, 0f, 0f);        //To change camera's rotation around x-axis
         camera.localRotation = ClampRotationAroundXAxis(camera.localRotation);  //Clamp camera's rotation
     }                                                                   //The key point is use localRotation,not rotation or Quaternion.Rotate.
     Quaternion ClampRotationAroundXAxis(Quaternion q)       //The method of clamp rotation,I can't understand it;use it carefully.
     {
         q.x /= q.w;
         q.y /= q.w;
         q.z /= q.w;
         q.w = 1.0f;
         float angleX = 2.0f * Mathf.Rad2Deg * Mathf.Atan(q.x);
         angleX = Mathf.Clamp(angleX, -90f, 90f);
         q.x = Mathf.Tan(0.5f * Mathf.Deg2Rad * angleX);
         return q;
     }
 }


//I use these code now,but your code also awsome.

Comment
Add comment · 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
1

Answer by DimitrisPtrs · Oct 24, 2021 at 03:14 PM

@ Yaw-Loon I found a simplified way with less commands!!!Here it is:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;

 public class CamRotation : MonoBehaviour
 {
      public float camSpeed = -0.5f;

      private float x;
     private float y;
     private Vector3 rotateValue;
 
      void Update()
     {
          x = Input.GetAxis("Mouse X");
         y = Input.GetAxis("Mouse Y");
         Debug.Log(x + ":" + y);
         rotateValue = new Vector3(y, x * -1, 0);
         transform.eulerAngles = transform.eulerAngles - rotateValue;
         transform.eulerAngles +=  rotateValue * camSpeed;
     }
 }


But be aware!!! You have to change the name of the public class, and the cam speed has to be a negative number.

Also, this way you can change the rotation speed as well!!!! Cool, right?!?!?

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

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

8 People are following this question.

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

Related Questions

Limiting the rotation to 180 degrees 0 Answers

Moving Camera on player stop then move and rotate to separate point? 0 Answers

Rotating a camera that has MouseLook.cs attached 0 Answers

Camera Rotation Tips 1 Answer

How to make the camera rotate only when right click is held down on the mouse? 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