Pong - Why does the opponent move so jerky?

I have created a small Pong example, which is functioning.
The opponent, however is moving very jerky. I suspect it is because the ball is constantly moving and the script is constantly updating, How would I make this more fluid?

public class Opponent : MonoBehaviour {

public float Speed = 2;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void FixedUpdate () {

	GameObject ball = GameObject.Find ("Ball");

	Vector2 ballPos = ball.GetComponent<Rigidbody2D> ().position;
	float ballY = ballPos.y;

		if (ballY > gameObject.GetComponent<Rigidbody2D> ().position.y)
		GetComponent<Rigidbody2D> ().velocity = new Vector2 (0, 1) * Speed;

		if (ballY < gameObject.GetComponent<Rigidbody2D> ().position.y)
		GetComponent<Rigidbody2D> ().velocity = new Vector2 (0, -1) * Speed;

}

}

You need some sort of cushion, the problem with the way you have it set up right now is it’s basically doing this:

Physics update - Set velocity 
Physics update - moved to far, set velocity backwards
Physics update - moved to far, set velocity forwards again
Physics update - moved to far, set velocity backwards again
etc. etc.

Setting the velocity to the velocity of the ball would probably solve the problem. Start with what you have, but have a cushion so it’s not either or, a space between moving left and right that when the ball is in that space, the velocity is set to that of the ball.

 public float Speed = 2;
 private Rigidbody2D rigid;
 private Rigidbody2D ballRigid;
 private GameObject ball;
 public float cushion = 2f; //change to your need

 void Awake() {
    rigid = GetComponent<Rigidbody2D>();
    ball = GameObject.FindGameObjectWithTag("Ball"); //this is faster than GameObject.Find and should not be called every frame or physics update
    ballRigid = ball.GetComponent<Rigidbody2D>();
  }
 
 void FixedUpdate () {
     Vector2 ballPos = ball.position;
     float ballY = ballPos.y;
     if (ballY > rigid ().position.y + cushion)
         rigid.velocity = new Vector2 (0, 1) * Speed;
     else if (ballY < rigid.position.y - cushion)
         rigid.velocity = new Vector2 (0, -1) * Speed;
     else if (ballY > rigid.position.y - cushion && ballY < rigid.position.y + cushion)
         rigid.velocity = new Vector2(0, ballRigid.velocity.y);
 }

Thanks for your replies.

I found the jerky movement is while the AI paddle is traveling in one direction, not changing direction.
Instead of updating the movement for every change in the balls rigidbody2d.
I’m going to need to find the direction of the ball then where it will collide with the x value of the paddle.
I’ll send the paddle toward the point of the ray hit on it’s x value.

Any suggestions in code would be appreciated.