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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.