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 /
avatar image
0
Question by Bairne · Oct 04, 2017 at 12:20 PM · movementrigidbody2dphysics2denemyaienemies

Issues with Character Controller moving Enemies

Hi Guys,

So i'm new to coding, and have been working on making a 2D Platformer.

I have a bunch of enemies that deal damage, and move using the following code I learnt from a great Youtube Channel:

 using UnityEngine;
 using System.Collections;
 
 public class EnemyMovementController : MonoBehaviour {
 
     public float enemySpeed;
 
     Animator enemyAnimator;
 
     private Transform myTransform;
     public Transform target;
 
     // facing
 
     public GameObject enemyGraphic;
     bool canFlip = true;
     bool facingRight = false;
     float flipTime = 5f;
     float nextFlipChance  = 0f;
 
     //attacking
 
     public float chargeTime;
     float startChargeTime;
     bool charging;
     Rigidbody2D enemyRB;
 
     void Awake()
     {
         myTransform = transform;
     }
 
 
     // Use this for initialization
     void Start () {
         enemyAnimator = GetComponentInChildren<Animator> ();
         enemyRB = GetComponent<Rigidbody2D> ();
 
     }
     
     // Update is called once per frame
     void Update () {
         if (Time.time > nextFlipChance) {
             if (Random.Range (0, 10) >= 5) flipFacing ();
             nextFlipChance = Time.time + flipTime;
         }
     }
 
     void OnTriggerEnter2D(Collider2D other){
         if (other.tag == "Player") {
             if (facingRight && other.transform.position.x > transform.position.x){
                 flipFacing ();
         } else if  (!facingRight && other.transform.position.x < transform.position.x){
             flipFacing ();
         }
             canFlip = false;
             charging = true;
             startChargeTime = Time.time + chargeTime;
 
         }
     }
 
     void OnTriggerStay2D(Collider2D other){
         if (other.tag == "Player") {
             if (startChargeTime < Time.time){
                 // Get a direction vector from us to the target
                 Vector3 dir = target.position - myTransform.position;
                 
                 // Normalize it so that it's a unit direction vector
                 dir.Normalize();
                 
                 // Move ourselves in that direction
                 myTransform.position += dir * enemySpeed * Time.deltaTime;
                 enemyAnimator.SetBool("isCharging", charging);
             }
         }
     }
 
     void OnTriggerExit2D(Collider2D other){
         if (other.tag == "Player") {
             canFlip = true;
             charging = false;
 
             enemyAnimator.SetBool("isCharging", charging);
         }
     }
 
     void flipFacing(){
         if (!canFlip) return;
         float facingX = enemyGraphic.transform.localScale.x;
         facingX *= -1f;
         enemyGraphic.transform.localScale = new Vector3 (facingX, enemyGraphic.transform.localScale.y, enemyGraphic.transform.localScale.z);
         facingRight = ! facingRight;
         }
 
 }


My issue Comes when the player interacts with the enemy. As the player does not have a dynamic Rigidbody attached, mass etc do not affect it, so the player can just push the enemy around whilst taking damage should they please.

Adding a dynamic Rigidbody to the player causes a variety of glitches, like the enemies shunting or trapping the player indefinitely.

Is there any way to effectively make the enemy ignore the forces being created by the player so that it cannot be moved?

Thanks in advance for your help!

Comment
Add comment · Show 3
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 Bairne · Oct 04, 2017 at 12:35 PM 0
Share

I should add that it does seem to be the enemy movement that does cause this. I've tried removing the script and leaving it as a static object, and in this state the player cannot move it, it's only when the enemy starts to move with the script that it becomes pushable.

avatar image kikrim · Oct 04, 2017 at 02:24 PM 0
Share

So you don't want trapping player by enemies, but also you don't want to allow player to move enemies. I understood this correctly ?

avatar image Bairne kikrim · Oct 04, 2017 at 02:41 PM 0
Share

Hi $$anonymous$$ikrim,

Yes that is correct, ideally the enemy walks up to the player, begins an attack animation cycle dealing damage from a separate script, then follows while the player remains in its trigger, or stops otherwise.

The player should not be able to then run into the enemy and push it along (for reference, the player is a small man, and the enemy is a large stone block), it should ins$$anonymous$$d prevent him from running through it, forcing the player to jump.

Hope that clears it up!

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by kikrim · Oct 04, 2017 at 03:57 PM

I think enemy should live space for player simply checking if is close enough. If player and enemy has dynamic colliders then:
- enemy should have very big mass
- to move player you should override rigidbody.velocity or use AddForce.

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

106 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

Related Questions

Rigidbody2D doesn't move 0 Answers

Weird behaviour after Collision? 0 Answers

Move an object via Rigidbody2D Physics and Transform at same time 0 Answers

Child GameObject can't use MovePosition on parent's Rigidbody2D? 3 Answers

How Do I Make a Rigidbody2d keep its force and move at a consistent speed? 2 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