#pragma strict
public enum GameState { playing,bonus, gameover }; // 게임 상태 현재는 세가지..
public var platformPrefab : Transform; // 프레팹을 담을 변수
public static var gameState:GameState; // 게임 상태 저장 변수
private var playerTrans:Transform ; // 참조할 플레이어를 담을 변수
private var platformsSpawnedUpTo :float = 0; // 얼만큼 위에서 나타날 것인가
private var platforms: ArrayList ; // 담을 배열
private var nextPlatformCheck:float = 0.0f; // 다음번엔 어느 정도 위치에 나타나나?
function Awake () {
playerTrans = GameObject.FindGameObjectWithTag("Player").transform; // 플레이어를 참조하고
platforms = new ArrayList(); // 새로운 배열을 만든다.
SpawnPlatforms(25.0); 플랫폼 발생 함수... 위에 25정도 위에 나타나게 한다.
StartGame(); // 게임을 진행하는 함수.. 게임스테이트를 변하게 한다.
}
function Start ()
{
Time.timeScale = 1.0f; // 플레이..
gameState = GameState.playing; // 게임중으로 바꿈..
}
function StartGame()
{
Time.timeScale = 1.0f;
gameState = GameState.playing;
}
function GameOver()
{
Time.timeScale = 0.0f; //멈춤
gameState = GameState.gameover; // 상태변수
GameGUI.SP.CheckHighscore();
}
function Update () {
//Do we need to spawn new platforms yet? (we do this every X meters we climb)
var playerHeight:float = 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.
var currentCameraHeight:float = transform.position.y;
var newHeight:float = 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 = playerHeight;
}
}
function PlatformMaintenaince()
{
nextPlatformCheck = playerTrans.position.y + 10;
//Delete all platforms below us (save performance)
for(var i:int = platforms.Count-1;i>=0;i--)
{
var 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);
}
function SpawnPlatforms(upTo:float ) // 일종의 간격
{
var spawnHeight:float = platformsSpawnedUpTo; // 세로간격
while (spawnHeight <= upTo) // 보다 작으면 반복
{
var x:float = Random.Range(-10.0f, 10.0f); // x 위치 좌우 위치...나중에 레이로 쏴서 체크
var pos :Vector3 = new Vector3(x, spawnHeight, 12.0f); // x 좌표를 기반으로 간격
var plat:Transform = Instantiate(platformPrefab, pos, Quaternion.identity); // 프레펩을 pos 위치에 붙인다. 회전 없이
platforms.Add(plat); // 배열에 집어 넣는다.
spawnHeight += Random.Range(1.6f, 3.5f); // 세로 간격
}
platformsSpawnedUpTo = upTo;
}
public enum GameState { playing,bonus, gameover }; // 게임 상태 현재는 세가지..
public var platformPrefab : Transform; // 프레팹을 담을 변수
public static var gameState:GameState; // 게임 상태 저장 변수
private var playerTrans:Transform ; // 참조할 플레이어를 담을 변수
private var platformsSpawnedUpTo :float = 0; // 얼만큼 위에서 나타날 것인가
private var platforms: ArrayList ; // 담을 배열
private var nextPlatformCheck:float = 0.0f; // 다음번엔 어느 정도 위치에 나타나나?
function Awake () {
playerTrans = GameObject.FindGameObjectWithTag("Player").transform; // 플레이어를 참조하고
platforms = new ArrayList(); // 새로운 배열을 만든다.
SpawnPlatforms(25.0); 플랫폼 발생 함수... 위에 25정도 위에 나타나게 한다.
StartGame(); // 게임을 진행하는 함수.. 게임스테이트를 변하게 한다.
}
function Start ()
{
Time.timeScale = 1.0f; // 플레이..
gameState = GameState.playing; // 게임중으로 바꿈..
}
function StartGame()
{
Time.timeScale = 1.0f;
gameState = GameState.playing;
}
function GameOver()
{
Time.timeScale = 0.0f; //멈춤
gameState = GameState.gameover; // 상태변수
GameGUI.SP.CheckHighscore();
}
function Update () {
//Do we need to spawn new platforms yet? (we do this every X meters we climb)
var playerHeight:float = 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.
var currentCameraHeight:float = transform.position.y;
var newHeight:float = 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 = playerHeight;
}
}
function PlatformMaintenaince()
{
nextPlatformCheck = playerTrans.position.y + 10;
//Delete all platforms below us (save performance)
for(var i:int = platforms.Count-1;i>=0;i--)
{
var 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);
}
function SpawnPlatforms(upTo:float ) // 일종의 간격
{
var spawnHeight:float = platformsSpawnedUpTo; // 세로간격
while (spawnHeight <= upTo) // 보다 작으면 반복
{
var x:float = Random.Range(-10.0f, 10.0f); // x 위치 좌우 위치...나중에 레이로 쏴서 체크
var pos :Vector3 = new Vector3(x, spawnHeight, 12.0f); // x 좌표를 기반으로 간격
var plat:Transform = Instantiate(platformPrefab, pos, Quaternion.identity); // 프레펩을 pos 위치에 붙인다. 회전 없이
platforms.Add(plat); // 배열에 집어 넣는다.
spawnHeight += Random.Range(1.6f, 3.5f); // 세로 간격
}
platformsSpawnedUpTo = upTo;
}
댓글 없음:
댓글 쓰기