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 /
  • Help Room /
This question was closed Jan 20, 2019 at 10:51 PM by Tetra for the following reason:

The question is answered, right answer was accepted

avatar image
0
Question by Tetra · Jan 20, 2019 at 10:18 PM · c#movementship

[Solved] Unusual Forward Movement When Rotating

I have ship that moves forward in the direction the transform is facing. When I rotate this ship, however, I get unexpected movement.

Here's a gif showing the behavior that I am seeing: https://media.giphy.com/media/1g2C1sk8eHEko24QIq/giphy.gif

What I am expecting is the ship to move the way that the camera is: in a complete circle. But, for some reason, it moves in one direction, then kind of halts, then keeps moving in that one direction.

Here's the code I am using:

 public class TestMovement : MonoBehaviour
 {
     [SerializeField] Transform childObject;
      [SerializeField] float rotationAmount = 40f;
     [SerializeField] float smoothing = 2.0f;

     [SerializeField] float movementSpeed = 20f;

     private void Update()
     {
         // Get Player Input
         float horizontal = Input.GetAxis("Horizontal");
         float vertical = Input.GetAxis("Vertical") * -1;

         // Calculate Movement
         CalculateMovement(horizontal, vertical);

         // Calculate Rotation
         CalculateRotation(horizontal, vertical);

         // Move forward in direction of transform's forward
         transform.position += transform.forward * Time.deltaTime * movementSpeed;
     }

     void CalculateMovement(float horizontal, float vertical)
     {
         // Set a Vector 3 with the direction we wish to move in
         Vector3 direction = new Vector3(horizontal, vertical, 0);

         // Move the ship in the desired direction
         transform.position += direction * movementSpeed * Time.deltaTime;

         // Rotate the transform for free-range movement
         transform.Rotate(0f, horizontal * 1.5f, 0f);
     }

     private void CalculateRotation(float horizontal, float vertical)
     {
         Quaternion target = Quaternion.Euler(vertical * -rotationAmount, horizontal * rotationAmount, horizontal * -50f);
         childObject.localRotation = Quaternion.Slerp(childObject.localRotation, target, Time.deltaTime * smoothing);
     }
 }

If you can help me figure out what I'm doing wrong here, I would greatly appreciate it. And just in case it is needed, here's an image showing the inspector.

alt text

inspector.png (169.9 kB)
Comment
Add comment · Show 5
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 xxmariofer · Jan 20, 2019 at 10:36 PM 1
Share

I have some issues trying to understand your code, pretty sure the problem is that you are updating the the transform twice can you try removing this line inside calculatemovement? transform.position += direction movementSpeed Time.deltaTime;

avatar image ray2yar · Jan 20, 2019 at 10:40 PM 0
Share

xxmariofer is correct, you are definitely counting each movement twice. It would also help to know which kind of movement you want to achieve. Are you going for a starfox style scifi shooter or something more akin to dogfighting in ships?

avatar image Tetra · Jan 21, 2019 at 03:52 PM 0
Share

The problem wasn't updating the transform twice. The first transform update moved the object on it's transform's forward. The other moved it up and down, left and right, so there is 0 conflict there.

The problem was I was moving it left and right when it should just rotate ins$$anonymous$$d. In the line: Vector3 direction = new Vector3(horizontal, vertical, 0);, it takes horizontal and vertical input from the player. The second time was transform.Rotate(0f, horizontal * 1.5f, 0f);, which rotates the object about the Y axis.

The first horizontal isn't needed from the direction, since the transform.Rotate was already rotating the ship.

Also, if I may ask, what part of the code is hard to understand? I thought I did a good job commenting it, but if not please let me know.

avatar image xxmariofer Tetra · Jan 21, 2019 at 04:19 PM 0
Share

Your calculatemovement method was a bit confusing, not for you since you code it, but for someone who trys to understand why were you rotating the spaceship in that method when you have a method already only for rotating the spaceship, also you are updating the movement twice, will make the player move twice as fast in certain situations. but your comments were much nicer than $$anonymous$$es thats for sure. :)

avatar image Tetra xxmariofer · Jan 21, 2019 at 06:43 PM 0
Share

Ah okay. Sorry about that. In my game, I have two types of movement: On Rails and Free Range. The final controller handles both types of movement in one class, but at the time I made this post, I had created a temporary secondary class using code copied and pasted over from the main class to get the desired animations and stuff in place. This secondary class was made to create the free range movement since the On Rails was working perfectly. After fixing that one bug with the free range movement, I combined the two classes together and simplified it further and put more comments in.

I try to make sure I put in good comments so that when I look at the class a year or two down the line I know what is going on without stressing my brain.

Here's what the on rails movement looks like: https://media.giphy.com/media/9PrDqGc5QoD$$anonymous$$b94e25/giphy.gif

And here's the barrel roll and banking.

https://media.giphy.com/media/2lQZJkknjglQcoQblW/giphy.gif

1 Reply

  • Sort: 
avatar image
0
Best Answer

Answer by Tetra · Jan 20, 2019 at 10:51 PM

Nevermind! I figured it out. It was the horizontal movement under CalculateMovement. The following changes fixed everything!

          // Set a Vector 3 with the direction we wish to move in
          Vector3 direction = new Vector3(0f, vertical, 0f);
 
          // Move the ship in the desired direction
          transform.position += direction * movementSpeed * Time.deltaTime;
 
          // Rotate the transform for free-range movement
          transform.Rotate(0f, horizontal * 1.5f, 0f);
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

Follow this Question

Answers Answers and Comments

655 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

How to SHOOT an object on a curved path without using Rigidbody 2 Answers

Check whether a group of instantiated 2D rigid bodies are moving 1 Answer

Player not moving in the right direction instantly 1 Answer

Instantiated Prefab not Moving 1 Answer

How can I get the player to face the direction it is going in a Unity 2D Game?,How do I make it so that my character faces in the direction it is facing in a 2D Unity Game 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