更新内容に関して今回はばらまきビームに関してみていきたいと思います
コンテンツ
ばら撒きビームの実物
こちらが実装したものとなります
かなり大味な技ですね
次はこれの仕様について見ていきたいと思います
挙動の仕様
実際挙動としては
- 対象に向けてビームを放つ
- ビームは高速連射
- ただし発射方向は対象から一定距離ずれる
- 一定距離はランダム
- プレイヤーが動くと対象にめがけてビームを放つようになる
という感じです
要は動くと当たる系の攻撃ですね
実装方法
実装としてはこちらの応用となります
今回は 動く点P がなくなかった代わりに
シンプルに 点S を求めるだけになっています
ただし、今回は 点T を中心とした円となっているため、
点S は 点Tを中心として回転するものと考えます
点S を回転させるには以下の手順を踏めば実現できます。
- 発射者B と ターゲットT のベクトルBT
- ベクトルBTに垂直なベクトルU
- このベクトルUをベクトルBTを軸にθ°回転させる
あとは前回と同じように 点S を求めるために外積を用います。
外積は以下の通りです。
それと今回はもう一つクォータニオンを用います。
これらの材料をもとに実際に求めていきます。
今回の条件としては
- 前回と同じように発射者B と ターゲットT のベクトルBT
Unity上で表すとこのようなものになりますね
var dir = T.transform.postion - B.transform.postion;
- rは 最小値r1と最大値r2で範囲指定されており。関係は以下のようになる
r1 ≦ r ≦ r2
var r = (float)(new Random()(r1, r2));
最小値r1と最大値r2 はインスペクターで設定できるようにしておきます
- ベクトルUは x°回転する
xは 0 ≦ r ≦ 180 である
- ベクトルBTに垂直でx°回転するベクトルU
// 対象に向ける
T.transform.LookAt(target.transform, Vector3.up);
var rot = (float)(new Random()(0, 180));
T.transform.rotation = Quaternion.AngleAxis(rot, T.transform.forward);
var u = T.transform.up;
これで必要な材料は全て揃いました
これをもとに前回と同じように計算してみましょう
var s = Vector3.Cross(T.transform.forward, T.transform.up).normalized * r
これで 点S が求められました。
あとはこの方向にビームを発射すればばら撒きビームの挙動が実装されます。
ここにアクセントとして、プレイヤーが動いた場合、rを縮める処理を入れれば、動いたときに
プレイヤーをそれとなく狙うようになります
まとめ
今回はばら撒きビームの挙動について紹介しました
なかなか、ボスによっては決死の判断を求められる良い挙動となりました
前回と同じようにUnityの標準機能で物理演算や数学の公式が用意されていますが
3Dの自作ゲームを作る場合には知識が必須なのでしっかり知識は蓄えていきましょう
あとは公開中ですのでぜひプレイしてみてください
外積とは2つのベクトルの双方に直角に交わるベクトルを求めることができる
数学の公式で
UnityのVecto3の関数に標準搭載されています
今回は詳しい式は省きます