//tips
//遷移後の表示UIの調整
ロビーからプレイシーンに遷移後にキャラクターピックUI→人間・人狼roleの表示→ピックキャラクターのUI表示という順で考えていたが、ピックキャラクターのUI表示がピックしたものと異なる現象が発生しているので修正する。
CharaUIchange2 スクリプトへのui2のオブジェクトのアタッチミスを見つけたので修正。
また、制限時間オーバーの場合の条件を下記に変更した。
if (seconds >= 10f)
{
if (!flag)
{
OpenUi1();
photoncount.BeforeCount();
}
表示は意図した通りにできたが一瞬だけピックキャラクターのUI表示が人間・人狼roleの表示よりも先に表示されてしまうので時間差をつける。CharaUIchange2を下記のように修正した。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CharaUIchange2 : MonoBehaviour
{
[SerializeField]
GameObject baseui;
[SerializeField]
GameObject ui1;
[SerializeField]
GameObject ui2;
[SerializeField]
private float seconds;
// 前のUpdateの時の秒数
private float oldSeconds;
[SerializeField]
GameObject timerText;
[SerializeField]
photonCount photoncount;
Text timer;
bool flag =false;
void Start()
{
seconds = 0f;
oldSeconds = 0f;
timer = timerText.GetComponent<Text>();
}
void Update()
{
seconds += Time.deltaTime;
if (seconds >= 10f)
{
if (!flag)
{
OpenUi1();
photoncount.BeforeCount();
}
}
// 値が変わった時だけテキストUIを更新
if ((int)seconds != (int)oldSeconds)
{
timer.text = (10 - seconds).ToString("f0");
}
oldSeconds = seconds;
}
public void OpenUi1()
{
StartCoroutine("thisHide");
flag = true;
}
public void OpenUi2()
{
StartCoroutine("thisHide2");
flag = true;
}
IEnumerator thisHide()
{
yield return new WaitForSeconds(2);
ui1.SetActive(true);
yield return new WaitForSeconds(1);
baseui.SetActive(false);
}
IEnumerator thisHide2()
{
yield return new WaitForSeconds(2);
ui2.SetActive(true);
yield return new WaitForSeconds(1);
baseui.SetActive(false);
}
}
//環境シーンの整備
橋や岩などを追加して、Forest animalsのアセットからラビットを取り出し、盤面を写した。
Envplayermoveスクリプトの前進に対して、回転の影響が出ているのでそちらを調整する。
また梯子を登るなどのアクションスクリプトも用意する必要があることが確認できた。
//Envplayermoveスクリプトの移動方法の修正
Envplayermoveスクリプトの前進・後進に対して、左右の向き変更の回転の影響が出ているのでそちらを調整した。
内容としては簡単で前進後進の場合は回転運動(rotationの値)はなくても良いので、下記のtargetrotationの部分を削除し、純粋な移動量だけ考えるようにした。
//Quaternion targetRotation = Quaternion.LookRotation(moveForward);
//transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);
また、キーのワンクリックあたりの左右運動の回転量をもっと大きくしたかったので、向きの方向を表すVector3 moveForward = transform.position + transform.right * 500;を500まであげ、実際のクリック時の移動距離rb.position = transform.position + transform.right * 3.0f * Time.deltaTime;の一クリックあたりの移動量を3に下げることで、一回のクリックに対してより大きな角度で回転することができるようにした。
Rabbitをprefab化し、photonのPhotonNetwork.Instantiate("Rabbit", v, Quaternion.identity);で呼び出せるようにする。その際にはphoton view,photontarnsform,rigidbody,colliderなどがついているか確認する。
生成し、動きはしたが現状ではアクション動作が付随していないので味気なく感じる。
動きに対してアクションも付け加えていく。カプセルコライダーの中身があっていないようで接地中に若干地面から浮いていたので、colliderのcenterのy値で微調整する。
アクションはanimator.SetTrigger("playwalking”);を上下左右の各Input.GetKeyの中に入れる。
それなりに見えるようになったがバックが少しおかしいのとモーションの中に座標移動も組み込まれているように感じるのでそこも確認する。
バックのコードから解決した。down矢印クリックを、前進とは逆方向に即座に向かせ、down矢印クリック中は継続して逆方向に前進させるスクリプトに変えた。
というのも、逆方向に即座に向かせるだけにすると、down矢印クリックを連打すると、永遠にその場で向きを変えるだけになるからである。
なのでboolでdown矢印クリックを連打する場合と他のクリックが押された場合でboolの処理工程を少し変化させた。下記スクリプトとなる。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnvPlaymove4 : MonoBehaviour
{
Rigidbody rb;
float moveSpeed = 1f;
Vector3 lastmov_f;
bool Inverseflag = true;
void Start()
{
// Rigidbodyコンポーネントを取得する
rb = GetComponent<Rigidbody>();
}
[SerializeField]
Animator animator;
void FixedUpdate()
{
// Upキーで前に進む
if (Input.GetKey("up"))
{
Inverseflag = true;
animator.SetTrigger("playwalking");
Vector3 moveForward = transform.position + transform.forward * 100;
moveForward.y = 0;
Debug.Log("moveForward" + moveForward);
//Quaternion targetRotation = Quaternion.LookRotation(moveForward);
//transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);
rb.position = transform.position + transform.forward * 10.0f * Time.deltaTime;
//MoveGo();
}
// Downキーで後ろに進む
if (Input.GetKey("down"))
{
animator.SetTrigger("playwalking");
if (Inverseflag)
{
Vector3 moveForward = transform.position - transform.forward * 100;
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);
transform.rotation = targetRotation;
Inverseflag = false;
}
rb.position = transform.position + transform.forward * 10.0f * Time.deltaTime;
//MoveGo();
}
//right キーで右に進む
if (Input.GetKey("right"))
{
Inverseflag = true;
animator.SetTrigger("playwalking");
Vector3 moveForward = transform.position + transform.right * 500;
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 * 0.5f * Time.deltaTime;
Debug.Log(rb.position);
//MoveGo();
}
//left キーで左に進む
if (Input.GetKey("left"))
{
Inverseflag = true;
animator.SetTrigger("playwalking");
Vector3 moveForward = transform.position - transform.right * 500;
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 * 1.0f * Time.deltaTime;
//MoveGo();
}
}
}
これでかなりスッキリした動きに変わった。