Stage BG Manager는 매우 간단하다. 현재 스테이지가 몇 스테이지인지 입력받으면 그 스테이지에 맞는 맵 배경을 띄우는 역할을 한다. 매우 간단해서 그냥 Stage Manager에서 구현해도 되는 기능이지만, StageManager가 GameObject를 인스턴스화하고 상호작용하는 기능을 만들어보고 싶었기에, 간단한 게임오브젝트를 구현하는 것으로 학습해보았다.
- StageManager의 멤버변수다
Prefab은 에디터에서 정의한 클래스, Inst는 실제 인스턴스화가 된 객체를 의미한다. 위에 [SerializeField]는 바로 아래줄에 있는 private 멤버 변수인 StageBGManagerPrefab을 에디터에서 접근 및 설정할 수 있게 해주는 역할을 한다.
요약하자면, StageBGManagerPrefab을 에디터에서 입력한 후, StageBGManagerPrefab을 Instantiate한 것을 StageBGManagerInst에 넣을 것이다.
- Stage BG Manager Script를 만들고, 스크립트를 빈 Prefab에 만들어 붙인다. 이렇게하면 Stage BG Manager Script를 컴포넌트로 붙이고 있는 GameObject를 정의한것이다.
- SerializeField를 사용했으니 StageBGManagerPrefab을 설정할 수 있는 칸이 StageManager오브젝트에 있을 것이다. 해당 칸에 방금 만든 프리팹을 넣으면 된다.
- 마지막으로 해당 프리팹을 인스턴스화 하기 위해 Instantiate함수를 사용한다
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SC_StageBG : MonoBehaviour
{
private void Awake()
{
BGRenderer = gameObject.AddComponent<SpriteRenderer>();
BGRenderer.sortingOrder = 0;
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_1"));
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_2"));
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_3"));
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_4"));
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_5"));
BGSprite.Add(Resources.Load<Sprite>("StageScene/StageBg/Stage_6"));
}
public void SetStageBG(int CurStage)
{
BGRenderer.sprite = BGSprite[CurStage];
}
private List<Sprite> BGSprite = new List<Sprite>();
private SpriteRenderer BGRenderer;
}
private void SetStageBG(int CurStage)
{
StageBGManagerInst.GetComponent<SC_StageBG>().SetStageBG(CurStage);
}
프리팹과 인스턴스는 잘 구분해서 사용합시다(애초에 알고 사용한다면 헷갈릴 일이 없긴 하다.) 모든 리소스는 꼭 Asset/Resources폴더에서 관리합시다. (자세한건 Resources 클래스에 대해서 알아보세요...)