//tips
//room遷移も交えたキャラクター操作システムの確認
Rabbitのスピード鈍化デバフのboolが反応しているにもかかわらず攻撃の受け手のHPscriptではうまくそれを反映できていない気がして
GameObject rootobj = other.transform.root.gameObject;
envPlaymove5photon = rootobj.GetComponent<EnvPlaymove5photon>();
の箇所にデバッグを仕込み様子を見た。
デバッグではきちんと成功していたので、Rabbitslow()の中身の値を修正した。
public void Rabbitslow()
{
StartCoroutine("Rabbitslowfunc");
}
IEnumerator Rabbitslowfunc()
{
rabbitspeedup = 0.5f;
yield return new WaitForSeconds(2);
rabbitspeedup = 1;
//rabitslowflag = false;
Debug.Log("rabitslowflagfalse");
}
この操作の中で、やけに攻撃が当たらない現象に出くわし、sceneviewとgameviewを見比べながら攻撃動作をおこなった。
sceneviewの方が正確な場所を反映しているよう。これはカメラの問題なのか、同期の問題なのか確認するため一度rabbitにカメラを設定する。
cameraにmaincameraタグをつけdepthを10にしたものをprefabに組み込んだ。
Rabbitのカメラを確認するとgameviewとsceneviewに相違なく、動かしてみても、多少の同期遅れはあったものの最終位置は正しい場所に落ち着いた。
なので、攻撃が当たりにくかったのはシーンに設置したカメラの問題であることがわかる。
せっかくなのでキャラクターに今後搭載するmaincameraも作成する。シーン上にはプレイヤーの数だけmaincameraは存在することになってしまうのでそこはphotonで自身のカメラをmainに据えるように工夫する必要がある。
単純にprefabの子要素にして座標とrotationをインスペクターで調整してあげるだけで十分なカメラ機能を果たせた。HPUIが回転してしまっているので自身のカメラに対して常に正面に向くように調整する。
新たにHPUICameraLookatスクリプトを作成し、HPUIのスクリプトを下記のものに切り替えた。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HPUICameraLookat : MonoBehaviour
{
[SerializeField]
Camera mycamera;
void Update()
{
Vector3 lookpos = mycamera.transform.position;
lookpos.y = transform.position.y;
transform.LookAt(lookpos);
}
}
これで一人プレイの場合は問題ない。マルチプレイの場合には、さらに異なるプレイヤーのHPUIもきちんと自身に向けさせるためには工夫が必要となる。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HPUICameraLookat : MonoBehaviour
{
Camera mycamera;
void Start()
{
mycamera = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
}
void Update()
{
Vector3 lookpos = mycamera.transform.position;
lookpos.y = transform.position.y;
transform.LookAt(lookpos);
}
}
さらにcamera自体にもスクリプトをアタッチし、photonviewismineの場合のみカメラを表示するようにする。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
public class Mycamornot : MonoBehaviourPunCallbacks
{
void Start()
{
if (photonView.IsMine)
{
this.gameObject.SetActive(true);
}
else
{
this.gameObject.SetActive(false);
}
}
}
これで複数プレイヤーでも問題なく反映されるようになった。