code ソーシャル

Unityアプリcodetips(51)

スポンサーリンク

//tips

//ボタンクリック一定時間画像表示後にクローズボタン表示

ボタンクリックをして画像を表示し、一定時間経過したらクローズボタンを表示する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class admanager : MonoBehaviour
{
[SerializeField] GameObject panel;
[SerializeField] GameObject openb;
[SerializeField] GameObject closeb;

void Start()
{
panel.SetActive(false);
closeb.SetActive(false);
}

void Update()
{

}

public void PushAd()
{
StartCoroutine("Pushadmanage");

}

IEnumerator Pushadmanage()
{
panel.SetActive(true);

yield return new WaitForSeconds(3);

closeb.SetActive(true);

}

public void PushAdclose()
{
panel.SetActive(false);
closeb.SetActive(false);
}

 

}

さらにクローズボタンをクリックしたらポイント付与する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class admanager : MonoBehaviour
{
[SerializeField] GameObject panel;
[SerializeField] GameObject openb;
[SerializeField] GameObject closeb;

public int point_num;

void Start()
{
panel.SetActive(false);
closeb.SetActive(false);
}

void Update()
{

}

public void PushAd()
{
StartCoroutine("Pushadmanage");

}

IEnumerator Pushadmanage()
{
panel.SetActive(true);

yield return new WaitForSeconds(3);

closeb.SetActive(true);

}

public void PushAdclose()
{
panel.SetActive(false);
closeb.SetActive(false);

point_num = PlayerPrefs.GetInt("CPoint", 2);
point_num += 1;

PlayerPrefs.SetInt("CPoint", point_num);
PlayerPrefs.Save();
//PlayerPrefs.DeleteKey("CPoint"); //CPointのデータのみ初期化
}

 

}

//loading画面の作成

ボタンを押した後の遷移の間にloading画面を挟む。

AsyncOperationクラスを使うことにより、読み込みの進捗を表示することができる。

これは重い処理の実行を待つのではなく、重い処理をスキップして、別の処理を実行することを意味する。

これは非同期処理と言われ、全てのタスクを処理してから次に移る同期処理と異なる。

下記参照:

https://gametukurikata.com/program/nowloading

https://docs.unity3d.com/ja/current/ScriptReference/AsyncOperation.html

https://qiita.com/4_mio_11/items/3a0b06819d9591c5d410

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Loading : MonoBehaviour
{

// 非同期動作で使用するAsyncOperation
private AsyncOperation async;
// シーンロード中に表示するUI画面
[SerializeField]
private GameObject loadUI;
// 読み込み率を表示するスライダー
[SerializeField]
private Slider slider;

public void NextScene()
{
// ロード画面UIをアクティブにする
loadUI.SetActive(true);

// コルーチンを開始
StartCoroutine("LoadData");
}

IEnumerator LoadData()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene1");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
}

//ステージ選択画面にloadingを実装

IEnumeratorの方でint stageNoをとると、同じボタンのクリックでNextScene()とPushStageSelectButton(int stageNo)が実行され、エラーになってしまうので、NextScene()でstageNoを管理し、コルーチンで行うPushStageSelectButtonはstageNoの数だけスクリプトを記載した。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class StageSelectManager2 : MonoBehaviour
{
public GameObject[] stageButtons; //ステージ選択ボタン配列

// 非同期動作で使用するAsyncOperation
private AsyncOperation async;
// シーンロード中に表示するUI画面
[SerializeField]
private GameObject loadUI;
// 読み込み率を表示するスライダー
[SerializeField]
private Slider slider;

void Start()
{
//PlayerPrefs.DeleteAll();

int clearStageNo = PlayerPrefs.GetInt("CLEAR", 0); //どのステージまでクリアしているのかをロード(セーブされていなければ「0」)

//ステージボタンを有効化
for (int i = 0; i <= stageButtons.GetUpperBound(0); i++)
{
bool buttonEnable;

if (clearStageNo < i)
{
buttonEnable = false; //前ステージをクリアしていなければ無効
}
else
{
buttonEnable = true; //前ステージをクリアしていれば有効
}

stageButtons[i].GetComponent<Button>().interactable = buttonEnable; //ボタンの有効/無効を設定
}
}

void Update()
{

}

//ステージ選択ボタンを押した
//public void PushStageSelectButton(int stageNo)

//SceneManager.LoadScene("GameScene" + stageNo); //ゲームシーンへ

public void NextScene(int stageNo)
{
// ロード画面UIをアクティブにする
loadUI.SetActive(true);

// コルーチンを開始
StartCoroutine("PushStageSelectButton" + stageNo);
}

IEnumerator PushStageSelectButton1()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene1");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

IEnumerator PushStageSelectButton2()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene2");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

IEnumerator PushStageSelectButton3()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene3");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton4()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene4");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton5()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene5");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
IEnumerator PushStageSelectButton6()
{
// シーンの読み込みをする
async = SceneManager.LoadSceneAsync("GameScene6");

// 読み込みが終わるまで進捗状況をスライダーの値に反映させる
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}

}

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, ソーシャル
-,

Copyright© BUSINESS HACKER , 2020 All Rights Reserved Powered by AFFINGER5.