//tips
//微調整
引き続きTermcheckスクリプトの勝利条件の修正を進める。
Termcheckスクリプトの下記でプレイヤー人数が二人以上になったときにwolfプレイヤーを取得させ、termcheck()メソッドを実行させるようにしているが生成が間に合わず、nullになっているとしたらplayers.Lengthでオブジェクトが取れていることと矛盾してしまう。
if (players.Length>1)
{
gamestart = true;
}
public void termcheck()
{
Winscenemove = GameObject.FindGameObjectWithTag("Wincheck").GetComponent<Winscenemove>();
if (myPlayer == null)
{
Winscenemove.Humanwin();
//SceneManager.LoadScene("humanwin");
}
再度unityのエディターも加えて過程を確認する。
違和感があったのは二人目の入室であるはずなのに一人目とカウントされ、次の入室者が二人目としてwolfのroleを取得したこと。
ただ、3番目であることは正確に認識されているようでDebug.Log(players.Length);には下記のように表示されている。
3
UnityEngine.Debug:Log(Object)
Termcheck:Update() (at Assets/Termcheck.cs:19)
この処理の後にはUIを自身の役のもののみ残すためhumanoffの処理を行なっている。
public void Humanoff()
{
Debug.Log("Humanoff()");
childobject = GameObject.FindWithTag("UICwolf");
childobject.SetActive(false);
Debug.Log(childobject);
}
これは同時にこのタイミングでwolfoffを自分より前に入室したプレイヤーたちが行なっていることを表す。
つまり、最初の一人が余分にいるため、wolfがいない状態でtermcheck();が実行されているので問題が起きていることがわかった。
gamestart はboolなので4人揃ったら実行すればいい(players.Length>3)。これで問題なくなった。
ただ、なぜ最初の一人がrole上認識されていないのかがわからないのでこちらの問題を究明していく。
ルームには全員入室している状態で、キャラクター選択ボタンを押すと、下記2つのメソッドが実行される。OpenUi2()はそのキャラクターのhumanおよびwolfのui表示処理で、BeforeCount()はプレイヤー生成カウント処理となる。
public void BeforeCount()
{
photonView.RPC(nameof(LobbyCount), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);
}
public void OpenUi2()
{
StartCoroutine("thisHide2");
flag = true;
}
BeforeCount()の方にエラーが生じている恐れがあるので内容を確認していく。
Debug.Log(lobbyPlayerMaxCount);の推移を注視していく。
[PunRPC]
public void LobbyCount(string id)
{
lobbyPlayerMaxCount++;
Debug.Log(lobbyPlayerMaxCount);
Onflag(id);
}
最初にピックした場合4人分呼ばれている。
2番目、3番目にピックした場合も試したが問題なく反応した。
選択画面への遷移にタイムラグがあり、それが問題になっている可能性があるので、画面待機時間をもう少し伸ばしてみる。
CharaUIchange2スクリプトの管理秒数を30まで増加させて、30秒経っても選択されていなかったら自動処理するようにした。
if (seconds >= 30f)
{
if (!flag)
{
OpenUi1();
photoncount.BeforeCount();
}