topical media & game development

talk show tell print

lib-unity-tutorial-m2h-2-Assets-Game-2-Jump-game-Scripts-GameControl.cs / cs



  using UnityEngine;
  using System.Collections;
  
  public enum GameState { playing, gameover };
  
  public class GameControl : MonoBehaviour {
  
      public Transform platformPrefab;
      public static GameState gameState;
  
      private Transform playerTrans;
      private float platformsSpawnedUpTo = 0.0f;
      private ArrayList platforms;
      private float nextPlatformCheck = 0.0f;
  
      
          void Awake () {
          playerTrans = GameObject.FindGameObjectWithTag("Player").transform;
          platforms = new ArrayList();
  
          SpawnPlatforms(25.0f);
          StartGame();
          }
  
      void StartGame()
      {
          Time.timeScale = 1.0f;
          gameState = GameState.playing;
      }
  
      void GameOver()
      {
          Time.timeScale = 0.0f; //Pause the game
          gameState = GameState.gameover;
          GameGUI.SP.CheckHighscore();
      }
  
          void Update () {
          //Do we need to spawn new platforms yet? (we do this every X meters we climb)
          float playerHeight = playerTrans.position.y;
          if (playerHeight > nextPlatformCheck)
          {
              PlatformMaintenaince(); //Spawn new platforms
          }
  
          //Update camera position if the player has climbed and if the player is too low: Set gameover.
          float currentCameraHeight = transform.position.y;
          float newHeight = Mathf.Lerp(currentCameraHeight, playerHeight, Time.deltaTime * 10);
          if (playerTrans.position.y > currentCameraHeight)
          {
              transform.position = new Vector3(transform.position.x, newHeight, transform.position.z);
          }else{
              //Player is lower..maybe below the cameras view?
              if (playerHeight < (currentCameraHeight - 10))
              {
                  GameOver();
              }
          }
  
          //Have we reached a new score yet?
          if (playerHeight > GameGUI.score)
          {
              GameGUI.score = (int)playerHeight;
          }
          }
  
      void PlatformMaintenaince()
      {
          nextPlatformCheck = playerTrans.position.y + 10;
  
          //Delete all platforms below us (save performance)
          for(int i = platforms.Count-1;i>=0;i--)
          {
              Transform plat = (Transform)platforms[i];
              if (plat.position.y < (transform.position.y - 10))
              {
                  Destroy(plat.gameObject);
                  platforms.RemoveAt(i);
              }            
          }
  
          //Spawn new platforms, 25 units in advance
          SpawnPlatforms(nextPlatformCheck + 25);
      }
  
      void SpawnPlatforms(float upTo)
      {
          float spawnHeight = platformsSpawnedUpTo;
          while (spawnHeight <= upTo)
          {
              float x = Random.Range(-10.0f, 10.0f);
              Vector3 pos = new Vector3(x, spawnHeight, 12.0f);
  
              Transform plat = (Transform)Instantiate(platformPrefab, pos, Quaternion.identity);
              platforms.Add(plat);
  
              spawnHeight += Random.Range(1.6f, 3.5f);
          }
          platformsSpawnedUpTo = upTo;
      }
  
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.