//tips
//UIのドラッグ操作
プレイヤー画面上でUIを操作できる設定を確認する。簡単なシーンを作成し検証していく。
UIimageのみのシーンを作成し、imageに下記スクリプトをアタッチし、ドラッグされていたらMyDragUIメソッドを呼び出しInput.mousePositionでマウスの位置に画像を移動させるようにする。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ReceiveEvent : MonoBehaviour
{
public void MyDragUI()
{
transform.position = Input.mousePosition;
}
}
まだ、この段階ではドラッグイベントを受け取れないので、そちらの受け取りについて考える。
ドラッグイベントを発生させるためにImageオブジェクトのインスペクタでEvent Triggerを追加し、Dragイベントの追加を行う。そこに先に作成したReceiveEventのMyDragUIをアタッチする。
無事にUIをドラッグ操作することができるようになった。この仕組みをcanvas下にあるInventoryオブジェクトの大元に追加することできちんと操作反映することができるようになった。
プレイヤーの消滅と同時に別シーンへ移行する仕組みを導入する。NowLoading画面と遷移画面を新規unityでは作成していなかったので、復習の意味も兼ねてこちらでも作成しておく。
先のシーンにボタンを設置し、ボタンを押したら遷移するようにする。その際にnowloadingの表示を行うpanelの表示も行う。loading画面はButtonを押した時にアクティブにして表示するようにする。(NowLoading画面の作成方法はネット上に参考サイトが多くあるのでそちらを参照。)
Loading画面が作成できたら、シーンの空オブジェクトにアタッチするLoadingScriptを作成する。
AsyncOperationの値で読み込みの状況を把握する事が出来るので、スライダーの値にその読み込み状況を示すasync.progressの値を入れる。
async.progressが0.9を越えるとシーン移動が始まるようなので、Mathf.Clamp01を使ってasync.progressの値を調整している。
Mathf.Clamp01は0から1までの値に制限し、その値を返すもので、マイナスの場合は0を1より大きい場合は1を返す。ここでは0.9の時点で1になるようにすることでゲージが満タンになった後に遷移が行われるようにしている。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class LoadingScript : 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("0103");
// 読み込みが終わるまで進捗状況をスライダーの値に反映
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
}
Buttonを選択しOn Click()にNextSceneメソッドを設定。きちんと遷移先にしたいシーンをbuild setting のシーンの中に入れておくのを忘れない。
きちんと機能しているので、次はプレイヤーがdestroyされるタイミングでシーン遷移が行われるように変えていく。