이번에는 손님이 주문한 갯수와 붕어빵 갯수가 같으면 하트를 찍을 수 있도록 코딩해보자.
하트를 찍어보았다.
1) 하트 게임오브젝트 만들기
게임 오브젝트를 2d 스프라이트로 만들고 하트 스프라이트를 적용하고,
적당한 크기를 정해주고 복사해서 붙여 넣기 한다음에 5개로 만들어 줬다.
5개로 쭉 늘어뜨렸다.
전체화면에서 보면 다음과 같다.
하트를 적당한 위치에 놓고 하트를 관리해줄 스크립트를 만들어서
hat 에 컴포넌트로 추가해주겠다.
이제 스크립팅을 해보자.
2) 하트 렌더러 만들어서 선언, 초기화해주기
말풍선과 마찬가지로 렌더러 배열을 만들어서 선언, 초기화 해주자.
--------------------------
public SpriteRenderer[] renderer;
--------------------------
renderer 사이즈를 5로 하고 각각 하트 매칭해주자.
이번에는 프로그램을 실행했을때 말풍선처럼 렌더러를 끄지 않고 하트를 투명하게 해주자.
렌더러 제어에 관해서는 다음 강의 내용에서 4) Color값을 참고로해보자.
https://allaboutmaker.tistory.com/13
렌더러의 칼라중 alpha값을 50%로 하기위해서 Color의 네번째를 0.5f로 값을 주자.
renderer.color = new Color(1, 1, 1, 0.5f);
=====================
void Start()
{
for(int index =0; index<renderer.Length; index++){
renderer[index].color = new Color(1, 1, 1, 0.5f);
}
}
====================
위와 같이 스크립팅하고 플레이 버튼을 눌렀을때 아래와 같이 투명한 상태가 되면 성공한거다.
3) 하트 계산하기
하트를 계산하는 부분은 간단하다.
Sonnimscript.cs에서
public void HeartCal(int cnt)에서 하트 추가 부분이 있었다.
HeartManager에 함수를 만들어서 하트 추가 부분에서 호출 할 수 있도록해보자.
Sonnimscript.cs에서 HeartManager.cs 클래스를 선언, 초기화 해보자.
=======================
public HeartManager heartanager; // 클래스 선언
void Start(){
heartanager = GameObject.Find("hat").GetComponent<HeartManager >(); //클래스 초기화
}
public void HeartCal(int cnt)
{
Debug.Log("HeartCal"+cnt);
if(cnt==rand){
Debug.Log("하트추가");
heartanager.HeartCnt(); // 클래스 사용
}
Order();
}
=======================
실행했을때 붕어빵을 말풍선 숫자대로 굽고 봉투를 클릭하면 아래와 같이 된다.
4) 하트 매니저
하트 갯수 대로 하트를 알파값을 조정해주자.
말풍선과 같다.
우선 하트 카운트하는 변수를 선언하고,
변수에 따라 하트의 알파값을 조정하자.
참고로 투명도 값은 아래와 같다.
new Color(1, 1, 1, 1); => 불투명
new Color(1, 1, 1, 0.5f); => 반투명
new Color(1, 1, 1, 0); => 투명
*로직*
--------------------------
만약 hcnt==0이면 전부 반투명
아니면 만약 hcnt==1이면 렌더러1번 불투명, 나머지 전부 불투명
아니면 만약 hcnt==2이면 렌더러1,2번 불투명, 나머지 전부 불투명
아니면 만약 hcnt==3이면 렌더러1,2,3번 불투명, 나머지 전부 불투명
아니면 만약 hcnt==4이면 렌더러1,2,3,4번 불투명, 나머지 전부 불투명
아니면 만약 hcnt==5이면 렌더러1,2,3,4,5번 불투명
=>
if(hcnt==0){
renderer[0].color = new Color(1, 1, 1, 0.5f);
renderer[1].color = new Color(1, 1, 1, 0.5f);
renderer[2].color = new Color(1, 1, 1, 0.5f);
renderer[3].color = new Color(1, 1, 1, 0.5f);
renderer[4].color = new Color(1, 1, 1, 0.5f);
}else if(hcnt==1){
renderer[0].color = new Color(1, 1, 1, 1);
renderer[1].color = new Color(1, 1, 1, 0.5f);
renderer[2].color = new Color(1, 1, 1, 0.5f);
renderer[3].color = new Color(1, 1, 1, 0.5f);
renderer[4].color = new Color(1, 1, 1, 0.5f);
}else if(hcnt==2){
renderer[0].color = new Color(1, 1, 1, 1);
renderer[1].color = new Color(1, 1, 1, 1);
renderer[2].color = new Color(1, 1, 1, 0.5f);
renderer[3].color = new Color(1, 1, 1, 0.5f);
renderer[4].color = new Color(1, 1, 1, 0.5f);
}else if(hcnt==3){
renderer[0].color = new Color(1, 1, 1, 1);
renderer[1].color = new Color(1, 1, 1, 1);
renderer[2].color = new Color(1, 1, 1, 1);
renderer[3].color = new Color(1, 1, 1, 0.5f);
renderer[4].color = new Color(1, 1, 1, 0.5f);
}else if(hcnt==4){
renderer[0].color = new Color(1, 1, 1, 1);
renderer[1].color = new Color(1, 1, 1, 1);
renderer[2].color = new Color(1, 1, 1, 1);
renderer[3].color = new Color(1, 1, 1, 1);
renderer[4].color = new Color(1, 1, 1, 0.5f);
}else if(hcnt==5){
renderer[0].color = new Color(1, 1, 1, 1);
renderer[1].color = new Color(1, 1, 1, 1);
renderer[2].color = new Color(1, 1, 1, 1);
renderer[3].color = new Color(1, 1, 1, 1);
renderer[4].color = new Color(1, 1, 1, 1);
}
--------------------------
* 더해보기
반복되는부분을 for문으로 간단하게 만들어보자.
=========================
for(int index =0; index<renderer.Length; index++){
if(hcnt>index){
renderer[index].color = new Color(1, 1, 1, 1);
}else{
renderer[index].color = new Color(1, 1, 1, 0.5f);
}
}
=========================
위에 내용을 HeartCal()함수를 만들어서 사용해보자.
hcnt를 초기화하고, HearCnt()함수에서 1개씩 증가하게 하자
=========================
int hcnt;
void Update()
{
HeartCal();
}
public void HeartCnt()
{
hcnt++;
}
void HeartCal()
{
for(int index =0; index<renderer.Length; index++){
if(hcnt>index){
renderer[index].color = new Color(1, 1, 1, 1);
}else{
renderer[index].color = new Color(1, 1, 1, 0.5f);
}
}
}
=========================
저장후 실행버튼을 눌러서 붕어빵을 말풍선 갯수대로 구워보자.
말풍선 갯수와 봉투에 있는 붕어빵 수가 동일하면 하트가 하나씩 불투명해지는 것을 볼 수 있다.
5) 정리
=========================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeartManager : MonoBehaviour
{
public SpriteRenderer[] renderer;
int hcnt;
void Start()
{
for(int index =0; index<renderer.Length; index++){
renderer[index].color = new Color(1, 1, 1, 0.5f);
}
}
// Update is called once per frame
void Update()
{
HeartCal();
}
public void HeartCnt()
{
hcnt++;
}
void HeartCal()
{
for(int index =0; index<renderer.Length; index++){
if(hcnt>index){
renderer[index].color = new Color(1, 1, 1, 1);
}else{
renderer[index].color = new Color(1, 1, 1, 0.5f);
}
}
}
}
=========================
다음 시간에는 로딩화면, 엔딩화면을 추가해보자.
붕어빵 게임 11] 스크립팅_ 효과음 재생하기 (0) | 2020.05.07 |
---|---|
붕어빵 게임 10] 스크립팅_ 로딩화면, 엔딩화면 (0) | 2020.05.07 |
붕어빵 게임 08] 스크립팅_ 손님이 붕어빵 주문하기 (0) | 2020.05.07 |
붕어빵 게임 07] 스크립팅_ 봉투담기 (0) | 2020.05.07 |
붕어빵 게임 06] 스크립팅_ 붕어빵 굽기 (0) | 2020.05.06 |