• 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 KwakKwak · Nov 23, 2017 at 03:41 AM · c#rotationmousequaternioncamera rotate

How to Change rotation while preserving local horizontal rotation

Ok, so I've made some sort of third person thing where you can run around small spherical planets. The player is rotated so their down is always toward the centre of the planet and they are pulled towards it. The camera is child of an empty gameObject called cameraPivot which has the same x and y as the player. Currently I have it so that the cameraPivot object has the same rotation as the player, then offset along the x and y axis according to the mouse input. Here is the Update script attached to cameraPivot:

 void Update ()
     {
         //Rotate Camera according to mouse
         transform.rotation = player.transform.rotation; // Set camera rotation to player rotation
 
         horizontalRotation -= Input.GetAxis("Mouse X") * mouseSensitivityX; // Find horizontal rotation from mouse input
 
         verticalRotation -= Input.GetAxis("Mouse Y") * mouseSensitivityY; // Find vertical rotation from mouse input
         verticalRotation = Mathf.Clamp(verticalRotation, -60, 60); // Dont let camera look up or down too far
 
         transform.Rotate(verticalRotation, horizontalRotation, 0); //Rotate camera by verticalRotation and horizontalRotation
     }

This all works fine, except for one thing - I want the horizontal rotation of the camera to be independent of the player's horizontal rotation. This would be easy enough on a flat world, but since the direction 'up' is for the player is constantly changing, it makes it a lot more difficult. Obviously using transform.Rotate like I am now won't work, as that creates a rotation relative to the players rotation. Basically, the end result I want is that the camera's w and y roation change relative to the player, but the x rotation stays the same, only being affected by mouse movement. I mean x, y and z along the axis of the camera, not the scene, of course.

Hope that made sense :P help would be greatly appreciated, I've searched but can't seem to find a way that works. I'm still trying to learn how to use all the rotation tools in unity properly, so possibly there's some simple solution I've overlooked.

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 Dray · Nov 24, 2017 at 10:57 AM

It should work as you coded it but maybe try this:

 transform.Rotate(verticalRotation, horizontalRotation, 0, Space.Self);

Space.Self is the default parameter according to the documentation and lets your transform rotate around itself. Space.World would let it rotate around the world axises.

Or try:

 transform.RotateAround(transform.position, transform.up, horizontalRotation);
 transform.RotateAround(transform.position, transform.right, verticalRotation);
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 KwakKwak · Nov 26, 2017 at 07:41 AM 0
Share

Sorry, I don't know If I made what I need clear. I need it so that, for example, if the player turns to face left, the camera stays pointing in the same direction. The way I have it currently, the camera rotates with the player if you turn them left or right. I want only the mouse to be controlling the camera along its horizontal rotation.

avatar image Dray KwakKwak · Nov 26, 2017 at 12:37 PM 0
Share

Deleted my answer by accident -.-

So if I get it right you want your players character to look into the direction he's moving? If so try something like this:

 // for example (0, 0, 1) for forward
 var relativeDirection = new Vector3 (Input.GetAxis ("Horizontal"), 0f, Input.GetAxis ("Vertical"));
 
 // the direction translated into world space
 var absoluteDirection = camera.transform.TransformDirection(relativeDirection);
 
 // look at a point in movement direction
 player.transform.LookAt(player.transform.position + absoluteDirection);
 

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

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

428 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

Related Questions

Flip over an object (smooth transition) 3 Answers

Camera not rotating 1 Answer

Using quaternion for mouse movement? 3 Answers

Keep objects current rotation, with Input Mouse X 0 Answers

Trouble with Camera Rotation Math 2 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges