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 lwks · Apr 14, 2018 at 08:56 PM · programmingrigidbody2dkinematic

Making a Dynamic Rigidboy NOT move on a specific condition

I'm making a game in the "Defend the Base" style, there are 5 lanes and enemies constantly spaw on them in the right side of the screen and the player has to spawn their own units to fight the enemies and avoid them from going through the left side of the screen, in other words, don't let them reach you (or something like that, and all units move strictly horizontaly)

I was doing fine until I had to program the movement, the units should walk against each other and when colliding they should stop moving to beat themselves to death. At first I was doing the movement with transform.Translate but then I had to change it, thing is I heard about this "CharacterController.Move" and "Rigidbody.MovePosition". Didn't manage to make it work with the CharacterController cause I needed collision checks but Rigidbody.MovePosition did it quite well. The thing is that for it to work I had to configure the Rigidbodies as dynamic and it is causing a problem. Here's the code for the PlayerUnit's movement:

 public float speed;
 
     private Rigidbody2D rb;
     private Coroutine moveCoroutine;
 
     private void Start()
     {
         rb = GetComponent<Rigidbody2D>();
         moveCoroutine = StartCoroutine("Move");
     }
 
     private IEnumerator Move()
     {
         while (true)
         {
             rb.MovePosition(transform.position + Vector3.right * speed * Time.deltaTime);
             yield return null;
         }
     }
 
     private void OnTriggerEnter2D (Collider2D col)
     {
         if (col.gameObject.name.Equals("EndWall"))
             Destroy(this.gameObject);
     }
 
     private void OnCollisionEnter2D(Collision2D collision)
     {
         if (collision.gameObject.CompareTag("EnemyUnit"))
             StopCoroutine(moveCoroutine);

         if (collision.gameObject.CompareTag("PlayerUnit"))
             StopCoroutine(moveCoroutine);
     }

(The enemies use a very similar script naturaly, and at the moment the movement is inside a Coroutine but I'll be moving it to FixedUpdate soon) After two oposing units collide they stop as they should, but when a third unit touches them it sends them both sliding away. I made a simple solution for this:

 private void OnCollisionEnter2D(Collision2D collision)
     {
         if (collision.gameObject.CompareTag("EnemyUnit"))
         {
             StopCoroutine(moveCoroutine);
             rb.isKinematic = true;
         }
         if (collision.gameObject.CompareTag("PlayerUnit"))
         {
             StopCoroutine(moveCoroutine);
             rb.isKinematic = true;
         }
     }

The thing is that every cell inside my body is telling me that I'm doing it wrong, very wrong. What is the right way of doing it?

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

0 Replies

· Add your reply
  • Sort: 

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

140 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

Related Questions

How to add speed to a child kinematic rigid body? 0 Answers

Rigdbody upforce 0 Answers

How can you change a Ridgidbody2D from Kinematic to Dynamic at runtime with GameObject.FindWithTag("myObject") ? 0 Answers

How can I move a Kinematic Rigidbody2d along the x-axis? 1 Answer

Prevent Player from passing through walls 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