//tips
//微調整
ゴーレムの挙動制御を行うMoveEnemyスクリプトのstate管理の見直し継続。
animator.SetBool("PunchAttackB", false);と目標到達条件設定(Vector3.Distance(transform.position, setPosition.GetDestination()) < 1.5f && onchase == false)を昨日追加変更した。
これでもプレイヤーに向かって歩き続ける現象は止まらない。ログで確認すると高速でchaseとwaitの中身が呼ばれ続けているよう。
if (elapsedTime > waitTime)に問題があるように感じるのでデバッグでelapsedTimeの推移を確認してみる。
elapsedTimeはしっかり計算されていた。
elapsedTime計算中にもかかわらず、EnemyState.Waitからif (state == EnemyState.Walk || state == EnemyState.Chase)の中身Debug.Log("animator.SetBool”);が呼ばれるのは問題で、elapsedTimeではwait状態から変化させない時間を設けているので、ここがうまく機能していないことになる。
どこかに他の遷移ポイントがあるか、stateが複数の値を持つようになってしまっているのか。
SearchCharacterスクリプトで探索範囲のプレイヤーを多重に読み込んでいるのが要因ではないか気づき、 if (state != MoveEnemy.EnemyState.Chase && state != MoveEnemy.EnemyState.Wait && moveEnemy.onchase == false)とstate == MoveEnemy.EnemyState.Waitの時には処理を実行しないように設定。
これにより無事にプレイヤーに接近した時はパンチモーションを行うようになった。
ただ、コライダーのオンオフがまだ適切ではなく、パンチが当たるときと当たらない時、また複数回当たる時があるので、そちらの対応を考える。
複数回当たってしまうのは挙動のカクツキの所為のようなので避けられないことがわかった。一度衝突したものに複数回衝突しないようにするためには、HPScript2のOnTriggerEnter(Collider other)で下記のように衝突したものを取得し、タグの判別部分に追加すれば良さそう。
if (collision.collider.tag == "Weapon" && collision.collider.gameObject != sc_agent.collidedObject)
{
・・・
sc_agent.collidedObject = collision.collider.gameObject;
}
パンチが当たる時と当たらない時というのはIEnumerator WaitAnimationfin()の処理が実行され、読み込まれる際にコライダーのオンオフをスキップしているかかと思うのできちんと毎回キャッチするような仕組みを考える。