ベジェ曲線ショット

クロ 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の比率計算)だったものを
速度計算で出来るように調整しました
小学校で習った「きはじ」を使ってます
妖夢
クロ この程度ですが今のところ動いているようです
ショットが外に行き過ぎてほとんど見えないので
その調整を行おうと思っています

ゲーム製作の関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください