[개발일지] 19. 블라인더 장난감 소환시 배경 변경

2025. 1. 20. 14:46·유니티 프로젝트/점토게임
목차
  1. 0. 들어가기 전에
  2. 1. 게임 오브젝트
  3. 2. 스크립트
  4. 2.1 UpgradePanel 스크립트
  5. 2.2 UpgradePanel 스크립트 변경 사항 설명
  6. 3. 결과물

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. 결과물

 

 

 

 

  1. 0. 들어가기 전에
  2. 1. 게임 오브젝트
  3. 2. 스크립트
  4. 2.1 UpgradePanel 스크립트
  5. 2.2 UpgradePanel 스크립트 변경 사항 설명
  6. 3. 결과물
'유니티 프로젝트/점토게임' 카테고리의 다른 글
  • [개발일지] 21. 점토 도감
  • [개발일지] 20. 2D Light 적용
  • [개발일지] 18. 레벨에 맞게 장난감 소환 & 데이터 적용
  • [개발일지] 17. 가구 추가 & 애니메이션 적용
dubu0721
dubu0721
dubu0721 님의 블로그 입니다.
dubu0721 님의 블로그dubu0721 님의 블로그 입니다.
  • dubu0721
    dubu0721 님의 블로그
    dubu0721
  • 전체
    오늘
    어제
    • 분류 전체보기 (334)
      • 프로그래밍언어론 정리 (0)
      • 컴퓨터네트워크 정리 (5)
      • 알고리즘&자료구조 공부 (64)
        • it 취업을 위한 알고리즘 문제풀이 입문 강의 (60)
        • 학교 알고리즘 수업 (3)
        • 실전프로젝트I (0)
      • 백준 문제 (193)
        • 이분탐색 (7)
        • 투포인트 (10)
        • 그래프 (7)
        • 그리디 (24)
        • DP (25)
        • BFS (15)
        • MST (7)
        • KMP (4)
        • Dijkstra (3)
        • Disjoints Set (4)
        • Bellman-Ford (2)
        • 시뮬레이션 (3)
        • 백트래킹 (15)
        • 위상정렬 (5)
        • 자료구조 (25)
        • 기하학 (1)
        • 정렬 (11)
        • 구현 (8)
        • 재귀 (8)
        • 수학 (8)
      • 유니티 공부 (11)
        • 레트로의 유니티 게임 프로그래밍 에센스 (11)
        • 유니티 스터디 자료 (0)
        • C# 공부 (0)
      • 유니티 프로젝트 (48)
        • 케이크게임 (13)
        • 점토게임 (35)
      • 언리얼 공부 (10)
        • 이득우의 언리얼 프로그래밍 (10)
      • 진로 (1)
      • 논문 읽기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    큐
    바킹독
    시뮬레이션
    티스토리챌린지
    이득우
    이분탐색
    유니티 프로젝트
    해시
    BFS
    수학
    골드메탈
    레트로의 유니티 프로그래밍
    자료구조
    유니티 공부 정리
    재귀
    맵
    백트래킹
    스택
    dp
    백준
    오블완
    유니티
    언리얼
    우선순위큐
    그리디
    이벤트 트리거
    C#
    투포인터
    그래프
    정렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dubu0721
[개발일지] 19. 블라인더 장난감 소환시 배경 변경

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.