Best way to move a game object in Unity 3D












1















I'm going through a few different Unity tutorials and the way a game object is moved around in each is a little different.



What are the pros/cons to each of these methods and which is preferred for a first person RPG?



// Here I use MovePosition function on the rigid body of this component
Rigidbody.MovePosition(m_Rigidbody.position + movement);

//Here I apply force to the rigid body and am able to choose force mode
Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);

// Here I directly change a transforms position value, in this case the cam
Transform.transform.position = playerTransform.position + cameraOffset;


Thanks!!



EDIT;



Something I have noticed is that the applied force seems to memic wheeled vehicles while the position changes memic walking/running.










share|improve this question





























    1















    I'm going through a few different Unity tutorials and the way a game object is moved around in each is a little different.



    What are the pros/cons to each of these methods and which is preferred for a first person RPG?



    // Here I use MovePosition function on the rigid body of this component
    Rigidbody.MovePosition(m_Rigidbody.position + movement);

    //Here I apply force to the rigid body and am able to choose force mode
    Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);

    // Here I directly change a transforms position value, in this case the cam
    Transform.transform.position = playerTransform.position + cameraOffset;


    Thanks!!



    EDIT;



    Something I have noticed is that the applied force seems to memic wheeled vehicles while the position changes memic walking/running.










    share|improve this question



























      1












      1








      1


      1






      I'm going through a few different Unity tutorials and the way a game object is moved around in each is a little different.



      What are the pros/cons to each of these methods and which is preferred for a first person RPG?



      // Here I use MovePosition function on the rigid body of this component
      Rigidbody.MovePosition(m_Rigidbody.position + movement);

      //Here I apply force to the rigid body and am able to choose force mode
      Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);

      // Here I directly change a transforms position value, in this case the cam
      Transform.transform.position = playerTransform.position + cameraOffset;


      Thanks!!



      EDIT;



      Something I have noticed is that the applied force seems to memic wheeled vehicles while the position changes memic walking/running.










      share|improve this question
















      I'm going through a few different Unity tutorials and the way a game object is moved around in each is a little different.



      What are the pros/cons to each of these methods and which is preferred for a first person RPG?



      // Here I use MovePosition function on the rigid body of this component
      Rigidbody.MovePosition(m_Rigidbody.position + movement);

      //Here I apply force to the rigid body and am able to choose force mode
      Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);

      // Here I directly change a transforms position value, in this case the cam
      Transform.transform.position = playerTransform.position + cameraOffset;


      Thanks!!



      EDIT;



      Something I have noticed is that the applied force seems to memic wheeled vehicles while the position changes memic walking/running.







      unity3d game-physics






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 20 at 0:24







      Half_Duplex

















      asked Jan 20 at 0:06









      Half_DuplexHalf_Duplex

      1,17411326




      1,17411326
























          2 Answers
          2






          active

          oldest

          votes


















          1














          RigidBodies and Velocities/Physics



          The only time, I personally have used the rigidbodys system was when implementing my own boids (flocking behaviour) as you need to calculate a few separate vectors and apply them all to the unit.



             Rigidbody.MovePosition(m_Rigidbody.position + movement);


          This calculates a movement vector towards a target for you using the physics system, so the object's velocity and movement can still be affected by drag, angular drag and so on.



          This particular function is a wrapper around Rigidbody.AddForce I believe.



          Pros :




          • Good if realistic physical reactions is something you are going for


          Cons:





          • A bit unwieldy to use if all you are trying to achieve is moving a object from point A to point B.




            • Sometimes an errant setting set too high somewhere (for example: Mass > 10000000) can cause really screwy bugs in behaviour that can be quite a pain to pin down and mitigate.




          Notes: Rigidbodies when colliding with another Rigidbody would bounce from each other depending on physics settings.



          They are also affected by gravity. Basically they try to mimic real life objects but it can be sometimes difficult to tame the objects and make them do exactly what you want.



          And Rigidbody.AddForce is basically the same as above except you calculate the vector yourself.



          So for example to get a vector towards a target you would do



          Vector3 target = target.position - myPosition;

          Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


          If you don't plan on having any major physics mechanics in your game, I would suggest moving by interpolating the objects position.



          As it is far easier to get things to behave how you want, unless of course you are going for physical realism!



          Interpolating the units position



          Pros :




          • Perhaps a little strange to understand at first but far simpler to make objects move how you want


          Cons:




          • If you wanted realistic reactions to objects impacting you'd have to do a lot of the work yourself. But sometimes this is preferable to using a physics system then trying, as I've said earlier to tame it.


          You would use the technique in say a Pokemon game, you don't stop in Pokemon and wait for ash to stop skidding or hit a wall and bounce uncontrollably backwards.



          This particular function is setting the objects position like teleporting but you can also use this to move the character smoothly to a position. I suggest looking up 'tweens' for smoothly interpolating between variables.



              //change the characters x by + 1 every tick, 
          Transform.transform.position.x += 1f;





          share|improve this answer

































            1















            1. Rigidbody.MovePosition(m_Rigidbody.position + movement);


            From the docs:




            If Rigidbody interpolation is enabled on the Rigidbody, calling Rigidbody.MovePosition results in a smooth transition between the two positions in any intermediate frames rendered. This should be used if you want to continuously move a rigidbody in each FixedUpdate.
            https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html





            1. Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


            This will make the object accelerate, so it won't travel at a constant velocity (this is because of Newton's second law, Force=mass*acceleration). Also if you have another force going in the opposite direction this force could get cancelled out and the object won't move at all.




            1. Transform.transform.position = playerTransform.position + cameraOffset;


            This will teleport the object. No smooth transition, no interaction with any forces already in the game, just an instant change in position.






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54272462%2fbest-way-to-move-a-game-object-in-unity-3d%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              RigidBodies and Velocities/Physics



              The only time, I personally have used the rigidbodys system was when implementing my own boids (flocking behaviour) as you need to calculate a few separate vectors and apply them all to the unit.



                 Rigidbody.MovePosition(m_Rigidbody.position + movement);


              This calculates a movement vector towards a target for you using the physics system, so the object's velocity and movement can still be affected by drag, angular drag and so on.



              This particular function is a wrapper around Rigidbody.AddForce I believe.



              Pros :




              • Good if realistic physical reactions is something you are going for


              Cons:





              • A bit unwieldy to use if all you are trying to achieve is moving a object from point A to point B.




                • Sometimes an errant setting set too high somewhere (for example: Mass > 10000000) can cause really screwy bugs in behaviour that can be quite a pain to pin down and mitigate.




              Notes: Rigidbodies when colliding with another Rigidbody would bounce from each other depending on physics settings.



              They are also affected by gravity. Basically they try to mimic real life objects but it can be sometimes difficult to tame the objects and make them do exactly what you want.



              And Rigidbody.AddForce is basically the same as above except you calculate the vector yourself.



              So for example to get a vector towards a target you would do



              Vector3 target = target.position - myPosition;

              Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


              If you don't plan on having any major physics mechanics in your game, I would suggest moving by interpolating the objects position.



              As it is far easier to get things to behave how you want, unless of course you are going for physical realism!



              Interpolating the units position



              Pros :




              • Perhaps a little strange to understand at first but far simpler to make objects move how you want


              Cons:




              • If you wanted realistic reactions to objects impacting you'd have to do a lot of the work yourself. But sometimes this is preferable to using a physics system then trying, as I've said earlier to tame it.


              You would use the technique in say a Pokemon game, you don't stop in Pokemon and wait for ash to stop skidding or hit a wall and bounce uncontrollably backwards.



              This particular function is setting the objects position like teleporting but you can also use this to move the character smoothly to a position. I suggest looking up 'tweens' for smoothly interpolating between variables.



                  //change the characters x by + 1 every tick, 
              Transform.transform.position.x += 1f;





              share|improve this answer






























                1














                RigidBodies and Velocities/Physics



                The only time, I personally have used the rigidbodys system was when implementing my own boids (flocking behaviour) as you need to calculate a few separate vectors and apply them all to the unit.



                   Rigidbody.MovePosition(m_Rigidbody.position + movement);


                This calculates a movement vector towards a target for you using the physics system, so the object's velocity and movement can still be affected by drag, angular drag and so on.



                This particular function is a wrapper around Rigidbody.AddForce I believe.



                Pros :




                • Good if realistic physical reactions is something you are going for


                Cons:





                • A bit unwieldy to use if all you are trying to achieve is moving a object from point A to point B.




                  • Sometimes an errant setting set too high somewhere (for example: Mass > 10000000) can cause really screwy bugs in behaviour that can be quite a pain to pin down and mitigate.




                Notes: Rigidbodies when colliding with another Rigidbody would bounce from each other depending on physics settings.



                They are also affected by gravity. Basically they try to mimic real life objects but it can be sometimes difficult to tame the objects and make them do exactly what you want.



                And Rigidbody.AddForce is basically the same as above except you calculate the vector yourself.



                So for example to get a vector towards a target you would do



                Vector3 target = target.position - myPosition;

                Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                If you don't plan on having any major physics mechanics in your game, I would suggest moving by interpolating the objects position.



                As it is far easier to get things to behave how you want, unless of course you are going for physical realism!



                Interpolating the units position



                Pros :




                • Perhaps a little strange to understand at first but far simpler to make objects move how you want


                Cons:




                • If you wanted realistic reactions to objects impacting you'd have to do a lot of the work yourself. But sometimes this is preferable to using a physics system then trying, as I've said earlier to tame it.


                You would use the technique in say a Pokemon game, you don't stop in Pokemon and wait for ash to stop skidding or hit a wall and bounce uncontrollably backwards.



                This particular function is setting the objects position like teleporting but you can also use this to move the character smoothly to a position. I suggest looking up 'tweens' for smoothly interpolating between variables.



                    //change the characters x by + 1 every tick, 
                Transform.transform.position.x += 1f;





                share|improve this answer




























                  1












                  1








                  1







                  RigidBodies and Velocities/Physics



                  The only time, I personally have used the rigidbodys system was when implementing my own boids (flocking behaviour) as you need to calculate a few separate vectors and apply them all to the unit.



                     Rigidbody.MovePosition(m_Rigidbody.position + movement);


                  This calculates a movement vector towards a target for you using the physics system, so the object's velocity and movement can still be affected by drag, angular drag and so on.



                  This particular function is a wrapper around Rigidbody.AddForce I believe.



                  Pros :




                  • Good if realistic physical reactions is something you are going for


                  Cons:





                  • A bit unwieldy to use if all you are trying to achieve is moving a object from point A to point B.




                    • Sometimes an errant setting set too high somewhere (for example: Mass > 10000000) can cause really screwy bugs in behaviour that can be quite a pain to pin down and mitigate.




                  Notes: Rigidbodies when colliding with another Rigidbody would bounce from each other depending on physics settings.



                  They are also affected by gravity. Basically they try to mimic real life objects but it can be sometimes difficult to tame the objects and make them do exactly what you want.



                  And Rigidbody.AddForce is basically the same as above except you calculate the vector yourself.



                  So for example to get a vector towards a target you would do



                  Vector3 target = target.position - myPosition;

                  Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                  If you don't plan on having any major physics mechanics in your game, I would suggest moving by interpolating the objects position.



                  As it is far easier to get things to behave how you want, unless of course you are going for physical realism!



                  Interpolating the units position



                  Pros :




                  • Perhaps a little strange to understand at first but far simpler to make objects move how you want


                  Cons:




                  • If you wanted realistic reactions to objects impacting you'd have to do a lot of the work yourself. But sometimes this is preferable to using a physics system then trying, as I've said earlier to tame it.


                  You would use the technique in say a Pokemon game, you don't stop in Pokemon and wait for ash to stop skidding or hit a wall and bounce uncontrollably backwards.



                  This particular function is setting the objects position like teleporting but you can also use this to move the character smoothly to a position. I suggest looking up 'tweens' for smoothly interpolating between variables.



                      //change the characters x by + 1 every tick, 
                  Transform.transform.position.x += 1f;





                  share|improve this answer















                  RigidBodies and Velocities/Physics



                  The only time, I personally have used the rigidbodys system was when implementing my own boids (flocking behaviour) as you need to calculate a few separate vectors and apply them all to the unit.



                     Rigidbody.MovePosition(m_Rigidbody.position + movement);


                  This calculates a movement vector towards a target for you using the physics system, so the object's velocity and movement can still be affected by drag, angular drag and so on.



                  This particular function is a wrapper around Rigidbody.AddForce I believe.



                  Pros :




                  • Good if realistic physical reactions is something you are going for


                  Cons:





                  • A bit unwieldy to use if all you are trying to achieve is moving a object from point A to point B.




                    • Sometimes an errant setting set too high somewhere (for example: Mass > 10000000) can cause really screwy bugs in behaviour that can be quite a pain to pin down and mitigate.




                  Notes: Rigidbodies when colliding with another Rigidbody would bounce from each other depending on physics settings.



                  They are also affected by gravity. Basically they try to mimic real life objects but it can be sometimes difficult to tame the objects and make them do exactly what you want.



                  And Rigidbody.AddForce is basically the same as above except you calculate the vector yourself.



                  So for example to get a vector towards a target you would do



                  Vector3 target = target.position - myPosition;

                  Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                  If you don't plan on having any major physics mechanics in your game, I would suggest moving by interpolating the objects position.



                  As it is far easier to get things to behave how you want, unless of course you are going for physical realism!



                  Interpolating the units position



                  Pros :




                  • Perhaps a little strange to understand at first but far simpler to make objects move how you want


                  Cons:




                  • If you wanted realistic reactions to objects impacting you'd have to do a lot of the work yourself. But sometimes this is preferable to using a physics system then trying, as I've said earlier to tame it.


                  You would use the technique in say a Pokemon game, you don't stop in Pokemon and wait for ash to stop skidding or hit a wall and bounce uncontrollably backwards.



                  This particular function is setting the objects position like teleporting but you can also use this to move the character smoothly to a position. I suggest looking up 'tweens' for smoothly interpolating between variables.



                      //change the characters x by + 1 every tick, 
                  Transform.transform.position.x += 1f;






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Jan 20 at 1:31

























                  answered Jan 20 at 1:06









                  Pheonix2105Pheonix2105

                  6702720




                  6702720

























                      1















                      1. Rigidbody.MovePosition(m_Rigidbody.position + movement);


                      From the docs:




                      If Rigidbody interpolation is enabled on the Rigidbody, calling Rigidbody.MovePosition results in a smooth transition between the two positions in any intermediate frames rendered. This should be used if you want to continuously move a rigidbody in each FixedUpdate.
                      https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html





                      1. Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                      This will make the object accelerate, so it won't travel at a constant velocity (this is because of Newton's second law, Force=mass*acceleration). Also if you have another force going in the opposite direction this force could get cancelled out and the object won't move at all.




                      1. Transform.transform.position = playerTransform.position + cameraOffset;


                      This will teleport the object. No smooth transition, no interaction with any forces already in the game, just an instant change in position.






                      share|improve this answer




























                        1















                        1. Rigidbody.MovePosition(m_Rigidbody.position + movement);


                        From the docs:




                        If Rigidbody interpolation is enabled on the Rigidbody, calling Rigidbody.MovePosition results in a smooth transition between the two positions in any intermediate frames rendered. This should be used if you want to continuously move a rigidbody in each FixedUpdate.
                        https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html





                        1. Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                        This will make the object accelerate, so it won't travel at a constant velocity (this is because of Newton's second law, Force=mass*acceleration). Also if you have another force going in the opposite direction this force could get cancelled out and the object won't move at all.




                        1. Transform.transform.position = playerTransform.position + cameraOffset;


                        This will teleport the object. No smooth transition, no interaction with any forces already in the game, just an instant change in position.






                        share|improve this answer


























                          1












                          1








                          1








                          1. Rigidbody.MovePosition(m_Rigidbody.position + movement);


                          From the docs:




                          If Rigidbody interpolation is enabled on the Rigidbody, calling Rigidbody.MovePosition results in a smooth transition between the two positions in any intermediate frames rendered. This should be used if you want to continuously move a rigidbody in each FixedUpdate.
                          https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html





                          1. Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                          This will make the object accelerate, so it won't travel at a constant velocity (this is because of Newton's second law, Force=mass*acceleration). Also if you have another force going in the opposite direction this force could get cancelled out and the object won't move at all.




                          1. Transform.transform.position = playerTransform.position + cameraOffset;


                          This will teleport the object. No smooth transition, no interaction with any forces already in the game, just an instant change in position.






                          share|improve this answer














                          1. Rigidbody.MovePosition(m_Rigidbody.position + movement);


                          From the docs:




                          If Rigidbody interpolation is enabled on the Rigidbody, calling Rigidbody.MovePosition results in a smooth transition between the two positions in any intermediate frames rendered. This should be used if you want to continuously move a rigidbody in each FixedUpdate.
                          https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html





                          1. Rigidbody.AddForce(15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);


                          This will make the object accelerate, so it won't travel at a constant velocity (this is because of Newton's second law, Force=mass*acceleration). Also if you have another force going in the opposite direction this force could get cancelled out and the object won't move at all.




                          1. Transform.transform.position = playerTransform.position + cameraOffset;


                          This will teleport the object. No smooth transition, no interaction with any forces already in the game, just an instant change in position.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Jan 20 at 0:57









                          jbinvntjbinvnt

                          6127




                          6127






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54272462%2fbest-way-to-move-a-game-object-in-unity-3d%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Liquibase includeAll doesn't find base path

                              How to use setInterval in EJS file?

                              Petrus Granier-Deferre