• 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 BoomerandZiggy · May 30, 2015 at 05:21 PM · axiscubeworldspin

spinning cube 90 degrees along different axis

I have a game where i am spinning cubes. They spin in place in orthographic mode with one face facing the user. I am using the following code to spin them 90 degrees at a time. This is actually partly code I found in the questions and may help many who had sort of the same goal as i did.

 public class CubeTurner : MonoBehaviour {
 public float speed = 500.0f;
 private float rotation = 0.0f;
 private float rotation2 = 0.0f;
 private float rotation3= 0.0f;
 private Quaternion qTo = Quaternion.identity;
 
 
 
 void Update () {
     if (Input.GetKeyDown (KeyCode.UpArrow)) {
         rotation3 += 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;


 if (Input.GetKeyDown (KeyCode.DownArrow)) {
         rotation3 -= 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;    
     }

     if (Input.GetKeyDown (KeyCode.LeftArrow)) {
         rotation3 += 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;


 if (Input.GetKeyDown (KeyCode.RightArrow)) {
         rotation3 -= 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;    
     }

     if (Input.GetKeyDown (KeyCode.A)) {
         rotation3 += 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;


 if (Input.GetKeyDown (KeyCode.S)) {
         rotation3 -= 90.0f;
         qTo = Quaternion.Euler (rotation3, rotation2, rotation);
         if(rotation3 == 360 || rotation2 == -360)
             rotation3 = 0;    
     }
     transform.rotation = Quaternion.RotateTowards (transform.rotation, qTo, speed * Time.deltaTime);
     
 }

My question is this. This code works to spin the cube in this manner: changing the different rotation variables you use for each key causes the cube to spin around each axis. The problem is that when it spins left to right horizontally (the axis is up and down) it always spins this way no matter what orientation or how many directions its been turned in. In other words it seems to be relative to world space.This is what i want. the problem is that the other two axis spins seem to be relative to the cube. so say at the start of running the app i can hit up or down and the cube rolls the face facing the user to the top or bottom. But if you start the app and turn it horizontally to the left or right one turn and then hit up or down it does not take the front face and roll it up or down to the top or bottom. rather the axis has been rotated 90 degrees and so it takes the face that would be on one of the sides and puts it on the top or bottom. To the user it takes the face facing you and spins it in place ( or if you had an upward arrow on it it is now facing right or left.)The weird thing is that the code for all 3 keys and axis is the same but its treating 2 different than the third and i want the third. Now i have written a rather lengthy algorithm to basically spin it using each possible orientation but i want to figure out why this is happening both for understanding and to make the code more efficient and cleaner. thanks if you can help

note: if something seems off about the code its because i have modified it since it was like this and had to revert it back to this so i just ignore weird indentions and other oddities.

Comment

People who like this

0 Show 0
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

0 Replies

· Add your reply
  • Sort: 

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

2 People are following this question.

avatar image avatar image

Related Questions

OnMouseDown() cube face? 1 Answer

Object Problems with colliders? 1 Answer

Generating Meshes Is Slow 1 Answer

cube based enging 1 Answer

how to convert an objects local axis vector to 'world' vector. 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