Hi all that sees this, I just thought I would add my take on an easy to understand movement system with random direction. (bonus! it doesn’t get stuck on edges if you have an unlucky frame drop)
public class EnemySpawner : MonoBehaviour {
public GameObject enemyPrefab;
bool initialDirection;
int direction;
float xMin;
float xMax;
[SerializeField] private float width;
[SerializeField] private float height;
[SerializeField] private float moveSpeed;
// Use this for initialization
void Start()
{
float disatance = transform.position.z - Camera.main.transform.position.z;
Vector3 leftMost = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, disatance));
Vector3 RightMost = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, disatance));
xMin = (leftMost.x + width/2);
xMax = (RightMost.x - width/2);
initialDirection = (Random.value > 0.5f);
if (initialDirection)
{
direction = 1;
}
else
{
direction = -1;
}
foreach (Transform child in transform)
{
GameObject enemy = (GameObject)Instantiate(enemyPrefab, child.position, Quaternion.identity);
enemy.transform.parent = child;
}
}
public void OnDrawGizmos()
{
Gizmos.DrawWireCube(transform.position, new Vector3(width,height));
}
void FixedUpdate()
{
if (transform.position.x <= xMin || transform.position.x >= xMax)
{
direction *= -1;
}
Vector2 moveXPos = new Vector2(transform.position.x + (moveSpeed * direction), transform.position.y);
transform.position = moveXPos;
}
}