유니티:맵
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
플레이어가 다양한 곳을 이동하여 아예 화면 자체가 바뀌어야 할 때가 있다.(오픈월드가 아니라면)
게임메니저
게임 메니저 계층창에서 Create>Create Empty로 GameManager를 만든다. 이 안에 스크립트를 넣는다.
점수와 스테이지관리를 해준다.
싱글턴 패턴
게임 메니저는 일반적으로 프로그램에 하나만 존재하는 게 좋다. 관리기능이 여러군데에 산재해 있다면 어려움이 따를 것은 필연. 그리고 언제 어디서든 접근할 수 있어야 한다.
모든 오브젝트가 함께 공유하는 변수. 정적 변수를 활용한다. 이 변수는 오브젝트를 몇 개 생성하든 그 수에 상관없이 메모리에 하나만 있게 된다. public static int 변수명 = 0;
형태로 선언한다.(선언을 안하고 바로 변수명으로 쓸 수 있는듯.) 각자의 클래스 안에서 선언하면 해당 변수를 공유한다. 오브젝트 전체 갯수를 저장하거나 할 때 사용.
일반적으로 다음과 같은 방법으로 싱글턴 패턴을 만든다.
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManager : MonoBehaviour {
public static GameManager instance; // 싱글턴을 담을 정적 변수
}
void Awake() { // 게임을 시작하자마자 구성할 것.
instance = this; // 해당 객체를 instance에 할당한다.
}
다른 코드에서도 public static GameManager instance;를 이용하여 게임메니저에 접근할 수 있다.
다른 코드에서도 정의할 필요 없이 GameManager.instance를 이용하여 게임메니저 인스턴스에 접근할 수 있다.
점수가산
플레이어의 코드
public GameManager gameManager; //게임의 상태를 지정한다.
if(collision.gameObject.tag=="레이어"){
gameManager.stagePoint += 가산할포인트
//포인트에 따라 달리 주기 위해
bool 변수명=collision.gameObject.name.Contains("아이템명") //아이템명이 포함되어 있으면 True 반환.
if(변수명){포인트가산명령}
//게임메니저가 스테이지 이동도 관리한다.
맵
계층에서.. 각종 맵을 추가한다.
public void NextStage()//다음 맵으로.
{
if(stageIndex <Stages.Lenth-1)//인덱스가 전체 스테이지보다 낮을 때.
{
Stages[stageIndex].SetActive(false);//기존 스테이지를 지운다.
stageIndex++;//인덱스를 하나 늘린다.
Stages[stageIndex].SetActive(true);//다음 스테이지 활성화.
}
else{//게임 클리어.
}