GIF画像なのですが、再生できるかどうか不安です… ショットの動きを増やしてみました まだまだ微調整は必要ですけどね |
GIF画像の内容は 発射した弾が外回りするような感じで飛んで行く感じよ 弾幕シューティングのホーミングショットに近いわね |
と言っても動きだけで 処理はほぼ直線に飛ばすショットと変えてないんだよな ちょこっと変更するだけでこんな感じになるから面白いな |
ということで、この曲線ショットのプログラムを メモ程度にブログに残しておきます くわしくは「続きを読む」からどうぞ! |
ということで、こいつの作り方ですが ベジェ曲線って言う仕組みを使ってます Photoshopを触っている人にはおなじみなのかもしれませんね |
ベジェ曲線とは Nこの制御点から得られるN-1次曲線である ってことよ |
と言葉で説明されてもわからんってやつだな 始点と終点の曲線に対して力を加えて曲線を表現する って言ったほうが分かりやすいかな |
乱暴な言い方になりますが 直線を引っ張ると曲線が出来るという性質を使った曲線の表現方法ですね 真円というより、曲線を作るのに向いてます |
なんで曲げた起動にするかというと 単純にかっこいいからデス 横から的に迫る弾道のほうが迫力ありますからね |
Unityな日々(Unity Geek)さん【ベジェ曲線にそってオブジェクトを動かす】
プログラムは 上のサイトさんを参考にしたわ このプログラムだけでも十分動くのでほぼ解説する必要は無いかもね |
//=================================================================== ////// 初期化 /// /// 第1制御点 /// 第2制御点 /// 第3制御点 /// 第4制御点 /// 弾速 /// プレイヤーの攻撃かどうか /// みょん力(ショット攻撃力) public void Init(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, float velcity, bool shotTypePlayer, int MAT) { //初期位置を設定 mVelcity = velcity; mShotTypePlayer = shotTypePlayer; this.transform.position = v0; this.p0 = v0; this.p1 = v1; this.p2 = v2; this.p3 = v3; //距離を求める(こちらは各制御店の直線距離 Distance = Vector3.Distance(v0, v1); Distance += Vector3.Distance(v1, v2); Distance += Vector3.Distance(v2, v3); }
変更点一つ目だ GameObjectで使えるようにinit関数で制御出来るようにしたぞ あとはゲームに合わせて必要なデータを取得出来るようにした感じだ |
//=================================================================== ////// 更新 /// void Update() { //発射元との距離を計算して反射範囲何の場合は処理をつつける if (MovingDistance < 1.0f) { //ありえない速度は除外する if (mVelcity <= 0) { return; } if (mVelcity > Distance) { return; } //進んだ距離を0~1の間で表現する float time = MovingDistance + (mVelcity / Distance); if (time > 1.0f) { time = 1.0f; } MovingDistance = time; GetPointAtTime(MovingDistance); } else { //範囲外になったので削除 Destroy(this.gameObject); } }
あと、時間経過(0~1の比率計算)だったものを 速度計算で出来るように調整しました 小学校で習った「きはじ」を使ってます |
この程度ですが今のところ動いているようです ショットが外に行き過ぎてほとんど見えないので その調整を行おうと思っています |