# Moving object on plane

Good day!

Exist object A on plane B. He moving repeatly from one side of palne to another.
I make mathematical calculations to get left and right cordinates of plane B and object A.
If plane B scale more than 3 - begin troubles. Object A just moving to the end of plane and fall. In debug log i can see than coords of object A less than plane B.

Here what i mean:

Here code:
using UnityEngine;
using System.Collections;

``````public class Enemy : MonoBehaviour {
private float PlaneSizeX = 64;
private float EnemySizeX = 64;
private float eLeft; //enemy left position

private float pLeft; //plane left position
private float pRight; //plane right position
private float Speed = 1;
private Rigidbody2D mBody;
private bool grounded = false;

// Use this for initialization
void Start () {
mBody = GetComponent<Rigidbody2D>();
eLeft = EnemySizeX * mBody.transform.localScale.x;
eLeft = -(eLeft / 2) + (mBody.transform.position.x * EnemySizeX / 2);
Debug.Log ("Enemy x : " + eLeft + " " + (eLeft + EnemySizeX * mBody.transform.localScale.x));
}

// Update is called once per frame
void Update () {
eLeft = mBody.transform.position.x * EnemySizeX - (EnemySizeX / 2);
//eRight = mBody.transform.position.x * EnemySizeX + (EnemySizeX / 2);
if (grounded) {
//right test
if ((eLeft + EnemySizeX * mBody.transform.localScale.x) >= pRight) {
Debug.Log ((eLeft + EnemySizeX * mBody.transform.localScale.x) + " >= " + pRight);
Speed = 0;
}
//left test
//if (eLeft <= pLeft)  {
//	Speed = 1;
//}
}
mBody.velocity = new Vector2(Speed, 0);
Debug.Log (eLeft + " " + (eLeft + EnemySizeX*mBody.transform.localScale.x) + " " + mBody.transform.localScale.x);
}

void OnCollisionStay2D(Collision2D coll)
{
grounded = true;
Collider2D Plane = coll.gameObject.GetComponent<Collider2D> ();
//pLeft = (Plane.transform.position.x * PlaneSizeX - (PlaneSizeX / 2)) * Plane.transform.localScale.x;
//pRight = (Plane.transform.position.x * PlaneSizeX + (PlaneSizeX / 2)) * Plane.transform.localScale.x;
float ScaledSize = PlaneSizeX * Plane.transform.localScale.x;
pLeft = -(ScaledSize)/2 + (Plane.transform.position.x * PlaneSizeX/2);
pRight = (ScaledSize)/2 + (Plane.transform.position.x * PlaneSizeX/2);
Debug.Log("Plane x: " + pLeft + " " + pRight);
}
}
``````

Get helped.
Wrong calculations.

``````using UnityEngine;
using System.Collections;

public class Enemy : MonoBehaviour {
private float eLeft;
private float eRight;

private float pLeft;
private float pRight;
private float Speed = 1;
private Rigidbody2D mBody;
private BoxCollider2D mCollider;
private bool grounded = false;

// Use this for initialization
void Start () {
mBody = GetComponent<Rigidbody2D>();
mCollider = GetComponent<BoxCollider2D>();
eLeft = transform.position.x - mCollider.bounds.size.x / 2;
eRight = transform.position.x + mCollider.bounds.size.x / 2;
}

// Update is called once per frame
void Update () {
eLeft = transform.position.x - mCollider.bounds.size.x / 2;
eRight = transform.position.x + mCollider.bounds.size.x / 2;
if (grounded) {
//right test
if (eRight >= pRight) {
Speed = -1;
}
//left test
if (eLeft <= pLeft)  {
Speed = 1;
}
}
mBody.velocity = new Vector2(Speed, 0);
}

void OnCollisionStay2D(Collision2D coll)
{
grounded = true;
Collider2D Plane = coll.gameObject.GetComponent<Collider2D> ();
pLeft = Plane.transform.position.x - Plane.bounds.size.x / 2;
pRight = Plane.transform.position.x + Plane.bounds.size.x / 2;
}
}
``````