ゾンビが向かってくるように変更(AIMING)
ただしHPが70%切ると今度は逃げ出す(AVOID)
今まで回転はいきなりRotateしてたんですが、
ゾンビが逃げる処理を入れると囲まれた時に、
逃げる対象が頻繁に切り替わってスピン回転するようになったので、
スムーズに回転する処理を入れてみました。
private void SmoothEscapeAt(GameObject target) { Vector3 newRotation = Quaternion.LookRotation( transform.position - target.transform.position ).eulerAngles; newRotation.x = 0; newRotation.z = 0; transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(newRotation) ,3f*Time.deltaTime); }
QuaternionでY軸回転限定で、相手から間逆で離れる方向に、Slerpで徐々に変化
逃げるだけの場合じゃなくて、向かう場合のLookAtもSmoothに変更したら、
今度は相手がいない方向に蹴り始めました。
距離は射程内なんですが、
今までは即回転だから一回で相手のほうを向いていたので、距離だけチェックでよかったんですね。
仕方がないので、ちゃんと自分の向いている方向から相手のいる方向への角度を調べました
Vector3 forward = transform.TransformDirection(Vector3.forward); Vector3 targetDirection = targetObj.transform.position - transform.position; float angle = Vector3.Angle(forward, targetDirection);
これでangle<80ぐらいなら、視野角におさまるので蹴ってOK
逆に90超えたら、相手は見えないので蹴らない。
みたいな感じ。
Angleの定義は、
Unity - スクリプティング API: Vector3.Angle
角度は常に2つのベクトル間の 鋭角 を返します。(すなわち、必ず角度は180度未満)
マイナスは無いので、Angle<80で左右の視界内が表せるはず。
だいぶ見てて面白い戦いになってきました。
今度はゾンビも襲ってくるようにしてみましょう。