//tips
//勝利条件同期対応
wolfUIに勝利条件のcheckを行わせるスクリプトをアタッチしたが、他のシーンにも遷移処理を同期させる必要があるので、wolfUIからシーン上でアクティブなスクリプトを参照し、そちらで同期メソッド処理を行わせるようにする。
新たに空のWinnercheckオブジェクトを作成し、そちらにWinscenemoveスクリプトを作成。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using UnityEngine.SceneManagement;
public class Winscenemove : MonoBehaviourPunCallbacks
{
public void Humanwin()
{
photonView.RPC(nameof(DoHumanwin), RpcTarget.All);
}
[PunRPC]
void DoHumanwin()
{
SceneManager.LoadScene("humanwin");
}
public void Wolfwin()
{
photonView.RPC(nameof(DoWolfwin), RpcTarget.All);
}
[PunRPC]
void DoWolfwin()
{
SceneManager.LoadScene("wolfwin");
}
}
こちらへTermcheckスクリプトから参照させるようにした。
public void termcheck()
{
Winscenemove = GameObject.FindGameObjectWithTag("Wincheck").GetComponent<Winscenemove>();
if (myPlayer == null)
{
Winscenemove.Humanwin();
//SceneManager.LoadScene("humanwin");
}
else
{
if (players.Length < 2)//wolfは生存しているのでhumanがいる場合は2以上
{
Winscenemove.Wolfwin();
//SceneManager.LoadScene("wolfwin");
}
}
}
こちらで実際に遷移が行われるか確認する。
Winnercheckオブジェクトにもphotonviewを追加。
無事に遷移が確認できた。すべてのキャラクターのwolfUIにtermcheckスクリプトをアタッチを行う。
若干unityの挙動が重くなり始めたので、念のためnowloading画面を準備していく。
新たにNowloadingsceneを作成し、canvasにpanelとsliderを設置し、簡単なloading画面を作成。
Canvasにはシーンが読み込まれたら遷移を実行するスクリプトをアタッチした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class NowLoading : MonoBehaviour
{
private AsyncOperation async;
[SerializeField]
private Slider slider;
void Start()
{
StartCoroutine("LoadData");
}
IEnumerator LoadData()
{
async = SceneManager.LoadSceneAsync("env2");
while (!async.isDone)
{
var progressVal = Mathf.Clamp01(async.progress / 0.9f);
slider.value = progressVal;
yield return null;
}
}
}
きちんと機能した。
ここからは、スポーン位置などを整えてよりゲームらしくしていく。