質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

756閲覧

一定回数での表示とinvokeの設定ができない

hikaaaaaaaa

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/01/23 07:39

編集2020/01/23 09:20

アプリ内レビューを設定し、そのレビューを一定回数で表示させ、表示のタイミングを設定しようとした際に下記のコードを書いたのですが、このコードでは、表示のタイミングは設定が反映されるのですが、毎回そのSceneに移行した際にアプリレビューが表示されてしまいます。

こちら3回シーンを開いたら1回表示をさせてinvokeのメソッドも反映をさせたいのですが、どうしても毎回表示がされてしまいます。

こちら解決方法をご存知の方はご教示いただけますと幸いです。

C#

1//一部抜粋 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.SceneManagement; 7#if UNITY_IOS 8using UnityEngine.iOS; 9#endif 10 11void Start() 12{StartCoroutine("ShowReviewText"); 13 14} 15 16private IEnumerator ShowReviewText() 17 18 { 19 for (int i = 0; i < 10; i++) 20 { 21 yield return null; 22 if (i % 3 == 0) 23 { 24 Invoke("ShowReview", 1); 25 26 } 27 28 } 29 30 31 } 32 33public void ShowReview() 34 { 35 #if UNITY_IOS 36 if (Device.RequestStoreReview()) 37 { 38 39 } 40 41 //Androidやそれ以外の場合の処理 42 #else 43 44 #endif 45 }

追記

上記の方法以外にも下記のコードで試したのですが、こちらですと画面がフリーズしてしまいます。
void Start内でメソッドを実装すると連続で処理が行われてしまうため、Update内にStartCoroutine(ShowReviewText(10, 1.0f));を追加し、invokeではなく、
yield return new WaitForSeconds(interval);での表示タイミングをずらすことを試みました。

C#

1//一部抜粋 2 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6using UnityEngine.UI; 7using UnityEngine.SceneManagement; 8#if UNITY_IOS 9using UnityEngine.iOS; 10#endif 11 12void Update() 13 { 14 StartCoroutine(ShowReviewText(10, 1.0f)); 15 } 16private IEnumerator ShowReviewText(int num, float interval) 17 18 { 19 for (int i = 0; i < num; i++) 20 { 21 yield return null; 22 23 if (i % 3 == 0) 24 { 25 yield return new WaitForSeconds(interval); 26 27 ShowReview(); 28 29 30 } 31 32 } 33 34 35 } 36 37 public void ShowReview() 38 { 39 #if UNITY_IOS 40 if (Device.RequestStoreReview()) 41 { 42 //レビュー出た 43 } 44 45 //Androidやそれ以外の場合の処理 46 #else 47 48 #endif 49 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

3回に1回というのは、3回シーンを開いたら1回表示する、ということですか?

上記のコードを見るに、3フレームだけしか待っていないように見えます。
yield return nullは1フレーム待って次のフレームで処理が再開されてしまうので、コードのforループだとたかだか10フレームで処理が終了してしまいます。

なので実質、毎回シーンを開くたびに表示される、という状態になっています。
コルーチンの理解が不十分だと思うのでもう少し調べてみてください。

そしておそらく望まれている処理はコルーチンでは実現できません。
シーンを開いた回数をなにかしらで保持し、シーンを開くたびに加算して、その回数が3の倍数だったら、という処理を書かないとなりません。

投稿2020/01/23 09:13

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hikaaaaaaaa

2020/01/23 09:16

ご回答ありがとうございます。 3回シーンを開いた際に1回表示をするように設定をしたかったです。 今回コルーチンについて初めて勉強したのでもう少し勉強してみます。 また、処理のアドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問