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 PnguinMster7 · Aug 05, 2016 at 01:26 PM · c#2d gameglitchai problems

2D AI Follow Better

I'm creating a Sports game with my friend and i have ran into a problem, i have tried to make an ai that follows the ball on the x axis only for now but there is a glitch where when it gets near the ball the ai starts to glitch out by moving back and forward from the ball and its really annoying, hope you can help. public class OpponentAi : MonoBehaviour {

     public float oppSpeed;
 
     Rigidbody2D oppRB;
 
     GameObject ball;
 
 
     public GameObject opp;
 
 
     // Use this for initialization
     void Start () {
         oppRB = GetComponent<Rigidbody2D> ();
 
         opp = GetComponent<GameObject> ();
     }
     
     // Update is called once per frame
     void Update () {
 
         ball = GameObject.FindGameObjectWithTag ("Ball");
 
         if (opp.transform.position.x >= ball.transform.position.x) {
             oppRB.velocity = new Vector2 (-oppSpeed, oppRB.velocity.y);
         }
         if (opp.transform.position.x <= ball.transform.position.x) {
             oppRB.velocity = new Vector2 (oppSpeed, oppRB.velocity.y);
         }
 
     }
 }
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by MrFijiWiji · Aug 05, 2016 at 02:37 PM

Hi there,

Your problem is right here:

  // Update is called once per frame
  void Update () {
  
      ball = GameObject.FindGameObjectWithTag ("Ball");
  
      if (opp.transform.position.x >= ball.transform.position.x) {
          oppRB.velocity = new Vector2 (-oppSpeed, oppRB.velocity.y);
      }
      if (opp.transform.position.x <= ball.transform.position.x) {
          oppRB.velocity = new Vector2 (oppSpeed, oppRB.velocity.y);
      }

 

}

To begin with I'd cache the ball in the Start function as performing it with every Update cycle isn't particularly efficient.

The main issue is that you have no condition for when your AI has reached the ball. At the minute, the code is essentially saying :

 if (AI has ran past the ball)
 {
      Run back towards it;
 }
 
 if (AI has not yet reached the ball)
 {
      Run towards it.
 }

This is what is causing your AI to "glitch out".

A simple distance check from your player to the ball in Update would allow you to implement the behaviour you would like when your AI is near the ball.

Example:

 float distance = 1f;
 
 void Start() {
 
      ball = GameObject.FindGameObjectWithTag ("Ball");
 }
 
 void Update () {
 
 if (opp.transform.position.x - ball.transform.position.x <= distance)
 {
      DoWhatYouNeedHere
 }

}

You could then stop the AI, make him jump or do whatever it is you need to do when he gets near the ball.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

how to disable dontdestroyonload on a specific scene 2 Answers

Why does my enemy teleport to my player? 2 Answers

2D AI movement 0 Answers

Selecting a game object in Unity 2d 3 Answers

How can I reset the score counter? 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