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 /
avatar image
1
Question by Mcsponch · Feb 13, 2020 at 06:41 AM · movementscript.rigidbody2dboolean

Movement sometimes not working

Hello!. I want to make the player object move on click and then stop at a predetermined target position, if its left move right and if it's right move to the left, but the code I made sometimes gets stuck, the object seems to start moving but advances only a little bit and the bool shouldMove appears as false, it happens in both directions. I think the problem is at the point in the code where shouldMove changes to false, but I can´t find a solution. Any pointers would be much appreciated.

 public class PlayerMovement2 : MonoBehaviour
     {
         public float speed = 5f;
         public bool shouldMove = false;
         Vector3 targetRight;
         Vector3 targetLeft;
         Rigidbody2D pRigidbody;
         bool isLeft = false;
         bool isRight = false;
     
         void Start()
         {
             pRigidbody = GetComponent<Rigidbody2D>();
             targetLeft = new Vector3(-0.25f, transform.position.y, transform.position.z);
             targetRight = new Vector3(0.25f, transform.position.y, transform.position.z);
         }
     
         void Update()
         {
             CheckPosition();
             PlsMove();
     
             if (shouldMove && isLeft)
             {
                     pRigidbody.MovePosition(Vector3.MoveTowards(transform.position, targetRight, speed * Time.deltaTime));
             }
             if (shouldMove && isRight)
             {
                 pRigidbody.MovePosition(Vector3.MoveTowards(transform.position, targetLeft, speed * Time.deltaTime));
             }
         }
     
         void PlsMove()
         {
             if (Input.GetMouseButtonDown(0))
             {
                 shouldMove = true;
             }
         }
     
         void CheckPosition()
         {
             if (transform.position.x == targetLeft.x)
             {
                 isLeft = true;
                 isRight = false;
                 shouldMove = false;
             }
             else if (transform.position.x == targetRight.x)
             {
                 isRight = true;
                 isLeft = false;
                 shouldMove = false;
             }
         }
     
     }
 
 
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
1
Best Answer

Answer by JPhilipp · Feb 13, 2020 at 12:27 PM

Here's a streamlined version that works. I've used Rigidbody 3D for the purpose of the test, but you can convert it back to 2D. Note how in your code, for starters things are stuck at the beginning because neither isRight nor isLeft would be true in the beginning, yet at least one of them is required for any movement. Note also how isLeft and isRight in your code are mutually exclusive, so you may want to prefer a code relationship that expresses that. In below case, the target is always exactly one side (or null), and if no target is defined it falls back on at least one of them. I'm also using FixedUpdate() to apply the physics changes to avoid jerky visuals.

 using UnityEngine;
 
 public class PlayerMovement : MonoBehaviour
 {
     [SerializeField] float speed = 15f;
     Vector3 targetLeft;
     Vector3 targetRight;
     Rigidbody body;
     Vector3? target = null;

     void Start()
     {
         body = GetComponent<Rigidbody>();
         targetLeft = new Vector3(-1f, transform.position.y, transform.position.z);
         targetRight = new Vector3(1f, transform.position.y, transform.position.z);
     }
     
     void Update()
     {
         if (Input.GetMouseButtonDown(0) && target == null)
         {
             target = transform.position == targetLeft ? targetRight : targetLeft;
         }
     }
     
     void FixedUpdate()
     {
         if (target != null)
         {
             Vector3 newPosition = Vector3.MoveTowards(
                 transform.position, (Vector3) target, speed * Time.fixedDeltaTime);
             body.MovePosition(newPosition);
             if (newPosition == (Vector3) target) { target = null; }
         }
     }
 }
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 Mcsponch · Feb 13, 2020 at 04:41 PM 1
Share

Thank you!, I just started learning and this helps a lot

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

276 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

Related Questions

Y-axis movement stuck. Help me please :c,Not Moving by pressing Button :C. Help me please 0 Answers

player tilting left or right on key press / while turning left or right? 0 Answers

2D Top-Down Character: How to make my character move using physics? 1 Answer

How to make a turn like the Temple Run and NO THING ? 2 Answers

Rigidbody2D.MovePosition() doesn't do anything (but animations and transform.Translate() works) 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