Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 JoVirtual · Jun 14, 2015 at 01:46 PM · scripting problemmovementmove an objectwasdmovedirection

Movement issues with keyboard

Hello, my first question, so not sure if it is too over asked, but I really need some help.

So, I'm making a top down game, and I have movement code below, and the diagnol movement is faster than the crossWay moving. Any ideas? Thanks a million guys it would help a lot

--Peace

 public float speed;
     public Vector2 position;
 
     public void Update()
     {
         CheckInput();
         transform.position = position;
     }
 
     public void CheckInput()
     {
         if (Input.GetKey(KeyCode.W))
             position.y += 1;
         if (Input.GetKey(KeyCode.S))
             position.y -= 1;
         if (Input.GetKey(KeyCode.A))
             position.x -= 1;
         if (Input.GetKey(KeyCode.D))
             position.x += 1;
     }
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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Xarbrough · Jun 15, 2015 at 12:01 AM

There are two ways to do this:

 if(Input.GetKey (KeyCode.W))
 {
     transform.position = new Vector3(transform.position.x, transform.position.y + 1, transform.position.z);
 }
 
 if(Input.GetKey (KeyCode.S))
 {
     Vector3 nextPosition = transform.position;
     nextPosition.y -= 1;
     transform.position = nextPosition;
 }


For a detailed explanation why: Unity official tutorials - Data Types

In short: You cannot modify your position value, because it is only a copy of transform.position. Instead modify transform.position. Secondly, you cannot modify transform.position.y directly, because it only returns a copy of the value, not the actual reference to the object transform. You have to assign a whole new Vector3 to transform.position to change it.

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
0

Answer by cmonroy · Mar 10, 2016 at 04:39 AM

It seems to me that you need to normalize diagonal movement using Time.deltatime...

You move left, right, forward or backwards one unit at a given time, but to move diagonal you need to traverse two units in the same amount of time. Hence, the additional speed perceived.

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Unity for OculusGo: Move an object along the z axis by touchpad 0 Answers

How to Have Projectile Reset to Initial Position Relative to Parent 1 Answer

How to fix a walking animation that when its done your player position gets reset to its starting position. 1 Answer

How do i move around in the editor without using arrow keys or middle click. 1 Answer

Enemy AI Movement Decision Making 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