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 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.

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

Trying to Make an Animation Work in Unity 5 0 Answers

Unity Android movement 1 Answer

Moving only if straight path dijkstra 1 Answer

How can I straighten my character's movement and actions? 0 Answers

Set animation for movement help?? 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