いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

100日で50弾! Day 14/ Bullet7:パスショット

 100日チャレンジ『100日で50弾!』第7回、パスショットです。パスとはpath、つまり「道、通り道、進路」。弾を撃つとき、空間内で通過点を何点か決めてそこを通るようにします。「パスショット」としました。

 前、自分で近い機能を実現してゲームを書くときに使っていました。ブログでも紹介しています。

www.omoshiro-suugaku.com

同じことをやってもいいんですが、もっとラクにDOTweenを使います。前に試したこともありました。

www.omoshiro-suugaku.com

このときブログにはコードは載せていませんでしたが、今回は載せておきます……というか、単にDOTweenの機能を使うだけです。次の通り。
//------------------------------------
/*   パスの例
    Vector3 path = new Vector3
    {
        new Vector3(0, 10, 100),  // スタート位置
        new Vector3(-40, 3, 50),  // 通過点(中間点)
        new Vector3(0, 10, -20)   // 終点
    };
*/
public void moveRoot(GameObject go,
                    ref Vector3[] path, float sec) {
    go.transform.DOPath(path,
                sec, PathType.CatmullRom)
                .SetEase(Ease.Linear);
}
//------------------------------------
これだけで指定した点を通ります!! ラクだ……。path(通り道)は「ここをスタートして、こことここを通る」と、Vector3の配列で渡します。上には簡単な例を書いておきましたが、通過点を乱数を使って指定するなどで弾の軌道に変化を持たせることができます。その結果が次のgifです。

 すでに存在するよいソフトウェア(ここではDOTween)は利用する! 車輪の再発明はしないことです。……とは言え、全面的にそうしてしまうことには抵抗を感じます。何から何までは無理だけれど10%でも5%でも、いったんは自分の力で試すのがよいと思います。「目的を誤ってはいけない」も一定の真理を含んでいるとは思いますが、それは数学で言えば自分では証明を理解できていない定理を使っているようなものでしょう。数学では、多分そういう勉強の仕方をしていると先ですぐ行き詰まります。

 それではDay14はここまで! だんだん調子が出てきた!!