2015-03-18 4 views
0

Я хочу показывать рекламу в своей 2D-игре каждые 5 раз, когда сцена загружается. Я попытался это:Показать объявления Unity Каждые 5 раз загружаются сцены. (Unity 3D)

void Update() 
{ 
    if(GameObject.Find ("Main Camera").transform.position.x == -23) { 
     showNumber += 1; 
     if(showNumber == 5) { 
      if(Advertisement.isReady()){ 
       Advertisement.Show(); 
      } 
     } 
     if(showNumber > 5) { 
      showNumber = 1; 
     } 
    } 
} 

Как мне сделать номер только изменить только один раз, так что будет изменить только один раз, когда положение основной камеры составляет -23. Правильно, не меняется каждый кадр.

Редактировать

void OnTriggerEnter(Collider other) { 
    DontDestroyOnLoad (gameObject); 
    if(other.name == "Main Camera") { 
     showNumber +=1; 
     if(showNumber == 5) { 
      if(Advertisement.isReady()){ 
       Advertisement.Show(); 
      } 
     } 
     if(showNumber > 5) { 
      showNumber = 0; 
     } 
    } 
} 

ответ

0

Решение: Поместите showNumber +=1 Одер showNumber++ в

void Start() 
    { 
     showNumber +=1; 
    } 

Я думаю, было бы проще, если бы вы написать это значение в текстовый файл, а затем прочитать его из этого текстового файла, все в событии запуска, а не в обновлении.

Пуск вызывается один раз, и обновление вызывается каждый кадр.

Быстрое и грязное Редактирование: Поместите зону триггера на нужную позицию. Затем вызовите метод OnTriggerEnter.

void OnTriggerEnter(Collider other) { 
    showNumber +=1; 
    if(showNumber == 5) { 
     if(Advertisement.isReady()){ 
      Advertisement.Show(); 
     } 

} 

Edit: Ваша проблема в том, что showNumber +=1; называется как 30-60 раз, в зависимости от вашего компьютера. Вы можете добавить переменную bool, чтобы проверить, является ли она новой записью в этой точке.

bool alreadyEntered = false; 
void Update() 
{ 
    if(GameObject.Find ("Main Camera").transform.position.x == -23 && alreadyEntered == false) { 
     showNumber += 1; 
     alreadyEntered = true; 
     if(showNumber == 5) { 
      if(Advertisement.isReady()){ 
       Advertisement.Show(); 
      } 
     } 
     if(showNumber > 5) { 
      showNumber = 1; 
     } 
    } 
} 
+0

Но я не хочу, чтобы он был вызван с самого начала сцены. Я хочу, чтобы его вызывали один раз, когда камера находится в этом положении каждые 5 раз. –

+0

А, ну, извините, я неправильно понял ваше первое предложение, я собираюсь отредактировать свой ответ. –

+0

Я прикрепил сценарий к игровому объекту в желаемой области (см. Править выше), но не работает. –

0

Сохранить номер показа в превенциях игрока.

private int showNumber{ 
     get{ 

      return PlayerPrefs.GetInt("showNumber"); 
     } 
     set{ 
      PlayerPrefs.SetInt("showNumber",value); 

     } 
    } 
void OnTriggerEnter(Collider other) { 
    showNumber +=1; 
    if(showNumber == 5) { 
     if(Advertisement.isReady()){ 
      Advertisement.Show(); 
      showNumber = 0; 
     } 

} 
Смежные вопросы