2013년 6월 11일 화요일

게임 제어 -


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); // 생성될 플랫폼의 x 위치를 랜덤하게 추출하고
            Vector3 pos = new Vector3(x, spawnHeight, 12.0f); // x위치 받고 높이 받고 z값은 생각좀 해봐야 함...

            Transform plat = (Transform)Instantiate(platformPrefab, pos, Quaternion.identity);  // plat 변수에.. 플랫폼 프리팹을 ,위치를 담고.. 생성?
            platforms.Add(plat); 배열에 집어 넣네?

            spawnHeight += Random.Range(1.6f, 3.5f); // 높이 값으로 체크 다음번 생성... 안에 있는 수치만큼 랜덤 y값을 더해서...
        }
        platformsSpawnedUpTo = upTo; // 다시 새 위치를 받는다.
    }

}

댓글 없음:

댓글 쓰기