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
0
Question by CrOnNoS · Feb 16, 2017 at 10:35 PM · movementaddforce

Trying to work with Addforce to move my character

so, following "this and that" i achieved something close to what i want. But there's one thing happening which i don't understand why. My character is moving around as it should, but when it collides with a wall (empty object with default sprite render and 2dcollider, no changes at all) he "jumps" to "get off" off the wall. If i'm moving close to the wall, for example to the right side, and then change to the left, my character "jumps" away from the wall before really move to the right

*the gravity scale is 0. It's not falling and it happens with the walls in any side.

 public class PlayerController : MonoBehaviour
 {
 
     private Vector2 moveDirection;
     public MovableCreature player;
 
     private void Start()
     {
         moveDirection = new Vector2();
     }
 
     public void SetPlayer(MovableCreature player)
     {
         this.player = player;
     }
 
     void FixedUpdate()
     {
         moveDirection.x = Input.GetAxis("Horizontal");
         moveDirection.y = Input.GetAxis("Vertical");
 
         if (moveDirection.x != 0 || moveDirection.y != 0)
         {
             if (moveDirection.x < 0.3f && moveDirection.x > -0.3f) moveDirection.x = 0;
             if (moveDirection.y < 0.3f && moveDirection.y > -0.3f) moveDirection.y = 0;
 
             player.MoveTo(moveDirection);
         }
     }
 
 }

 using UnityEngine;
 using System.Collections;
 
 public class Movable : MonoBehaviour
 {
     private float speed = 2000f;
     private float runningSpeedMultiplier = 2f;
     private float runningSpeed = 1;
     protected Vector2 moveDirection = new Vector2();
     protected Rigidbody2D creatureRigidbody;
     protected bool movementLocked;
 
     protected void Start()
     {
         creatureRigidbody = GetComponent<Rigidbody2D>();
         creatureRigidbody.gravityScale = 0;
         //creatureRigidbody.mass = 0;
         creatureRigidbody.drag = MovementConfigs.FRICTION;
         creatureRigidbody.angularDrag = MovementConfigs.FRICTION;
     }
 
     public void setSpeed(float speed)
     {
         this.speed = speed;
     }
 
     public void setrunningSpeedMultiplier(float speed)
     {
         this.speed = speed;
     }
 
     public void SetRunning(bool isRunning)
     {
         if (isRunning)
         {
             runningSpeed = runningSpeedMultiplier;
         }
         else
         {
             runningSpeed = 1;
         }
     }
 
     public void MoveTo(Vector2 moveDirection)
     {
         this.moveDirection = moveDirection;
     }
 
     protected void FixedUpdate()
     {
         if (!movementLocked)
         {
             moveDirection = moveDirection.normalized;
             moveDirection *= speed * runningSpeed;
           
             if (moveDirection.magnitude != 0)
             {
                 creatureRigidbody.AddForce(moveDirection * Time.deltaTime);
                 creatureRigidbody.MoveRotation(Operations.AngleDegrees(moveDirection));
             }
             else
             {
                 creatureRigidbody.velocity = Vector2.zero;
             }
         }
 
     }
 }
 


alt text

alt text

goingright.jpg (14.4 kB)
goingleft.jpg (12.7 kB)
Comment
Add comment · Show 2
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 hexagonius · Feb 16, 2017 at 11:03 PM 0
Share

within AddForce you're using your position, which is not correct. only use the direction.

avatar image CrOnNoS hexagonius · Feb 17, 2017 at 12:14 AM 0
Share

yeah, changed from $$anonymous$$ovePosition and forgot to remove this. Thanks for noticing. Still, since i were moving around the 0,0, it wasn't changing much and mainly, it was not the reason for the "knockback" from the walls

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by CrOnNoS · Feb 17, 2017 at 12:22 AM

ok, just realized this "bug" happens because of the way i'm rotating my object.

 creatureRigidbody.MoveRotation(Operations.AngleDegrees(moveDirection));

Where this method return the angle in degress of the moveDirection Vector. Probably since the collision box is a rectangle, it's "tossing" my player when i try to force rotation on it.

Gonne try working something out. Gotta find the right way to rotate it. But if someone can give me a hint.

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

112 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

Related Questions

Player going through walls 1 Answer

How to move an Instantiated Object towards a moving Object? 0 Answers

Car game and simple drift system with rigidbody.velocity 1 Answer

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

So this is the script and I want to be able to boost my speed with a press of a button for example "Jump",Can't increase my movement with GetbuttonDown 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