#c# #unity3d
#c# #unity3d
Вопрос:
Я создал очень маленькую игру в Unity, и все идет нормально, кроме показа рекламы. Кроме того, я не получаю ошибку, просто небольшое предупреждение ‘Внедрить IUnityAdsListener и вызвать Advertisement .addListener()». Я просмотрел все форумы в Unity, и все равно он не работает в новом методе. Пожалуйста, помогите.
Мой код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Advertisements;
using UnityEngine.UI;
public class App_Initialize : MonoBehaviour
{
public GameObject inMenuUI;
public GameObject inGameUI;
public GameObject gameoverUI;
public GameObject adButton;
public GameObject restartButton;
public GameObject player;
public bool hasGameStarted = false;
private bool hasSeenRewardedAd = false;
void Awake()
{
Shader.SetGlobalFloat("_Curvature", 2.0f);
Shader.SetGlobalFloat("_Trimming", 0.1f);
Application.targetFrameRate = 60;
}
// Start is called before the first frame update
void Start()
{
player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
inMenuUI.gameObject.SetActive(true);
inGameUI.gameObject.SetActive(false);
gameoverUI.gameObject.SetActive(false);
}
public void PlayButton()
{
if(hasGameStarted == true)
{
StartCoroutine(StartGame(1.0f));
}
else
{
StartCoroutine(StartGame(0.0f));
}
}
public void PauseGame()
{
player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
hasGameStarted = true;
inMenuUI.gameObject.SetActive(true);
inGameUI.gameObject.SetActive(false);
gameoverUI.gameObject.SetActive(false);
}
public void GameOver()
{
player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
hasGameStarted = true;
inMenuUI.gameObject.SetActive(false);
inGameUI.gameObject.SetActive(false);
gameoverUI.gameObject.SetActive(true);
if(hasSeenRewardedAd == true)
{
adButton.GetComponent<Image>().color = new Color(1, 1, 1, 0.5f);
adButton.GetComponent<Button>().enabled = false;
adButton.GetComponent<Animator>().enabled = false;
restartButton.GetComponent<Animator>().enabled = true;
}
}
public void RestartGame()
{
SceneManager.LoadScene(0);
}
public void ShowAd()
{
if (Advertisement.IsReady("rewardedVideo"))
{
var options = new ShowOptions { resultCallback = HandleShowResult };
Advertisement.Show("rewardedVideo", options);
}
}
private void HandleShowResult(ShowResult result)
{
switch (result)
{
case ShowResult.Finished:
Debug.Log("The ad was successfully shown");
hasSeenRewardedAd = true;
StartCoroutine(StartGame(1.5f));
break;
case ShowResult.Skipped:
Debug.Log("The ad was skipped before reaching the end");
break;
case ShowResult.Failed:
Debug.LogError("The ad failed to be shown");
break;
}
}
IEnumerator StartGame(float waitTime)
{
inMenuUI.gameObject.SetActive(false);
inGameUI.gameObject.SetActive(true);
gameoverUI.gameObject.SetActive(false);
yield return new WaitForSeconds(waitTime);
player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.None;
player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionY;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
Application.Quit();
}
}
Комментарии:
1. Руководство: docs.unity3d.com/Packages/com.unity.ads@3.4/manual /…
Ответ №1:
Сначала вам нужно добавить пространство имен IUnityAdsListener в ваш класс.
public class App_Initialize: MonoBehaviour, IUnityAdsListener {}
Затем добавьте список в свою функцию запуска и инициализируйте объявления Unity с помощью вашего GameID и bool TestMode .
void Start()
{
Advertisement.AddListener(this);
Advertisement.Initialize(gameId, testMode);
}
Вы получите предупреждение о том, что вы еще не внедрили правильные интерфейсы для IUnityAdsListener, поэтому добавьте их в свой скрипт.
public void OnUnityAdsDidError(string message)
{
//YOUR CODE
}
public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
{
//YOUR CODE
}
public void OnUnityAdsDidStart(string placementId)
{
//YOUR CODE
}
public void OnUnityAdsReady(string placementId)
{
//YOUR CODE
}
Наконец, удалите прослушиватель, когда вы уничтожаете игровой объект или сцену, в которой находится ваш скрипт, чтобы избежать ошибок.
private void OnApplicationQuit()
{
Advertisement.RemoveListener(this);
}
private void OnDestroy()
{
Advertisement.RemoveListener(this);
}
Так что это должен быть ваш конечный результат:
using UnityEngine;
using UnityEngine.Advertisements;
public class App_Initialize : MonoBehaviour, IUnityAdsListener
{
public string gameId = "YOUR_GAME_ID";
public string myPlacementId = "YOUR_PLACEMENT_ID";
public bool testMode = true;
void Start()
{
Advertisement.AddListener(this);
Advertisement.Initialize(gameId, testMode);
}
private void OnApplicationQuit()
{
Advertisement.RemoveListener(this);
}
private void OnDestroy()
{
Advertisement.RemoveListener(this);
}
public void OnUnityAdsDidError(string message)
{
//YOUR CODE
}
public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
{
//YOUR CODE
}
public void OnUnityAdsDidStart(string placementId)
{
//YOUR CODE
}
public void OnUnityAdsReady(string placementId)
{
//YOUR CODE
}
}