Question by
laurienash · Jul 03, 2016 at 12:05 AM ·
c#endless runnerrandomizescroller
Endless runner randomised scrolling terrain: don't want first terrain when scene loads to be randomised
Hi - I'm a bit stuck on how to continue with this script.
I'm making an endless runner - so have written this script which moves 2 active terrains forward, until they reach a certain position at which point the first terrain is set to inactive, and a new second one is set to active behind the other one. (to create a conveyor belt movement)
This is working fine - but I would like that each time this scene is loaded, the terrain1 is always the first object of the terrain array.
I thought I would set this in the Awake method:
void Awake()
{
terrain1 = terrainMultiples[0];
}
But I've got stuck on working out how to not pick terrain1 in the Start method just the first time the scene is loaded.
Does anyone have an idea of how I should go about this?
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TerrainMoverScaled : MonoBehaviour {
public float moveForwards = 0f;
GameObject terrain1;
Vector3 targetPos = new Vector3 (0,0, -10);
GameObject terrain2;
public Speedometer speedGPS;
public PerspectiveSwitchFinalSepCo persp;
public TouchDetect touch;
public GameObject [] terrainMultiples;
private List<GameObject> terrainDeck;
static public float speed = 15f;
float lastspeed = 0f;
float speed2 = 0f;
public float targetSpeed = 0.0f;
float changeSpeed;
float w = 5f;
float cutoff = 40f;
bool high = false;
void Awake()
{
terrain1 = terrainMultiples[0];
}
void Start()
{
terrainDeck = new List<GameObject>(terrainMultiples);
foreach (var t in terrainMultiples)
{
t.SetActive (false);
}
terrain1 = ChooseTerrain();
terrain1.transform.position = new Vector3 (-6.85f, -3f, 33.9f);
terrainDeck.Remove(terrain1);
terrain2 = ChooseTerrain();
terrain2.transform.position = new Vector3(-6.85f, -3f, 101.63f);
terrainDeck.Remove(terrain2);
terrain1.SetActive(true);
terrain2.SetActive(true);
}
void Update () {
//if (!high && speedGPS.speedInKmPerHour > cutoff+w )//highspeed
if (Input.GetKeyDown ("w"))
{
persp.orthoToggle(false);
targetSpeed = -0.5f;
speed2=0;
changeSpeed = 4f;
high = true;
}
//if (high && speedGPS.speedInKmPerHour < cutoff-w)
if (Input.GetKeyDown("e"))
{
persp.orthoToggle(true);
targetSpeed = 0;
speed2=0;
changeSpeed = 2f;
high = false;
}
if (Mathf.Abs(moveForwards - targetSpeed) > 0.01f )
moveForwards = Mathf.SmoothDamp (moveForwards, targetSpeed, ref speed2, changeSpeed);
else
moveForwards = targetSpeed;
terrain1.transform.Translate(Vector3.forward * Time.deltaTime * moveForwards * speed);
terrain2.transform.Translate(Vector3.forward * Time.deltaTime * moveForwards * speed);
lastspeed = speedGPS.speedInKmPerHour;
}
void LateUpdate()
{
if (targetPos.z - terrain1.transform.position.z > - 5f)
{
terrain1.SetActive(false);
terrainDeck.Add(terrain1);
terrain1 = ChooseTerrain();
terrainDeck.Remove(terrain1);
terrain1.transform.position = terrain2.transform.position + new Vector3(0.0f, 0.0f, +67.73f);
terrain1.SetActive(true);
}
else if (targetPos.z - terrain2.transform.position.z > - 5f)
{
terrain2.SetActive(false);
terrainDeck.Add(terrain2);
terrain2 = ChooseTerrain();
terrainDeck.Remove(terrain2);
terrain2.transform.position = terrain1.transform.position + new Vector3(0.0f, 0.0f, +67.73f);
terrain2.SetActive(true);
}
}
GameObject ChooseTerrain()
{
int index = Random.Range (0, terrainDeck.Count -1);
return terrainDeck [index];
}
}
Best, Laurien
Comment