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 Codelyy · May 06, 2017 at 02:14 AM · c#movement2d game

Best way to move a 2D Character

I was just wondering what everyone thought was the best method to move a 2D Character? For years I've always done something like:

 if(Input.GetKey(KeyCode.D))
         {
             transform.position += Vector3.right * moveSpeed * Time.deltaTime;
             spriteRenderer.flipX = false;
         }
         else if(Input.GetKey(KeyCode.A))
         {
             transform.position += Vector3.right * -moveSpeed * Time.deltaTime;
             spriteRenderer.flipX = true;
         }

Though I've also seen a lot of people simply change the characters velocity manually to move them.

Is my method of moving a 2D character valid or should I be doing it another way?

Comment
Add comment · Show 3
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 RobAnthem · May 06, 2017 at 04:24 AM 0
Share

This is a very bad way of moving a character, it does not provide physics detection, which isn't costly. Velocity is the absolute best way of moving a character. Also using keys is a bad way to go unless you create your own key-mapping system. Proper movement would look like this.

 public float speed;
 public float jumpSpeed;
 public body Rigidbody;
 private float vertical;
 private float horizontal;
 private Vector3 movement;
 void Awake()
 {
     movement = new Vector3;
     if (body == null)
        body = GetComponenent<Rigidbody>();
 }
 
 void FixedUpdate()
 {
     vertical = Input.GetAxis("Vertical");
     horizontal = Input.GetAxis("Horizontal");
     movement.x = horizontal * speed;
     movement.y = vertical * jumpSpeed;
     body.velocity = movement;
 }

EDIT: Unfortunately since Vector3 is a struct, it is probably more efficient to make a new Vector3 every update. As horrible as it sounds. Like

 movement = new Vector3(horizontal * speed, vertical * jumpSpeed, 0);

avatar image Codelyy RobAnthem · May 06, 2017 at 01:31 PM 0
Share

Why is using keys a bad way to go?

avatar image UnityCoach Codelyy · May 06, 2017 at 02:12 PM 0
Share

Using Input.GetAxis gives you more control over multi-platform inputs and keyboard/joysticks input damping, etc..

Although, assigning the velocity property is really not advisable, it would cancel gravity and momentum every frame!

You want to use AddForce() and AddRelativeForce().

2 Replies

· Add your reply
  • Sort: 
avatar image
3

Answer by UnityCoach · May 06, 2017 at 11:45 AM

When you're not using Physics, you can either assign the Transform.position property or use the Transform.Translate() method. The latter is preferred though, as it allows you to use Local VS World coords.

When using Physics, it's the same, you can assign the Rigidbody2D.velocity property, of use the Rigidbody2D.AddForce() or Rigidbody2D.AddRelativeForce() methods. Again, the latter is preferred for the same reasons.

Comment
Add comment · Show 1 · 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 evanwr9 · Oct 27, 2020 at 12:44 AM 0
Share

I don't understand the world vs local coordinates. Isn't there just one scene. That could be just me touting my ignorance however. Thanks for your answer about force for movement @UnityCoach!

avatar image
2

Answer by Retropaint · Jan 14, 2018 at 03:46 PM

I don't think the difference between choices is big, thought if I were u I would write it like this:

  if(Input.GetButton("GoRight")
              {
                  transform.position += Vector3.right * moveSpeed * Time.deltaTime;
                  spriteRenderer.flipX = false;
              }
              else if(Input.GetButton("GoLeft"))
              {
                  transform.position += Vector3.right * -moveSpeed * Time.deltaTime;
                  spriteRenderer.flipX = true;
              }

If you don't know what GetButton is, read about the Input Manager in the Unity manual. The manager allows the play to assign their own buttons rather than making it hardcoded (like how you did with "KeyCode.A" and "KeyCode.D"). For example, the player might want F to "GoRight" and S to be "GoLeft".

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

322 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

Related Questions

Making a bubble level (not a game but work tool) 1 Answer

How to move along a few path follow ? 1 Answer

Move 2D Sprite Horizontally With Mouse 1 Answer

Multiple enemy prefabs moving towards a single goal. Need help! 1 Answer

Moving 2D Object To New Position With Angle and Distance 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