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

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

【Unity】DOTweenで狙った方向に回す為のアレコレ

迫りくる年末

コロナ騒動が一応収束したことにより復活した忘年会やら納会といった会社行事の恐怖に怯えている皆さんこんにちは。毎度断る理由に四苦八苦していますが、大掃除だけは断る理由が見つからないので参加することになりそうです。

 

ビジュアルと演出に特化したゲーム

いかにも海外のインディーゲームといった感じで、「娯楽性」「ゲーム性」が薄目で「ビジュアル」と「演出」にパラメータを全振りしたようなADVゲーム『South of the Circle』をプレイしました。

東西冷戦下イギリスで大学講師を務める主人公が、南極の利権を巡る国家間の紛争とイギリス国内で巻き起こるジェンダー闘争に巻き込まれるストーリーで、南極で行動している主人公の「現在」の「探検」と、主人公が南極に行くまでの「過去」の「回想」を交互にプレイする形でゲームは進行します。

「現在編」ではイギリスの南極基地へ向かう途中で飛行機が不時着。助けを求める為に近くにある他国の南極基地へ向かうが、どこに行っても無人状態で誰もいない。なぜ誰もいないのか?南極で遭難した主人公達に助けは来るのか?が主題となり、「過去編」では主人公が同じ大学に勤務している女性講師との恋愛模様となぜ彼が南極へ向かうことになったのか、が描かれていきます。

「南極の利権を巡る国家間の紛争」と書くとスペクタクルな冒険譚を期待してしまうかもしれませんが、あくまでも一人の大学講師の視点で物語が進行するため、そこまで大掛かりなストーリーはありません。エンディングもあっさりしたものだし。
「ゲーム性」としては会話シーンの途中で表示される、「配慮」「熱烈」「素直」等々の主人公の感情を表現するマークを選択するだけ。
選択肢によって多少変化はあるものの、ストーリーの流れが変わることはないので人によっては「ムービーゲー」と捉えるかもしれません。
それでもこのゲームを紹介するのは「ビジュアル」と「演出」が素晴らしいから

特に場面転換の演出は突出して目を見張るものがあり、「南極の吹雪の中を歩く→街の駅前を歩く」「南極基地で機械が電気を発して慌てて手を離したシーンが、そのまま熱いやかんに触れてしまって思わず手を離したシーンへと移行」等々、この凝り方には驚嘆、感動で勉強になりました。

この演出を見るだけもゲーム開発者なら購入する価値はあります。ゲーム自体は4時間弱ぐらいで終わりますが、新鮮で勉強になる素晴らしい作品なので一度チェックしても損はないと思います。

DORotateメソッド

UnityでGameObjectをくるくる回転させたいときには、Updateで角度をセットするか、DOTweenを使って回すかの二択となっている方は多いと思います。

私も多分に漏れずどちらかを採用するのですが、角度指定が簡単だったり、DelayやEasingの指定もできたりと汎用性の高さでDOTweenを選択する方が多いです。だがしかし、DOTweenでDORotateメソッドを使って「右回り」or「左回り」の狙った方向に回転させようとすると、毎度苦戦するので今回はそのお話。

DORotateメソッドではデフォルトの場合、指定された角度に対して最短で移動できる方向に廻る指定となっている為、例えばオブジェクトを一回転させるようと指定角度にVector3(0,360,0)なんて指定すると、0°→360°の最短は「回転しない事」となるので、動作させるとピクリとも回転しません。
その為、そういった場合にはDORotateメソッドの第三引数にRotateMode.FastBeyond360の指定をする事になります。

このRotateMode.FastBeyond360を使うと、例えば20°から360°へ回そうとした場合には「20°→180°→360°」の方向へ廻り、デフォルトのRotateMode.Fastへ指定を戻せば「20°→0°」の方向へ廻るので、一見するとこれで「右回り」or「左回り」の回転が出来そうに思えます。

RotateMode.Fastで20°から360°へ回転した場合

 

RotateMode.FastBeyond360で20°から360°へ回転した場合

 

しかしRotateMode.FastBeyond36はあくまで一回転以上させる為に「360°を超えて最短」を示すパラメターなので、回す方向を指定しているわけでは有りません

この為、例えば340°から360°へ回そうとした場合には、RotateMode.Fastを指定しようがRotateMode.FastBeyond360を指定しようが回る方向は同じになります。

RotateMode.Fastで340°から360°へ回転した場合

 

RotateMode.FastBeyond360で340°から360°へ回転した場合

 

このようなケースで逆方向に回転させたい場合には、指定角度にVector3(0,360,0)ではなくVector3(0,0,0)を指定する事で対処します。

RotateMode.FastBeyond360で340°から0°へ回転した場合

任意の角度から180°への回転

指定角度が360°もしくは0°の場合では上記の方法で「右回り」or「左回り」が指定できそうですが、半回転(180°)のケースではどうでしょう?
こちらの場合、初期角度が200°で180°へ回転させたいケースでは、RotateMode.Fastを指定しようがRotateMode.FastBeyond360を指定しようが回る方向は同じ結果となります。

 

では指定角度を-180°とした場合はどうでしょう?

RotateMode.FastBeyond360を指定しても逆方向へは回らず、一回転+20°の回転となる結果に・・・

うーん、どうしたものか・・・

 

WorldAxisAdd

色々試してみましたが、結論としては角度指定は諦め、RotateMode.WorldAxisAddにて回転角度を指定する方法で「右回り」or「左回り」の指定を行う事にしました。

このRotateMode.WorldAxisAdd「ワールド軸に対して」何度回転させるか、を指定するためのパラメータで、例えばY軸基準で200°から180°へ回転させたいケースではVector3(0,340,0)と指定すると

このような回転となり、逆にVector3(0,-20,0)と指定すると

先程とは逆方向に回転させることが出来ます。

角度が指定できないのは難点ですが回転方向を指定したい場合にはこの方法が確実だと思います。

 

最後に宣伝

というわけで数学的迷宮脱出ゲーム「W.T.」、アーリーアクセス版リリース中です。
ストーリー全5章中4章までを遊ぶことができます
完成版は来年春リリース予定ですが、アーリーアクセス版の感想を完成版にフィードバックして行きたいので、何卒ご協力の程、よろしくお願いいたします。

store.steampowered.com

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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