//tips
//左右の回転運動
先に作成したプレイヤーのフィールドでのスムーズな動きを実現するスクリプトで、左右の回転角度がイマイチだったので調整を行う。
transform.rightにかける値を100から300に変更した。
//right キーで右に進む
if (Input.GetKey("right"))
{
Vector3 moveForward = transform.position + transform.right * 300;
moveForward.y = 0;
Debug.Log("moveForward" + moveForward);
//Quaternion targetRotation = Quaternion.LookRotation(moveForward - transform.position);
Quaternion targetRotation = Quaternion.LookRotation(moveForward);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);
rb.position = transform.position + transform.right * 10.0f * Time.deltaTime;
Debug.Log(rb.position);
//MoveGo();
}
//left キーで左に進む
if (Input.GetKey("left"))
{
Vector3 moveForward = transform.position - transform.right * 300;
moveForward.y = 0;
Debug.Log("moveForward" + moveForward);
//Quaternion targetRotation = Quaternion.LookRotation(moveForward - transform.position);
Quaternion targetRotation = Quaternion.LookRotation(moveForward);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);
rb.position = transform.position - transform.right * 10.0f * Time.deltaTime;
//MoveGo();
}
//ロビー経由でのphoton同期カウントの適用
先日解決したphoton同期カウント機能をロビー経由で各プレイヤーに付加する方法を考える。
まずはロビーから遷移するsamplescene3にphotoncountのスクリプトとボタンを追加。
無事にカウントが作動し、UIの表示が行われた。
カウント作動ボタンがシーン表示にかぶってしまうので、パネルの上にボタンを表示し、クリック後は非表示に切り替えるようにする。
ヒエラルキーで下にある程の画面表示が前面になることを利用して配置換えを行う。人狼か否かの表示を最下層にし、その表示がでた段階でボタンを乗せたパネルを非表示にする。
人間側のUIも作成し、
public void Humanon()
{
humanon.SetActive(true);
}
をNumberPropスクリプトに追加。
photoncountスクリプトから
if (lobbyPlayerMaxCount != 2)
{
if (id == PhotonNetwork.LocalPlayer.UserId)
{
//numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Humanon();
}
//flag = false;
}
として表示できるようにする。
表示後に自動的に非表示になって欲しいので、AutohideUI スクリプトとAutohideUIsimpleスクリプトを作成し、ボタン配置しているパネルはAutohideUI で非表示化、人狼・人間のUIはAutohideUIsimpleで非表示とした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutohideUI : MonoBehaviour
{
[SerializeField]
GameObject gameobject;
public void Gohide()
{
StartCoroutine("canHide");
}
IEnumerator canHide()
{
yield return new WaitForSeconds(1);
gameobject.SetActive(false);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutohideUIsimple : MonoBehaviour
{
[SerializeField]
GameObject gameobject;
void Start()
{
StartCoroutine("Hide");
}
IEnumerator Hide()
{
yield return new WaitForSeconds(3);
gameobject.SetActive(false);
}
}
WaitForSecondsの秒数調整で人狼・人間のUIの方を後に非表示にさせることができる。
次にボタンのクリックではなく、遷移後のvoid Startのシーン開始タイミングで自動的に値を入手できないか考えてみる。
Photoncountスクリプトを下記のように変更。
/*
public void BeforeCount()
{
photonView.RPC(nameof(LobbyCount), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);
}
*/
private void Start()
{
photonView.RPC(nameof(LobbyCount), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);
}
ボタンUIにアタッチされていたphotonviewコンポーネントおよびphotoncountスクリプトをcanvasにアタッチする。
無事に成功した。こちらの方がシンプルなのでこちらを採用する。