Unity/Project : Ocean Cleaner
OceanCleaner 21.08.08~21.08.09 개발일지
HappyFrog
2021. 8. 10. 04:00
08.07 개발일지 내용에 이어간다.
팝업구조와 광고 분기를 나누어주었으니 이제 보는 광고에 따라 차등보상을 지급할 수 있도록 구현해보자.
public void NoSkipTrashProcess()
{
UserInfo.Instance.TrashCollect(garbageAmount);
UserInfo.Instance.SetCycle(garbageAmount);
garbageRespawn.FindTrash();
garbageAmount = 0;
inGame.CurrentTrash(garbageAmount);
inGame.CycleCheck();
uICollection.GetCollectionRandom();
}
public void SkipTrashProcess()
{
Debug.Log("skip");
if(!garbageAmount.Equals(0))
{
Debug.Log(popupControll.skipAdAmount);
UserInfo.Instance.TrashCollect(garbageAmount * 5);
UserInfo.Instance.SetCycle(garbageAmount * 5);
garbageRespawn.FindTrash();
garbageAmount = 0;
inGame.CurrentTrash(garbageAmount);
inGame.CycleCheck();
uICollection.GetCollectionRandom();
}
}
- 기존 스크립트는 위와 같은 형식이었다.
- 광고버튼을 누른다면 해당 쓰레기 양만큼 인게임재화를 추가해주고 쓰레기를 리젠시키며 쌓여있는 쓰레기 양을 초기화시켜주는 방식이었다.
- 광고스킵버튼 또한 같은 기능을 구현하지만 보상에서 차이가 나도록 인게임 재화지급 부분에서 *5를 해주었다.
public void NoSkipTrashProcess_Front()
{
UserInfo.Instance.TrashCollect(garbageAmount);
UserInfo.Instance.SetCycle(garbageAmount);
garbageRespawn.FindTrash();
main.SetSecondPopupAmount(garbageAmount);
OnSetTrashAmount(garbageAmount);
garbageAmount = 0;
inGame.CurrentTrash(garbageAmount);
inGame.CycleCheck();
uICollection.GetCollectionRandom();
}
public void NoSkipTrashProcess_Reward()
{
UserInfo.Instance.TrashCollect(garbageAmount * 7);
UserInfo.Instance.SetCycle(garbageAmount * 7);
garbageRespawn.FindTrash();
main.SetSecondPopupAmount(garbageAmount * 7);
OnSetTrashAmount(garbageAmount);
garbageAmount = 0;
inGame.CurrentTrash(garbageAmount);
inGame.CycleCheck();
uICollection.GetCollectionRandom();
}
public void SkipTrashProcess()
{
Debug.Log("skip");
Debug.Log(popupControll.skipAdAmount);
if(!garbageAmount.Equals(0))
{
UserInfo.Instance.TrashCollect(garbageAmount * 5);
UserInfo.Instance.SetCycle(garbageAmount * 5);
garbageRespawn.FindTrash();
main.SetSecondPopupAmount(garbageAmount * 5);
OnSetTrashAmount(garbageAmount);
garbageAmount = 0;
inGame.CurrentTrash(garbageAmount);
inGame.CycleCheck();
uICollection.GetCollectionRandom();
}
}
- 위와 같이 전면/보상/광고스킵 버튼들의 분기를 나누어 주었으며 보상강도는 1/7/5로 설정했다.
- =>보상광고가 30초로 꽤 긴 시간이며 광고스킵권의 과금금액이 상당히 낮은 점을 감안하여 해당 비율로 책정했다.
- 코드 자체는 그대로 썻으며 중간에 main.SetSecondPopupAmount라는 메인의 메서드를 실행하는 코드와 OnSetTrashAmount라는 대리자가 실행되는데
- => 그 이유는 쓰레기를 업사이클 시킬 때 애니메이션과 소리가 제대로 나지않았으며 결과창 팝업에 항상 0만큼 갈았다고 출력되는 오류를 고치기 위한 추가 코드이다.
- 해당 오류의 원인은 garbageAmount가 0으로 초기화 된 후에 팝업의 텍스트와 애니메이션의 분기가 설정되어 각각 모두 garbageAmount가 0일때의 결과를 출력한 것이었다.
- 따라서 garbageAmount를 0으로 초기화하기 이전에 결과창 팝업을 띄워주는 SetSecondPopupAmount메서드를 실행하고
- 애니메이션도 0으로 초기화되기 전에 모은 양만큼 설정해주어 해당 쓰레기 양에 맞는 애니메이션을 출력하도록 했다.
- 서순에 따라 추가구현해주니 오류가 해결되었다.
이번엔 쓰레기통에 쓰레기가 존재할 때 쓰레기를 업사이클 할 수 있다는 걸 알려주기위한 UI애니메이션을 구현해보자.
일단 조그마한 UI소스를 알맞은 위치에 배치시켜주었다.
- 그리고 Animation을 생성하여 애니메이터, 애니메이션을 생성했다.
- =>원하는 오브젝트를 선택하고 Window - Animation - Animation 또는 Ctrl + 6을 눌러주면 생성된다.
- 생성된 애니메이션을 UI용으로 녹화해보자.
- 오브젝트가 선택된 상태에서 녹화버튼을 누르고 Click문구의 배경과 텍스트의 투명도(Alpha값)을 0으로 만들어 투명하게 시작하도록 하였다.
- 이어서 적절한 시간이 지나면 완전히 불투명해지게 했으며 해당 두가지 변화값을 복사하여 시간만 조절해주었다.
- 서서히 나타남 - 불투명상태를 지속 - 서서히 투명해짐 상태를 실행하는 애니메이션이다.
실행해보면 위 짤과 같이 실행된다.
다음엔 해당 애니메이션을 Loop하도록 설정해주자.
이어서 애니메이션이 조건부로 실행될 수 있도록 Blend Tree를 통해 분기를 나눴다.
- 애니메이션에 BlendTree를 추가해주면 Animator에 BlendTree가 Float설정과 함께 나타난다. 이름을 설정해주자.
- 블렌더트리의 Float Threshold설정은 애니메이션의 인덱스에 따라 결정되니 자동으로 결정된 Threshold값에 따라 재생시킬 수 있도록 한다.
- 위 사진에서는 0인덱스 애니메이션은 0값일때 재생이므로 재생중단은 Float값을 0이 아닌값으로 설정해주면 된다.
그리고 조건부로 실행될 수 있도록 코딩을 하자.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
public class GarbageInfo : MonoBehaviour
{
public Animator animeBtnUpcycle;
bool isEmpty = true;
public void FillTrashAmount()
{
garbageAmount += 10;
if (!isEmpty) return;
Play_BtnUpcycle_Blink();
}
public void NoSkipTrashProcess_Front()
{
Stop_BtnUpcycle_Blink();
}
public void NoSkipTrashProcess_Reward()
{
Stop_BtnUpcycle_Blink();
}
public void SkipTrashProcess()
{
Stop_BtnUpcycle_Blink();
}
// Upcycle버튼 애니메이션
void Play_BtnUpcycle_Blink()
{
isEmpty = false;
animeBtnUpcycle.gameObject.SetActive(true);
animeBtnUpcycle.SetFloat("Blink", 0);
}
void Stop_BtnUpcycle_Blink()
{
animeBtnUpcycle.SetFloat("Blink", 1);
animeBtnUpcycle.gameObject.SetActive(false);
isEmpty = true;
}
}
- 이 위쪽에 구현한 차등보상 스크립트에 해당 내용들을 추가해주었다.
- 쓰레기 양이 0에서 하나라도 추가되면 애니메이션을 재생했으며 쓰레기를 수집할 때마다 다시 재생되지 않도록 bool값을 통한 조건문을 설정해주었다.
- 그리고 광고 또는 스킵버튼을 누르면 수집했던 쓰레기가 초기화되어 0이 되기때문에 0이된 이후에 isEmpty를 true로 만들어주고 애니메이션을 중단시켰으며 말풍선 자체도 SetActive(false)시켰다.
- 애니메이션 재생은 블렌더트리를 사용했으므로 SetFloat을 통해 재생시켰으며 재생할때는 0, 중단할때는 1을 할당하여 조작했다.
- 코딩까지 완료했다면 위와 같이 쓰레기를 수집했을 때 애니메이션이 재생되는 모습을 확인할 수 있다.
- =>그리고 깜빡이던 애니메이션은 쓰레기 업사이클버튼을 누르면 중단되는 것을 확인할 수 있다.