Help with moving game object horizontally from one end of screen to the other
Normally this wouldn't be confusing to me, but due to having an array with multiple objects (of the same type) inside my confusion continues to grow. I have 3 different enemies spawning at 1 of 6 spawn points (all are off the screen). When the enemy spawns I want it to move horizontally towards the opposite end of the screen and then destroyed. I am having a difficult time with this because I am trying to access the transform for multiple objects. I have tried setting up a foreach (player in Players) follwed by if statements (if enemy spawnpoint >0) followed by player.GetComponent, but I have had no luck. Do I need to define a Vector 3 outside of the methods such as Vector3 transform =transform.position? I have done countless hours of research and tutorial viewing, but nothing seems to be helping. Moving an object across the screen cannot be that difficult. Any help would be appreciated!
Here's my code:
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class TempSpawner : MonoBehaviour{
//public float runningPlayerSpeed;
public Transform []spawnPoints;
public float spawnTime = 2f;
public GameObject [] Players;
Vector2 tempPos;
//public SpriteRenderer mySpriteRenderer;
//public float minSpeed;
//public float maxSpeed;
//private float currentSpeed;
void Start(){
InvokeRepeating ("SpawnPlayers", spawnTime, spawnTime);
//currentSpeed = Random.Range (minSpeed, maxSpeed);
}
void Update(){
//float amountToMove = currentSpeed * Time.deltaTime;
//transform.Translate (Vector3.right * amountToMove);
int spawnIndex = Random.Range (0, spawnPoints.Length);
//int objectIndex = Random.Range (0, Players.Length);
foreach (var player in Players) {
/*if (spawnPoints [spawnIndex].position .x > 0) {
tempPos = transform.position;
tempPos.x = -0.05f;
transform.position = tempPos;
}
if (spawnPoints [spawnIndex].position .x < 0) {
tempPos = transform.position;
tempPos.x = 0.05f;
transform.position = tempPos;
}*/
player.GetComponent <SpriteRenderer > ().flipX = spawnPoints [spawnIndex].position.x > 0;
/*if (spawnPoints [spawnIndex].position.x < 0) {
player.GetComponent <SpriteRenderer > ().flipX = true;
}
if (spawnPoints [spawnIndex].position.x > 0) {
player.GetComponent <SpriteRenderer > ().flipX = false;
}*/
}
/*if (spawnPoints [spawnIndex].position.x == 10) {
player.GetComponent <SpriteRenderer > ().flipX = true;
//SpriteRenderer sr = gameObject.GetComponent<SpriteRenderer>();
//sr.flipX = true;
//Players [objectIndex].GetComponent <SpriteRenderer > (mySpriteRenderer );
//mySpriteRenderer.flipX = true;
//Players [objectIndex].transform.localScale.x == -1f;
//mySpriteRenderer.flipX = true;
//GameObject.FindGameObjectsWithTag ("Running Players");
} else if (spawnPoints [spawnIndex].position.x == -10) {
player.GetComponent <SpriteRenderer > ().flipX = false;
}
}*/
}
void SpawnPlayers(){
int spawnIndex = Random.Range (0, spawnPoints.Length);
int objectIndex = Random.Range (0, Players.Length);
Instantiate (Players [objectIndex], spawnPoints [spawnIndex].position, spawnPoints [spawnIndex].rotation );
}
}
Your answer
Follow this Question
Related Questions
Bug: Unity InputManager sets Horizontal/Vertical input value on Window Focus 0 Answers
Accessing same script through array of objects 1 Answer
Array does not serialize properly in a prefab instance for a scene 0 Answers
sort in ascending order the gameobjects of an array, 0 Answers
How do i move a game object in front of another one 2D? 1 Answer