//tips
//Gameover遷移の導入
簡単な非同期が実装できたので、Gameoverシーンを作成し、そちらに遷移を行わせる。遷移はプレイヤーにアタッチされているHPScriptから行う。
プレイヤーが活動するシーンにLoadingScriptがアタッチされたからオブジェクトとnowloadingバックグラウンドをcanvas下に配置し、非表示にしておく。
HPScriptの体力が0になったときの処理にloadingScript.NextScene();を追加。
if (hp <= 0)
{
Destroy(gameObject); //ゲームオブジェクトが破壊される
loadingScript.NextScene();
loadingScript.NextScene();をタダで追加してもエラーになるので、きちんとコンポーネントの取得設定も同時に行っている。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HPScript : MonoBehaviour
{
[SerializeField]
private float maxHp = 3; //体力
[SerializeField]
public float hp;
// HP表示用UI
[SerializeField]
private GameObject HPUI;
// HP表示用スライダー
private Slider hpSlider;
LoadingScript loadingScript;
void Start()
{
hpSlider = HPUI.transform.Find("HPBar").GetComponent<Slider>();
hpSlider.value = 1f;
loadingScript = GameObject.FindWithTag("Loading").GetComponent<LoadingScript>();
}
void Update()
{
hpSlider.value = hp / maxHp;
if (hp <= 0)
{
// HP表示用UIを非表示にする
HideStatusUI();
}
}
//HPUIを非表示にする
public void HideStatusUI()
{
HPUI.SetActive(false);
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Weapon")
{
Debug.Log("hit Player");
Debug.Log("hit Damage");
hp -= other.gameObject.GetComponent<rodManager>().powerEnemy;
//hp -= other.gameObject.GetComponent<rodManager>().powerEnemy;
}
//体力が0以下になった時{}内の処理が行われる
if (hp <= 0)
{
Destroy(gameObject); //ゲームオブジェクトが破壊される
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Enemy")
{
Debug.Log("hit Enemy");
Debug.Log("hit Damage");
hp -= 1;
}
//体力が0以下になった時{}内の処理が行われる
if (hp <= 0)
{
Destroy(gameObject); //ゲームオブジェクトが破壊される
loadingScript.NextScene();
}
}
}
Now loading画面は一瞬しか見えないがきちんと非同期遷移ができている。
キャラクターの視点確保の補助のためにミニマップ機能を実装していく。カメラの映像をRender Textureに投影し、UIで表示する方法を考える。
まずは、プロジェクトフォルダにcreateからRender Textureを新規作成する。Render Textureは、リアルタイムでカメラが移す画像を表示させることができる。
これを利用するためにはミニマップ用のカメラが必要になるので、新規作成し、上空から見下ろすポジションに設定した後に、projectionをorthographicに変更。Target Textureに先に作ったRender TextureのMiniMapをアタッチする。
ここまでできたら新しいCanvasを作り、その中に枠画像のimageを入れ、その子要素としてRaw Imageを作る。そのTextureにRender Textureの「MiniMap」を設定するばミニマップの完成。
ミニマップの形を任意の形に編集していく。Rawimageの親にmask用のimageを作成し、maskコンポーネントをアタッチする。そのmaskコンポーネントの画像に切り抜きたい形を指定することでrawimageのデータがその形に切り抜かれる。
常にminimap用のカメラをプレイヤーの上空に飛ばせておけばプレイヤーの周囲のミニマップが表示されることになる。
ただ、表示にオブジェクトがたくさん入ると見づらいので表示するものを厳選していく必要がある。
この表示するか否かをカメラのCulling Mask機能を使用して選り分けていく。
この機能は、レイヤーごとにそのカメラへ表示するかどうかを設定することが可能で、この設定により特定のゲームオブジェクトだけをカメラに映すことができるようになる。
事前にゲームオブジェクトにレイヤーを設定しておき、cameraのインスペクターのculling maskタブをクリックすると、どのレイヤーを映すかを変更することができる。