code VR

Unity×VR(180)

スポンサーリンク

//tips

//微調整

State遷移の再確認にうつる。

問題点は二つ
①プレイヤーが付近に来た際にwaitからchaseへ移行するタイミングが遅れている
②最初の数秒コライダーの判定がパンチモーションに付随して行われていない

①については先に導入したwaittimeの縛りがキツすぎた可能性があるので、serchcharacterスクリプトにvoid OnTriggerEnter(Collider col)の場合も導入し、初回の接触は優先的に遷移させるようにする。

下記をコードを追加した。

void OnTriggerEnter(Collider col)
{
Debug.Log(col.name);

// プレイヤーキャラクターを発見
if (col.tag == "Player")
{

MoveEnemy.EnemyState state = moveEnemy.GetState();

if (state != MoveEnemy.EnemyState.Chase && moveEnemy.onchase == false)
{
if (navMeshAgent.pathStatus != NavMeshPathStatus.PathInvalid)
{
moveEnemy.SetState(MoveEnemy.EnemyState.Chase, col.transform);
}
}

}
}

②については、コライダーの発生条件animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0”)の部分であるのか、受け手の if (other.gameObject.tag == "Weapon" && DuringAttack == false && other.gameObject != agentObject)の部分に問題があるように思われる。

if (animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0"))
{
rightfootcollider.enabled = true;
Debug.Log("rightfootcollider.enabled = true");
}

パンチモーションがあまりに早く終わりすぐているのではないかなどの問題が考えられるので随所にDebug.Log(animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0”));を挿入し、観測する。

パンチモーションがかなりの回数行われているにもかかわらず、if (animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0”))は一回しか呼ばれていない。

プレイヤーがかなり近づかないと反応しなかったので新たに追加したOnTriggerEnterの実行を確認するためDebug.Log("OnTriggerEnter”);を追加。

実験するとDebug.Log("OnTriggerEnter”)はしっかり呼ばれた。

また、パンチモーション中にもかかわらずrightfootcollider.enabled がfalseになっていることも確認できた。

パンチモーション中のアニメーションを注視する。

Enterの場合はanimator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0”)が必ずfalseになり、Stayの場合になんとかtrueへ変わる時があることがわかった。

これはおそらく遷移中に処理が完了しているかいないかだと考えられるため下記を追加。

if (animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0")|| animator.IsInTransition(0))

これでanimator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0”)のアニメーションへの遷移中の矢印の間もパンチモーションの処理時間として認識してもらえるはず。

ログを見ていたらサーチエリアとの接触反応をプレイヤーが感知しており、other.gameObjectSearcharea (UnityEngine.GameObject)、これが初回攻撃を認識させなくしているのかと思い、すぐにreturnでメソッドから外す処理を加えた。

private void OnTriggerEnter(Collider other)
{
if (photonView.IsMine)
{
if (other.gameObject.tag == "Searcharea")
{
return;
}

Debug.Log(animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0") || animator.IsInTransition(0));がいまだにfalseで認識されているため、パンチモーション中であるがコライダーがオンになっていない。

逆にDebug.Log(animator.GetCurrentAnimatorStateInfo(0));でstate状況を確認してみる。

UnityEngine.AnimatorStateInfo
UnityEngine.Debug:Log(Object)
<WaitAnimationfin>d__21:MoveNext() (at Assets/MoveEnemy/MoveEnemy.cs:290)

これをみるとやはり遷移途中にいるようなので下記のように離脱時の条件を厳しくし、ifを外し、処理の流れでコライダーもオンにするようにした。

while (!animator.GetCurrentAnimatorStateInfo(0).IsName("Punch Attack 0") || !animator.IsInTransition(0))

こちらで確認していく。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, VR
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.