最近の愚痴というか・・・
ここ最近の働き手不足は深刻なようで、行く先々のコンビニで店員がネパール人だったり中国人だったりと、いったいここはどこの国の店だろう?と思うような事態になってきて、そういう海外の方が店員だったりすると、肉まんとかチキンとかちょっとした口頭での注文が頼みづらいなー、とか思ったり。
私の滑舌が悪い所為もあるのでしょうが、何度も「ナンデスカ?」と聞かれるとちょっと心が折れる。
この前とか、チーズバーガーをレジに持っていったらネパール人らしき店員が温めずにそのまま袋に入れようとしたので「温めてください」とお願いしたら「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を使用していますが、代表的なのはメニュー画面でプレイヤーのキャラクターが机の周りをグルグル歩き回る動作。
これはまずキャラクタを移動させるポイントを決めます。
次にこのポイントの位置を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秒だけ先読みした形で向かせることを指定しています。
これによってスムーズな方向転換が可能になり、より違和感のない走行に見せることができます。
ここら辺の話は以下のリンクに詳しく書かれています。
毎度の進捗報告
あっという間に気がづけば6月です。リリースするよ、もうすぐ完成するよー、とか言いながらWindowsUpdate並みに終らなかったCutieCirtuitのアップデートですが、ここに来てようやく完了しました(と思う)。これからiOS版のビルド作業に入って、アップルストアの審査→リリース、という手順になります。Android版は出来上がっているので近々リリースします(希望)。
まぁ、アップデート作業が終れば一息つけるので、前々から欲しかったSwitchを購入してゼルダの伝説でも楽しもうかな、と思っていたのですが、なにせiOS版リリースのためにMacBookを購入したり、使い切れないアセットを購入したりで散財したのにCutieCirtuitの売り上げは0円という、自虐ネタにもならない赤字を計上しているのでしばらくは手が出せそうにありません。ギャフン。