簡體   English   中英

獎勵視頻腳本能量+1

[英]RewardVideo Script Energy +1

看到獎勵廣告后,我不知道如何以更多的精力獎勵玩家。 所以我想用能量獎勵玩家。 看起來您的帖子主要是代碼,請添加更多詳細信息。 看起來您的帖子主要是代碼,請添加更多詳細信息。 看起來您的帖子主要是代碼,請添加更多詳細信息。

private BannerView bannerAd;
private InterstitialAd interstitial;
private RewardBasedVideoAd rewardBasedVideo;
bool isRewarded = false;
// Start is called before the first frame update
void Start()
{
    MobileAds.Initialize(InitializationStatus => { });
    this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    this.rewardBasedVideo.OnAdRewarded += this.HandleRewardBasedVideoRewarded;
    this.rewardBasedVideo.OnAdClosed += this.HandleRewardBasedVideoClosed;
    this.RequestRewardBasedVideo();
    this.RequestBanner();
}
void Update()
{
    if (isRewarded)
    {
        isRewarded = false;
        
    }

我有一個 250/250 的能量棒,一旦按下播放,能量將變為 249/250 能量,我如何編寫腳本來增加玩家按下獎勵按鈕時的能量 +1?

[SerializeField] Text energyText;
[SerializeField] Text timerText;
[SerializeField] Slider energyBar;
private int maxEnergy = 250;
private int currentEnergy;
private int restoreDuration = 250;
private DateTime nextEnergyTime;
private DateTime lastEnergyTime;
private bool isRestoring = false;
// Start is called before the first frame update
void Start()
{
    if(!PlayerPrefs.HasKey("currentEnergy"))
    {
        PlayerPrefs.SetInt("currentEnergy", 50);
        Load();
        StartCoroutine(RestoreEnergy());

    }
    else
    {
        Load();
        StartCoroutine(RestoreEnergy());
    }
}
public void UseEnergy()
{
    if(currentEnergy >= 1)
    {
        currentEnergy--;
        UpdateEnergy();
        if (isRestoring == false)
        {
            if(currentEnergy + 1 == maxEnergy)
            {
                nextEnergyTime = AddDuration(DateTime.Now, restoreDuration);
            }
            StartCoroutine(RestoreEnergy());
        }
    }
    else
    {
        Debug.Log("Isufficient Energy!!");
    }
}
private IEnumerator RestoreEnergy()
{
    UpdateEnergyTimer();
    isRestoring = true;
    
    while(currentEnergy < maxEnergy)
    {
        DateTime currentDateTime = DateTime.Now;
        DateTime nextDateTime = nextEnergyTime;
        bool isEnergyAdding = false;

        while(currentDateTime > nextDateTime)
        {
            if(currentEnergy < maxEnergy)
            {
                isEnergyAdding = true;
                currentEnergy++;
                UpdateEnergy();
                DateTime timeToAdd = lastEnergyTime > nextDateTime ? lastEnergyTime : nextDateTime;
                nextDateTime = AddDuration(timeToAdd, restoreDuration);
            }
            else
            {
                break;
            }
        }
        if (isEnergyAdding == true)
        {
            lastEnergyTime = DateTime.Now;
            nextEnergyTime = nextDateTime;
        }
        UpdateEnergyTimer();
        UpdateEnergy();
        Save();
        yield return null;
    }
    isRestoring = false;
}


private DateTime AddDuration(DateTime datetime, int duration)
{
    return datetime.AddSeconds(duration);
    //return datetime.AddMinutes(duration);
}

private void UpdateEnergyTimer()
{
    if (currentEnergy >= maxEnergy)
    {
        timerText.text = "Full";
        return;
    }
    TimeSpan time = nextEnergyTime - DateTime.Now;
    string timeValue = String.Format("{0:D2}:{1:D1}", time.Minutes, time.Seconds);
    timerText.text = timeValue;
}

private void UpdateEnergy()
{
    energyText.text = currentEnergy.ToString() + "/" + maxEnergy.ToString();

    energyBar.maxValue = maxEnergy;
    energyBar.value = currentEnergy;

}


private DateTime StringToDate(string datetime)
{
    if (String.IsNullOrEmpty(datetime))
    {
        return DateTime.Now;
    }
    else
    {
        return DateTime.Parse(datetime);
    }
}

private void Load()
{
    currentEnergy = PlayerPrefs.GetInt("currentEnergy");
    nextEnergyTime = StringToDate(PlayerPrefs.GetString("nextEnergyTime"));
    lastEnergyTime = StringToDate(PlayerPrefs.GetString("lastEnergyTime"));
}

private void Save()
{
    PlayerPrefs.SetInt("currentEnergy", currentEnergy);
    PlayerPrefs.SetString("nextEnergyTime", nextEnergyTime.ToString());
    PlayerPrefs.SetString("lastEnergyTime", lastEnergyTime.ToString());
}

}

您可以確定用戶是否在廣告回調事件中獲勝添加此事件回調

// Called when the user should be rewarded for interacting with the ad.
this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;

然后

public void HandleUserEarnedReward(object sender, Reward args)
{
        //Now it's time to reward the user
        //Use those if you whant to get the amount from the ad setup
        //string type = args.Type;
        //double amount = args.Amount;
        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM