• 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 Neferlem · Apr 02, 2019 at 11:53 AM · animationmovementtriggermovement scriptmovetowards

Interrupt a MoveTowards when triggering

Hi everyone, I'm trying to make a MoveTowards movement to be interrupted, when moving object enters in a trigger area. The MoveTowards function in triggered by a first trigger when player is approaching enemy. Then, when enemy is close to player, a second trigger plays an animation. And I want the MoveTowards movement to be interrupted when enemy is inside 2nd trigger area.

Here is the code of my script attached to enemy :

 public class HitBoxPlayer : MonoBehaviour
 {
     public Animator animator;
     public Transform stopPosition;
     private EnemyAI triggeredBool;
 
     void Start()
     {
         animator = GetComponent<Animator>();
         stopPosition = GetComponent<Transform>();
     }
 
     void OnTriggerEnter2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "PlayerHitBox")
         {
             animator.SetTrigger("Push");
         }
     }
 
     void OnTriggerStay2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "PlayerHitBox")
         {
             animator.SetFloat("Moving", 0);
         }
     }
 
     void OnTriggerExit2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "PlayerHitBox")
         {
             animator.ResetTrigger("Push");
         }
     }
 
     void Update()
     {
     }
 }

And here is the code for enemy movement :

 public class EnemyAI : MonoBehaviour
 {
     public float speed;
     public Transform target;
     public Animator animator;
     public bool triggered = false;
     private bool facingRight = false;
 
     void Start()
     {
         target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
     }
 
     void OnTriggerStay2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "Player")
         {
             triggered = true;
             if (triggered == true)
             {
                 transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
                 animator.SetFloat("Moving", Mathf.Abs(speed));
             }
         }
     }
 
     void Update()
     {
         if (target.transform.position.x < gameObject.transform.position.x && facingRight)
             Flip();
         if (target.transform.position.x > gameObject.transform.position.x && !facingRight)
             Flip();
     }
 
     void Flip() //function used to make enemy flip left/right
     {
         facingRight = !facingRight;
         Vector3 tmpScale = gameObject.transform.localScale;
         tmpScale.x *= -1;
         gameObject.transform.localScale = tmpScale;
     }
 
     void OnTriggerExit2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "Player")
         {
             animator.SetFloat("Moving", 0);
             triggered = false;
         }
     }
 }

I tried to make triggered function false by calling it inside HitBoxPlayer, but nothing so far. Also tried to get enemy position and T instant and to make a transform.position with thoses data, neither.

Thanks to anyone who can find out an answer.

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

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by IronBytes · Apr 02, 2019 at 12:10 PM

First of all your triggered variable doesn't actually do anything from what I can tell.

Secondly you could achieve what you're looking for by calculating the distance between the player and the enemy only execute MoveTowards as long as the distance is higher than some threshold. Once the enemy is closer than the threshold you would just not move it:

      void OnTriggerStay2D(Collider2D other)
      {
          if (other.GetComponent<Collider2D>().tag == "Player")
          {
              if (distance > threshold)
              {
                  transform.position = 
                      Vector2.MoveTowards(
                          transform.position, target.position, speed * Time.deltaTime);
                  animator.SetFloat("Moving", Mathf.Abs(speed));
              }
              else
              {
                  animator.SetFloat("Moving", 0);
              }
          }
      }


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
avatar image
0

Answer by Neferlem · Apr 02, 2019 at 08:42 PM

Thanks @IronBytes ! Here is my code with changes you suggested.

 public class EnemyAI : MonoBehaviour
 {
     public float speed;
     public Transform target;
     public Animator animator;
     private bool facingRight = false;
     public float threshold;
     private float distance;
 
     void Start()
     {
         target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
     }
 
     void OnTriggerStay2D(Collider2D other) 
     {
         if (other.GetComponent<Collider2D>().tag == "Player")
         {
             if (distance > threshold)
             {
                 transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
                 animator.SetFloat("Moving", Mathf.Abs(speed));
                 animator.SetBool("Push", false); //Change my trigger to a bool
             }
             else
             {
                 animator.SetFloat("Moving", 0);
                 animator.SetBool("Push", true);
             }
         }
     }
 
     void Update()
     {
         if (target.transform.position.x < gameObject.transform.position.x && facingRight)
             Flip();
         if (target.transform.position.x > gameObject.transform.position.x && !facingRight)
             Flip();
         distance = Vector3.Distance(target.position, transform.position);
     }
 
     void Flip()
     {
         facingRight = !facingRight;
         Vector3 tmpScale = gameObject.transform.localScale;
         tmpScale.x *= -1;
         gameObject.transform.localScale = tmpScale;
     }
 
     void OnTriggerExit2D(Collider2D other)
     {
         if (other.GetComponent<Collider2D>().tag == "Player")
         {
             animator.SetFloat("Moving", 0);
             animator.SetBool("Push", false);
         }
     }
 }
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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

311 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image 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

Script click to move not working, MoveTowards always move forward 3 Answers

A way to "freeze" the position of the animation? 1 Answer

How can I animate an object to my proximity and movement? 1 Answer

How to trigger animations in a script using character controller ? 0 Answers

Moving only if straight path dijkstra 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