0. 들어가기 전에
이번에는 점토 집 레벨이 4가 되면 나타나는 블라인더에 맞게 배경을 적절히 변경했다. 이전에는 블라인더가 생겨도 바닥에 빛이 반사되는 모습이 변하지 않아서 마음에 들지 않았다.
1. 게임 오브젝트
새로 추가된 게임 오브젝트는 windowLight 이다. 이는 바닥에 빛이 반사되는 모습을 블라인드에 맞게 그려놓은 게임 오브젝트이다.
Plant Panel 게임 오브젝트의 Upgrade Panel 스크립트 속 blindBackground 와 lightBackground 변수에 게임 오브젝트인 shin 과 windowLight 를 할당했다.
2. 스크립트
이번에 새로 만든 스크립트는 없고 UpgradePanel 을 수정했다.
2.1 UpgradePanel 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using System.Net;
using UnityEditor;
public class UpgradePanel : MonoBehaviour
{
[Header("Plant Panel UI")]
public Text houseSubText; // 업그레이드 내용
public Text houseLoveText; // 필요한 애정 수치
public Button houseUpButton; // 업그레이드 버튼
public Text clickSubText;
public Text clickLoveText;
public Button clickUpButton;
[Header("Effect")]
public int effectIdx = 3;
[Header("Clay Toys")]
public Button[] toys; // 0: 캣타워, 1: 러그, 2: 블라인더, 3: 조명
public GameObject blindBackground; // 블라인더가 소환되면 바닥의 모습을 바꿔야함.
public GameObject lightBackground; // 블라인더가 소환되면 빛 없어져야함.
private void Awake()
{
GameManager.instance.OnSetClayHouseInfo -= SetUpgardePanel; // 메서드 연결
GameManager.instance.OnSetClayHouseInfo += SetUpgardePanel; // 메서드 연결
}
private void Start()
{
SetUpgardePanel(); // 판넬 정보 설정
// 버튼에 메서드 연결
houseUpButton.onClick.AddListener(UpgradeHouse);
clickUpButton.onClick.AddListener(UpgradeClick);
}
private void OnEnable()
{
// 활성화 될 때 호출되는 함수
SetUpgardePanel(); // ui 세팅
}
// 게임매니저의 델리게이트에 연결할거임
// 얘는 게임이 처음 시작할 때 호출할 것..
public void SetUpgardePanel(int houseLevel, int clickLevel)
{
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (houseLevel == 5)
{
houseLoveText.text = "max";
}
else
{
houseSubText.text = "점토 수용량 " + (houseLevel + 1);
houseLoveText.text = GameManager.instance.clayHouseLoveList[houseLevel] + "";
}
// 집 레벨에 맞게 장난감 활성화
if (houseLevel >= 2)
{
// 블라인더 소환될 레벨이면 배경 바꾸도록..
if (houseLevel >= 4)
{
// 게임 오브젝트 활성화&비활성화 해서 배경 바꾸기..
lightBackground.SetActive(false);
blindBackground.SetActive(true);
}
for (int i=0; i<=houseLevel-2; i++)
{
// 장난감 활성화
toys[i].gameObject.SetActive(true);
}
}
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (clickLevel == 5)
{
clickLoveText.text = "max";
}
else
{
clickSubText.text = "클릭 생산량 x " + (clickLevel + 1);
clickLoveText.text = GameManager.instance.clayClickLoveList[clickLevel] + "";
}
}
// 얘는 게임이 진행되는 중에 언제든지 그냥 이용할 수 있음..
public void SetUpgardePanel()
{
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (GameManager.instance.clayHouseLevel == 5)
{
houseLoveText.text = "max";
}
else
{
houseSubText.text = "점토 수용량 " + (GameManager.instance.clayHouseLevel + 1);
houseLoveText.text = GameManager.instance.clayHouseLoveList[GameManager.instance.clayHouseLevel] + "";
}
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (GameManager.instance.clayClickLevel == 5)
{
clickLoveText.text = "max";
}
else
{
clickSubText.text = "클릭 생산량 x " + (GameManager.instance.clayClickLevel + 1);
clickLoveText.text = GameManager.instance.clayClickLoveList[GameManager.instance.clayClickLevel] + "";
}
}
public void UpgradeHouse()
{
// 이미 레벨이 최고면 걍 빠져나가도록..
if (GameManager.instance.clayHouseLevel == 5) {
// 안내창 띄우기
GameManager.instance.StartInfoPanel("최대 레벨입니다!");
return;
}
else if (GameManager.instance.clayHouseLoveList[GameManager.instance.clayHouseLevel] > GameManager.instance.love)
{
// 안내창 띄우기
GameManager.instance.StartInfoPanel("애정이 부족해요 ㅠ_ㅠ");
return;
}
GameManager.instance.GetLove(-GameManager.instance.clayHouseLoveList[GameManager.instance.clayHouseLevel]); // 애정 차감
GameManager.instance.clayHouseLevel++;
GameManager.instance.curPossibleClayNum++; // 키울 수 있는 점토 수 +1
toys[GameManager.instance.clayHouseLevel - 2].gameObject.SetActive(true); // 장난감 게임 오브젝트 활성화
// 블라인더가 소환되면 배경이 바뀌어야함..
if (GameManager.instance.clayHouseLevel == 4)
{
// 배경 바꾸기..
lightBackground.SetActive(false);
blindBackground.SetActive(true);
}
if (GameManager.instance.clayHouseLevel == 5)
{
houseLoveText.text = "max";
}
PlayEffect(effectIdx); // 이펙트 소환
SetUpgardePanel();
}
public void UpgradeClick()
{
// 이미 레벨이 최고면 걍 빠져나가도록..
if (GameManager.instance.clayClickLevel == 5)
{
GameManager.instance.StartInfoPanel("최대 레벨입니다!");
return;
}
else if (GameManager.instance.clayClickLoveList[GameManager.instance.clayClickLevel] > GameManager.instance.love)
{
// 안내창 띄우기
GameManager.instance.StartInfoPanel("애정이 부족해요 ㅠ_ㅠ");
return;
}
GameManager.instance.GetLove(-GameManager.instance.clayClickLoveList[GameManager.instance.clayClickLevel]); // 애정 차감
GameManager.instance.clayClickLevel++;
if (GameManager.instance.clayClickLevel == 5)
{
clickLoveText.text = "max";
}
PlayEffect(effectIdx); // 이펙트 소환
SetUpgardePanel();
}
public void PlayEffect(int idx)
{
if (GameManager.instance.effects[idx].gameObject.activeSelf == false)
GameManager.instance.effects[idx].gameObject.SetActive(true); // 활성화하기
GameManager.instance.effects[idx].Play();
}
public void ClosePanel()
{
gameObject.SetActive(false); // 활성화 끄기..
}
}
2.2 UpgradePanel 스크립트 변경 사항 설명
더보기
1. SetUpgardePanel(int houseLevel, int clickLevel)
블라인더 게임 오브젝트는 점토 집 레벨이 4레벨이 되면 소환된다. 게임을 다시 시작했을 때 로드한 데이터에 맞게 반영하는 단계에서 점토 집 레벨이 4레벨 이상인지 확인하고 맞다면 배경을 변경하도록 했다.
게임 속 존재하는 게임오브젝트를 활성화, 비활성화 하는 식으로 배경을 변경했다. 블라인더가 소환되면 빛 게임 오브젝트는 없어지고, 바닥에 빛이 반사되는 그림이 변경되도록 하기 위함이다.
// 게임매니저의 델리게이트에 연결할거임
// 얘는 게임이 처음 시작할 때 호출할 것..
public void SetUpgardePanel(int houseLevel, int clickLevel)
{
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (houseLevel == 5)
{
houseLoveText.text = "max";
}
else
{
houseSubText.text = "점토 수용량 " + (houseLevel + 1);
houseLoveText.text = GameManager.instance.clayHouseLoveList[houseLevel] + "";
}
// 집 레벨에 맞게 장난감 활성화
if (houseLevel >= 2)
{
// 블라인더 소환될 레벨이면 배경 바꾸도록..
if (houseLevel >= 4)
{
// 게임 오브젝트 활성화&비활성화 해서 배경 바꾸기..
lightBackground.SetActive(false);
blindBackground.SetActive(true);
}
for (int i=0; i<=houseLevel-2; i++)
{
// 장난감 활성화
toys[i].gameObject.SetActive(true);
}
}
// 만렙이면 max 로, 아니면 레벨 반영해서 텍스트 설정
if (clickLevel == 5)
{
clickLoveText.text = "max";
}
else
{
clickSubText.text = "클릭 생산량 x " + (clickLevel + 1);
clickLoveText.text = GameManager.instance.clayClickLoveList[clickLevel] + "";
}
}
2. UpgradeHouse()
집 레벨이 4레벨이 되면 빛과 바닥 빛 반사 게임 오브젝트의 활성화를 끄고 켜는 구문이 추가되었다.
public void UpgradeHouse()
{
// 이미 레벨이 최고면 걍 빠져나가도록..
if (GameManager.instance.clayHouseLevel == 5) {
// 안내창 띄우기
GameManager.instance.StartInfoPanel("최대 레벨입니다!");
return;
}
else if (GameManager.instance.clayHouseLoveList[GameManager.instance.clayHouseLevel] > GameManager.instance.love)
{
// 안내창 띄우기
GameManager.instance.StartInfoPanel("애정이 부족해요 ㅠ_ㅠ");
return;
}
GameManager.instance.GetLove(-GameManager.instance.clayHouseLoveList[GameManager.instance.clayHouseLevel]); // 애정 차감
GameManager.instance.clayHouseLevel++;
GameManager.instance.curPossibleClayNum++; // 키울 수 있는 점토 수 +1
toys[GameManager.instance.clayHouseLevel - 2].gameObject.SetActive(true); // 장난감 게임 오브젝트 활성화
// 블라인더가 소환되면 배경이 바뀌어야함..
if (GameManager.instance.clayHouseLevel == 4)
{
// 배경 바꾸기..
lightBackground.SetActive(false);
blindBackground.SetActive(true);
}
if (GameManager.instance.clayHouseLevel == 5)
{
houseLoveText.text = "max";
}
PlayEffect(effectIdx); // 이펙트 소환
SetUpgardePanel();
}
3. 결과물