原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

DoTweenのDOPathを使ったキャラクター移動

最近の愚痴というか・・・

 ここ最近の働き手不足は深刻なようで、行く先々のコンビニで店員がネパール人だったり中国人だったりと、いったいここはどこの国の店だろう?と思うような事態になってきて、そういう海外の方が店員だったりすると、肉まんとかチキンとかちょっとした口頭での注文が頼みづらいなー、とか思ったり。

 

私の滑舌が悪い所為もあるのでしょうが、何度も「ナンデスカ?」と聞かれるとちょっと心が折れる。
この前とか、チーズバーガーをレジに持っていったらネパール人らしき店員が温めずにそのまま袋に入れようとしたので「温めてください」とお願いしたら「What?」とか言われたし。ああ、ごめんなさい、ごめんなさい、英語できない私が悪いんです。そのまま食べます。

 

別にコンビニ店員の国籍が豊かになるのには反対しませんが、日本人の店員という選択肢がないという状態は不便に感じますね。

 

で、今回の話

 

unityでキャラクターを動作させる方法は色々あると思いますが、キャラクターの移動経路があらかじめ決まっている場合はDoTweenの経路移動機能(DoPath/DOLocalPath)を使うと便利です。

 

DOPath/DOLocalPathとはその名前の通り、オブジェクトを指定された位置へ順番に移動させるというもので、位置を表すVector3の配列を渡して使用します。

DOPathと DOLocalPathの違いは座標の指定を絶対座標にするか、ローカル座標にするかの違いですが、性能的にはローカル座標を使用したほうが良いみたいです。

 

下の例だと、targetのオブジェクトをローカル座標(1, 2, 2)→(8, 0, 4)→(5, 4, 10)の順に2.0秒掛けて移動させます。最後の引数のPathType.CatmullRomは移動タイプ=曲線を指定しており、各ポイント滑らかな曲線を描いて移動します。

 

Vector3 paths = new {
new Vector3(1, 2, 2),
new Vector3(8, 0, 4),
new Vector3(5, 4, 10)
}

Tweener tween = target.DOLocalPath(paths, 2.0f, PathType.CatmullRom);

 

このDOPathの何が便利なのかというと、用意されているオプションが使いやすい。

例えば、

 

Tweener tween = target.DOLocalPath(paths, 2.0f, PathType.CatmullRom).SetOptions(true);

 

と指定するとpathsで指定した最後の位置まで移動したら、最初の位置まで自動的に戻ってくれます。

 

CutieCircuitでの使用例

CutieCircuitでは色々な箇所でDOLocalPathを使用していますが、代表的なのはメニュー画面でプレイヤーのキャラクターが机の周りをグルグル歩き回る動作。

 

f:id:Karvan:20180606000348g:plain

 

これはまずキャラクタを移動させるポイントを決めます。

f:id:Karvan:20180605233517p:plain

 

次にこのポイントの位置をVector3の配列に編集し、DOLocalPathに渡します。

    /// <summary>
    /// 通常経路移動開始
    /// </summary>
    public void Start_NormalPathMove()
    {
        Vector3[] MovePath = new Vector3[NormalPath.Length];

        for (int iCnt = 0; iCnt < NormalPath.Length; iCnt++)
        {
            MovePath[iCnt] = argPointArray[iCnt].transform.localPosition;
        }

        nowPathTween = AvatorObject.transform.DOLocalPath(MovePath, 8.0f, PathType.CatmullRom)
                                                        .SetOptions(true)
                                                        .SetEase(Ease.Linear)
                                                        .SetLookAt(0.05f, Vector3.forward)
                                                        .SetLoops(-1);

    }

 

ここで上記のようにSetOptionsにtrueを設定すると元の位置まで戻ってくれるので、後は繰り返し回数を指定するSetLoopに-1=無限回を渡すとキャラクターが机の周りを廻り続けてくれます。

 

ただし、このままではキャラクターは進行方向を向いてくれないのでLookAtオプションを使用しています。


LookAtオプションでは特定の値や特定をオブジェクトを指定することで、Pathを使って移動している間、オブジェクトの向き(Z方向=前方)を移動方向へ向せることができます。

 

.SetLookAt (0.05f, Vector3.forward)

 

ここで第一引数の0.05fという数字ですが、これは指定した方向を0.05秒だけ先読みした形で向かせることを指定しています。

これによってスムーズな方向転換が可能になり、より違和感のない走行に見せることができます。

 

ここら辺の話は以下のリンクに詳しく書かれています。

www.shibuya24.info

 

毎度の進捗報告

あっという間に気がづけば6月です。リリースするよ、もうすぐ完成するよー、とか言いながらWindowsUpdate並みに終らなかったCutieCirtuitのアップデートですが、ここに来てようやく完了しました(と思う)。これからiOS版のビルド作業に入って、アップルストアの審査→リリース、という手順になります。Android版は出来上がっているので近々リリースします(希望)。

 

まぁ、アップデート作業が終れば一息つけるので、前々から欲しかったSwitchを購入してゼルダの伝説でも楽しもうかな、と思っていたのですが、なにせiOS版リリースのためにMacBookを購入したり、使い切れないアセットを購入したりで散財したのにCutieCirtuitの売り上げは0円という、自虐ネタにもならない赤字を計上しているのでしばらくは手が出せそうにありません。ギャフン。

 

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。