06 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 08

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【ハルシオンブログ】シーン移動の際に、次のシーンが重いとき。ローディング画面的なのをかましたくなりますよね?そのやり方。 

こんにちは!坂内っす。
熱い!暑い!夏ですね!梅雨もあけました。
熱射病、日射病にお気をつけをば。

Unityでローディング画面とか作ってみましょう。
次のシーンに移動する際に、次シーンのロード(始めに色々ロードとかすると長いよね)が長くて、「タップしたのにシーン移動しないよー」って時に、簡単なロード画面を挟む方法。

①初期画面(StartSceneシーン)でボタンを押す
②シーン移動
③次画面(NextSceneシーン)で音楽データ(4曲)、画像データ(1枚)を読み込んでメモリにいれて、画面に表示する。

あ、そういえばソシャゲ「メギド72」の楽曲無料ダウンロードとかのイベントやってるんですね。
https://app.famitsu.com/20180702_1318019/

あ、メギドやったことないっすけどね。

ってことで、4曲遊びで落としてみたのを、読み込んでみます。



1ファイル1ファイルがでかいっすね。
あと1枚絵を置いてます。

コードはこんな感じ。
【StartScene.cs】(始めのシーンにつけてね)
using UnityEngine;
using UnityEngine.SceneManagement;

public class StartScene : MonoBehaviour {

public void OnClickNext() {
SceneManager.LoadScene("NextScene");
}
}


【NextScene.cs】(ボタン押した後に開かれるシーンにつけてね)
using UnityEngine;
using UnityEngine.UI;

public class NextScene : MonoBehaviour {

public AudioClip[] audios;
public Image imgTest;
public Sprite testSprite;

private void Start() {
imgTest.sprite = testSprite;
}
}



こんな感じで、曲をアサインしているだけ。



実際に動かすと、こうなります。

実際にどれくらいボタンを押してから次シーンが開くまで時間がかかるか試してみましょう。

PCなのでそれなりに早いですが、スマホだとクリックした後の反応がない。

こんな時はローディング画面を使うといいですよね。

まぁ、他のサイトが書いてるので2番煎じになりますが。

①ローディング画面をシーン移動の前のシーン(StartScene)につけます。
ローディング画面にはプログレス用のSliderを付けてます。
また、ローディング画面ははじめActiveを外しておきます。


②StartScene.csをいじります。
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class StartScene : MonoBehaviour {
private AsyncOperation async;
public GameObject loadingSetPref;
public Slider gage;

public void OnClickNext() {
loadingSetPref.SetActive(true);
StartCoroutine(LoadScene());
}

IEnumerator LoadScene() {
yield return new WaitForSeconds(0.1f);
async = SceneManager.LoadSceneAsync("NextScene");
async.allowSceneActivation = false;

while(async.progress < 0.9f) {
gage.value = async.progress;
yield return null;
}
gage.value = 1f;
yield return new WaitForSeconds(1f);
async.allowSceneActivation = true;
}
}



こんな感じでやれば、ローディング画面ができます。

では実際に実行してみよう。

なんかあんまりロード長くないからかもだけど、一応それぽくなりました?
実機だとちゃんとローディング画面として機能してますよ!



ってことで、簡単にですが、ローディング画面の作り方でした!

ではあでゅ~ノシ
スポンサーサイト

Category: 開発日記(Unity)

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/515-c2f1a908
この記事にトラックバックする(FC2ブログユーザー)