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

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

【Unity】DoTweenで360度回転したかった。。。

需要が読めない

最近ブームの話題作だ、ということで寒風吹きすさぶ中、わざわざ映画館まで足を運んで「ボヘミアン・ラプソディ」を観て来たました。まぁ、Queenに思い入れも何もない人間なので「感動!」「泣いた!」みたいな絶賛をする気もないし、「クイーンってはさぁ、こんな美談で語るようなバンドじゃないんだよ・・・」みたいなうざい薀蓄を語る気もないのですが、映画ラスト20分のライブシーンは必見だと思います。映画を観た後、実際のライブ映像も観たくなるし。

 


ただ、昼間の回ということもあってか観客が爺さん婆さんばかりでビックリ。あれだよ、ブームってのは若い女性の間とかで流行っているからブームって言うんじゃないですか?シルバー世代とか演歌しか聴かない、とか固定観念に染まっていたので、まさか洋楽ロックが主題の映画を観に行って敬老会の中に混じるような状態なるとは夢にも思いませんでした。学生はおろか同世代の人間も見当たらなかったし。

 

メニュー画面作り

そんな感じで需要もターゲットも読めないような人間が今日もゲーム作りに励んでいるわけですが、「Dull Things No Life」の製作も本編の主要な部分はだいぶ作り終えたので、枝葉となるメニュー画面等々の作りこみ作業へ移ってきています。

 

こんな感じ(前回の記事でも紹介したけど)

f:id:Karvan:20181211195710p:plain

 

そのメニュー画面も上の画像にあるように大体は完成したのですが、左上に見える掲示板みたいな部分、ユーザにいろいろな情報を表示する部分の作りこみで問題が発生しました。

 

表示情報を切り替える

掲示板みたいな部分には、現在の状態やスコア情報等を一定間隔で切り替えて表示しています。(全てテキスト情報)
これは各情報を表示するTextMeshを四角柱型に配置して、それを90度づつ回転することでユーザ側に見える情報を変えています。

 

f:id:Karvan:20181218233821p:plain

この90度づつ回転させる、という機能にはDoTweenのDoRotateメソッドのRelativeオプションをtrueにすることで実装しています。
このRelativeオプションは非常に有用でこれを設定した場合、移動角度を相対的に計算するようになります。


つまり、現在角度からZ軸方向に90度回転させたい場合、

 

// 回転処理
 MessageBoardObj.transform.DOLocalRotate(new Vector3(90.0f, 0.0f, 0.0f), 0.3f)
                                        .SetRelative(true);

 

としてコールすると、オブジェクトの角度は順に0度⇒90度⇒180度⇒270度⇒360度へと回転してくる、はずです。ですが、実際に実行してみる・・・

 

0度⇒90度の場合

f:id:Karvan:20181218234430g:plain

うん、大丈夫

 

90度⇒180度の場合

f:id:Karvan:20181218234501g:plain

OK、OK

 

180度⇒270度の場合

f:id:Karvan:20181218234535g:plain

コレまでとは逆方向に回転、なんでやねん。

 

調べてみるとDORotateは動作として回転方向は指定した角度の近い方へ回転する仕様らしい、例えば270度に回転する場合は、0度から回転して0->1...269->270となるのではなく、360度から回転して360->359...271->270で回転するみたい。

 

つまり、0度⇒360度を90度づつ回転させる場合、全て同じ指定で回転させるのではなく、180度⇒270度の場合は逆方向に回転させないと上手くいかないようです。
なので、コードとしては

 

/// <summary>
/// メッセージ表示処理(順次回転表示)
/// </summary>
private void RotDisp_MessageBoard()
{
    // Indexの設定
    nextIndex++;
    if (nextIndex >= 4) nextIndex = 0;

    if (nextIndex != 3)
    {
        // 回転処理
        MessageBoardObj.transform.DOLocalRotate(new Vector3(90.0f, 0.0f, 0.0f), 0.3f)
                                    .SetRelative(true);
    }
    else
    {
        // 回転処理
        MessageBoardObj.transform.DOLocalRotate(new Vector3(-90.0f, 0.0f, 0.0f), 0.3f)
                                    .SetRelative(true);
    }

}

 

 

と、超ダサいコードに。うーん。。。


ちなみに結果としては

f:id:Karvan:20181218235128g:plain

こんな感じで、上手く一回転してくれるようになりましたが、なんだかなぁ・・・・
 




 

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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