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; // 다시 새 위치를 받는다.
}
}
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기