//tips
//カウント管理の仕組みとゲームシステムの連動
GolemSoulCounterスクリプトでキャラクター保有のカウントを減らすことができたので、次はPostで管理するカウント変数を増やし、その数がmaxになった時にゲームクリアになるようにする。
SoulPostオブジェクトにSoulPostManagerを作成し、そこでPost保有の魂の数を管理させる。
下記のコードを新たに作成した提出個数を表示するテキストにアタッチした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SoulPostTextcount : MonoBehaviour
{
public int Postcount;
string soultext;
void Update()
{
soultext = Postcount.ToString();
GetComponent<Text>().text = "現在差し出された魂は"+soultext+ "個です";
}
public void PostManage()
{
Postcount++;
}
}
Postcountが3つ貯まったらクリアシーンに遷移するようにする。GoalSceneを作成し、SoulPostTextcountスクリプトにはusing UnityEngine.SceneManagement;
と SceneManager.LoadScene("GoalScene”);を挿入。
作成したゴールシーンには下記スクリプトをアタッチしておく。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class BackGameScript : MonoBehaviour
{
void Update()
{
if (Input.anyKeyDown)
{
SceneManager.LoadScene("Gohlem Test");
}
}
}
無事にゲームクリアシーンとの行き来もできた。今回のGohlem対応のオブジェクトはenv2シーンに入れても問題ないはずなので、Gohlem関連オブジェクト一式を導入する。ゴーレムを動かして見たいのでbakeする。Terrainを選択し、Staticにチェックが入っていることが確認した後navigationタブからbake。
オブジェクトを導入した際にインスペクターにアタッチしたオブジェクトがいくつか外れているので再確認。
一旦確認すると動きが若干もっさりしていることと、gohlemの動ける領域が気になったので、gohlemの稼働範囲のスクリプトを見直す。
gohlemの移動は、MoveEnemyスクリプトとSetPositionスクリプトからなっているが初期スポーン位置を中心にrandDestination = Random.insideUnitCircle * 4;で四マス範囲の座標にランダムで目的地設定し、移動するようになっている。
目的地に到着した場合にも歩き続けているように思われたが、観察しているときちんと止まる場合もある。MoveEnemyスクリプトのwaittimeを長くすると止まる挙動を観測しやすくなった。ただ、まだ突然の方向転換のような 挙動を見せるのでDebug.Logを入れて確認。
if (navMeshAgent.remainingDistance < 1f)にDebug.Log("Walktime”);、if (elapsedTime > waitTime)にDebug.Log("Waittime”);を入れて両者の数値が一致しているか確認すると一致していたので場所設定の回数と待機の回数は間違っていない。
なので、要因はアクションの継続時間かTime.deltaTimeの計測時間に問題があることがわかる。Time.fixedDeltaTimeに変更して様子を見る。elapsedTime += Time.fixedDeltaTime;。
これでかなり改善された。目的地に到着したら必ずパンチモーションを繰り出すようになっているのでchaseからwaitに移行した場合にパンチモーションが行われるように変更する。punchflagの位置をchaseの中に移動。これでchaseの場合のみパンチモーションを繰り出すようになった。
ついでに回転の際のスピードを45から100にあげることで素早く目的地方向に顔を向けるようにした。
障害物に当たった場合の処理を加えるか考えたが、キャラクターをenv2シーンに導入してchaseした際、違和感があれば処理を行うことにする。