Unity勉強中!あこがれだったプログラマーに今からなろう!

昔あこがれだったプログラマー。今からでもUnityを勉強してみようと思い立ち、チャレンジ開始! Unity勉強メモや、悪戦苦闘な日々の記録です。

3Dアクションゲームを作ろう(11):ドラゴンの作成継続中:プレイヤーを引き離す技を作成

正月に実装したドラゴンの作成継続中。
プレイヤーがドラゴンに近づきすぎて、ドラゴンの攻撃が当たらなくなるのでは面白くないので、プレイヤーを強制的に引き離す技を作成する事にした。

うまいことに、ドラゴンのアニメセットの中に、雄叫びをあげて地面を踏みしだく動作があったので、これに衝撃波を出すエフェクトが加わればイメージに近い感じになるのではないかな。

衝撃波のエフェクトはParticleSystemを使って作ってみた。

youtu.be

設定はこんな感じ。


特別なことは何もしていないけれど、これくらいのエフェクトなら自分で作れる様になっているのは地味に嬉しいもんだ😃

衝撃波については、最初、AddForceAtPositionを使って試してみたけれど、これだと何故かうまくいかなかった。
言葉から、中心点から球状に力が掛かるようにイメージしていたけれど、ドラゴンの右にいても左にいても、何故か同じ方向に吹っ飛ばされてしまう。
調べてみると、言葉通りの意味ではないらしい。

仕方がないので、ドラゴンとプレイヤーの位置関係から、ドラゴンと反対方向にAddForceしてやることにした。

    public void ScreamAttacking()
    {
        ScreamPS.Play(); //ここで衝撃波のParticleSystemを再生
        var heading=Target.transform.position-transform.position; //衝撃波の発生地点のベクトルを算出
        var direction = heading.normalized; 
        audioSource.PlayOneShot(DragonImpulseSE); 
        Target.GetComponent<Rigidbody>().AddForce(direction*8.7f, ForceMode.Impulse);
    }

youtu.be

ただ、今のままではドラゴンから距離が離れていても、やっぱり同じように吹っ飛ばされてしまうので、これは修正する必要がある。

まだ実験していないけれど、多分、

var heading=Target.transform.position-transform.position;

これで算出したベクトルからVector3.magnitudeで距離を出し、
この距離でdirection*8.7fを割ってやればいいんじゃないかな🧐

で、その前に距離がある一定以上あるならAddForceしない様にすればいいと思う。

この辺りは明日実験してみよう😁