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

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

【Unity】今更気づくScene VisibilityとScene Picking

寝不足

長雨だろうがコロナ禍だろうが関係なく家に閉じこもる4連休を過ごした皆さんこんにちは。
普段なら連休明けは「海」やら「キャンプ」やら「花火」やらのリア充ワードが彼方此方から聞こえてきて絶望感に苛まれるのですが、今年は至って快適に過ごすことができています。まぁ、蒙古退治に忙しくて寝不足なんですけどね。

 

え、これって私だけ?

f:id:Karvan:20200728221127p:plain

 

さて、皆さんはUnity 2019あたりからHierarchyタブの左端にグレーの帯が表示されているのにお気づきでしょうか?

f:id:Karvan:20200728221048p:plain

 

私は全く気づきませんでした。。。
実はこの部分にシーン編集時に便利な機能が追加されているみたいです。
Scene visibilityとScene Pickingという機能ですが、調べてみると結構使えそうだったので今回はその紹介。

 

Scene Visibility

例えば、屋内系のシーンを作ろうとすると床と屋根、壁に囲まれた空間になるので、屋内に配置したオブジェクトの位置を動かそうとすると屋根や壁が邪魔になります。

これまでは視界の邪魔となるオブジェクトをInspetorからチェックを外して非アクティブ化していたのですが、そうするとゲーム実行時に元に戻しておかないとゲーム中も表示されないままとなってしまいます。

まぁ非表示化する対象が2,3点なら問題ないのでしょうが、もっと複数になると戻し忘れ(アクティブ化忘れ)の懸念が出てきます。

 

そんな時に使えるのがScene visibility機能です。

グレーの帯の左側をクリックするとアイコンが表示され、シーンビューでゲームオブジェクトをすばやく非表示および表示できます。

f:id:Karvan:20200728222527p:plain

 

これはシーンビューだけの表示/非表示設定なので戻し忘れをしてもゲーム中の表示には影響しません。

f:id:Karvan:20200728221456g:plain

 

Scene visibility機能で表示されるアイコンは複数あるのですがそれぞれ、下記のような意味を持っています。

A f:id:Karvan:20200728221754p:plain GameObjectは表示されていますが、一部の子オブジェクトが非表示設定になっている。
B f:id:Karvan:20200728221832p:plain GameObjectは非表示ですが、一部の子オブジェクトは表示されています。
C f:id:Karvan:20200728221912p:plain GameObjectとその子オブジェクトが表示されます。(通常状態)
D f:id:Karvan:20200728221942p:plain GameObjectとその子オブジェクトは全て非表示です。

 

Scene Picking

こちらも複数のオブジェクトが固まっているようなシーンで使う機能で、誤操作を防止するための機能です。

 

グレーの帯の右側をクリックするとアイコンが表示され、エディターでの作業時に選択可能なアイテムかどうかを設定できます。

f:id:Karvan:20200728222603p:plain


選択不可とするとクリックしたときに選択オブジェクトとして追加されないようになります。

たとえば、大量のオブジェクトがあるようなシーンで作業している場合、特定のゲームオブジェクトが選択されないように一時的にブロックして、誤って編集しないようにすることができます。

 

こちらもアイコンは複数あり

A f:id:Karvan:20200728222013p:plain GameObjectを選択することはできますが、その子の一部を選択することはできません。
B f:id:Karvan:20200728222043p:plain GameObjectを選択することはできませんが、その子の一部を選択することはできます。
C f:id:Karvan:20200728222109p:plain GameObjectとその子を選択できます。(通常状態)
D f:id:Karvan:20200728222142p:plain GameObjectもその子も選択できません。

となっています。

 

なるほど、なるほど

ちょど屋内が舞台の脱出ゲームを作っているので、どちらの機能も便利に使えます。

複数のステージ制となる予定ですが、最初のステージが完成したら体験版としてUnityRoomに公開したいと思います。

f:id:Karvan:20200728222755g:plain

まぁ、蒙古退治に忙しくて、いつ頃になるかは分からないのですが・・・

 

 

【Unity】(小ネタ)TextMeshのMaterial Presetを増やす

夏が来る

以前から「夏に向けてゲームを作る」と言っておきながらちっとも完成せずに、そのくせ週末は中世対馬の亡霊となって島を占領した蒙古兵をバッタバッタと闇討ちのチキンプレイで倒し回っていた皆さんこんにちは。
Ghost of Tushimaが時間泥棒過ぎて睡眠不足です。

 

TextMesh

UnityでTextMeshが標準搭載されてからはUIのテキストにはもっぱらTextMeshを使用しています。
色々な装飾ができて何かと有用なTextMeshなんですが、不便な点もあって、その一つが「一部の装飾の設定がMaterialに準ずる」という点

 

例えばOutlineやGrowなどはフォントのMatrialで設定しますが、このMaterialの設定を変えると当然のことながら同じフォントMaterialを使用している全てのTextMeshの表示も変わってしまいます。

 

通常ならMaterialをコピーして対応しますが、TextMeshで使用しているMaterialはフォント自体のデータも含んでいるため、これをホイホイと増やすしていくとアプリ容量が大変なことになります。

 

そんな時に使用するのがMaterial Presetとなっています。

 

Material Preset

例えば、同じフォントを使用していてもこの部分は文字にアウトラインを表示させたい、とか、光っているように見せたい、という場合はこのMaterial Presetを追加し、装飾をしたいTextMeshにだけそのMaterial Presetを使うように設定してFaceやOutLine等を変更する、という手順を踏みます。

 

このMaterial PresetはMain Settings欄にて変更することができます。

f:id:Karvan:20200721231817p:plain

しかし、このドロップダウンには現在あるMaterial Presetが表示されるのみで新たに追加することはできません。

 

新たにMaterial Presetを追加するには、フォントMaterialのInspectorで右クリックしてコンテキストメニューを表示する必要があります。(ややこしい)

f:id:Karvan:20200721231905p:plain

 

コンテキストメニューのCreate Preset Materialを選択するとフォントアセットと同じディレクトリに新しいMaterial Presetが作成されるので、分かりやすい名前をつけておきます。

f:id:Karvan:20200721232010p:plain

 

その後、先ほどのTextMeshのInspectorに戻ってMain Settings欄を確認するとMaterial Presetが変更できるようになります。

f:id:Karvan:20200721232031p:plain

 この手順、意外と忘れるんですよね~。

【Unity】DOTweenを使ってTextMeshをフェードアウトさせる

長雨

ここ最近ずっと雨の天気で、コロナウイルスもこの雨と一緒に流れ去ってほしいと願っている皆さん、こんにちは。
コロナ禍でどこにも行けないと嘆いていたら、今度は長雨でどこにも行けない。休みの日はほぼずっとBeatSaber三昧ですよ。

 

TextMeshProとDOTween

さて、TextMeshProがUnityに標準搭載されてから随分と立ちます。TextMeshProの利点といえば、拡大しても文字がボヤけることがない事や、装飾のオプションが豊富な事が挙げられますが、DOTweenにTextMeshPro用の拡張メソッドの提供されていることもその一つと言えます。(DOTweenPro版のみ)

 

  • DOScale:文字の大きさを変更する
  • DOFontSize:文字のフォントサイズを変更する
  • DOFade:文字をフェードイン/アウトさせる
  • DOFaceFade:文字のFace(塗り)箇所をフェードイン/アウトさせる
  • DOColor:文字色を変化させる
  • DOFaceColor:文字のFace(塗り)の色を変化させる
  • DOGlowColor:文字のGlow(光沢)の色を変化させる
  • DOOutlineColor:文字のアウトラインの色を変化させる
  • DOText:文字を1文字ずつ表示する
  • DOMaxVisibleCharacters:表示文字数を変化させる

ざっと上げてもこれだけ機能があります。

 

というわけで使ってみる

実際に作成中の脱出ゲームで上記のメソッドを利用したUIを作ってみました。

イベント等が起こった時に表示するメッセージをFaceのフェードアウトとOutLineの色変更を実行しています。

f:id:Karvan:20200714222349g:plain

 

ソースはこんな感じ。

public Color EndColor;

TextMeshProUGUI text = this.GetComponent<TextMeshProUGUI>();
MsgSeq = DOTween.Sequence();

MsgSeq.Join(
    text.DOFaceFade(0.0f, 3.0f)
    );
MsgSeq.Join(
    text.DOOutlineColor(EndColor, 3.0f).SetDelay(0.5f)
    );

非常に短いコードで実装できました。

これにDOMaxVisibleCharactersで表示文字数を徐々に減らしていくようにすると

MsgSeq.Append(
    text.DOMaxVisibleCharacters(0, 3.0f)
    );
MsgSeq.Join(
    text.DOFaceFade(0.0f, 3.0f)
    );
MsgSeq.Join(
    text.DOOutlineColor(EndColor, 3.0f).SetDelay(0.5f)
    );

 

 こんな感じ

f:id:Karvan:20200714222745g:plain

 

センスがあればもっとおしゃれな演出も作ることができると思います。

【Unity】【作業ログ】First Person Narrative Adventureでオリジナルのパズルを作る

PSVR

給付金でPSVRを購入し、ウキウキでSkyrimVRをPlayしてみたら開始5分でVR酔いして以後全く手を付けていない皆さんこんにちは。
走りながらジャンプしてドラゴンから逃げろとか無理ゲー、着地と同時に吐き気を催します。

 

脱出ゲーム

そんな訳でPSVRではもっぱらBeatSaberを楽しんでいるわけですが、そんなゲームの誘惑に惑わされながらも、夏に向けたゲーム制作のほうも(それなりに)進んで言います。

 

このブログでも記事にしていますが一人称視点で進む脱出ゲームになる予定です。

f:id:Karvan:20200609220240g:plain



このゲームは一から作っているわけでなく、フレームワーク的なアセットを購入してそれをベースに作成しています。
それが「First Person Narrative Adventure + Complete Puzzle Engine」(長いので以後、FAに略)
このアセットについても当ブログで数回にわたって記事にしています。

 

【Unity】アドベンチャーゲームできるかな - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その1) - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その2) - 原カバンは鞄のお店ではありません。

【Unity】アセット:First Person Narrative Adventure を使ってみよう(その3) - 原カバンは鞄のお店ではありません。

 

ざっくりというと一人称のAVGに必要な機能が殆どすべてそろったアセットなのですが、名前に「Complete Puzzle Engine」をあるように、AVGとしての機能だけでなく、ゲーム内で使用できるパズルゲームがPrefabとして提供されています。(40種類のバリエーション)

このパズルゲームはゲーム空間にDragするだけで直ちに使用できるようになっており、パズルを解き始めるときにカメラが寄ったり、パズルの解読と他のイベントとを連動させたりすることできる優れもの、これをステージ内の彼方此方に配置しておくだけでそれなりのAVGが作れちゃいます。

f:id:Karvan:20200707214224g:plain

アセットのデモシーンの一部

 

とは言え、一端のゲーム制作者としては提供されたPrefabをそのまま使うのは何となく気が引けて、少しはカスタマイズしたもの、できればオリジナルのものを使いたいと思うもの。
カメラが寄ったり、オブジェクトをピックアップしたり、他イベントと連動させたりする機能は実装が面倒くさいのでそのまま使って、パズル部分だけをオリジナルなものにしたい。

 

オリジナルのパズル

というわけで、今回はこのFAでオリジナルのパズルを作る手順の紹介。まぁ、このアセットを使っていない方には全然関係ない話だったりするのですが、私自身が後から手順を見返すために(よく忘れるので)この記事を書いています。

目標は下図のような、並んだ数字の空いている箇所に法則が合致する数字を埋める、というパズルを実装すること。

f:id:Karvan:20200707214603p:plain

 

最初にTools → AP → Object Creatorを選択してObjCreatorのウィンドウが開きます。
Selection Category欄で「01 Puzzles」を選択して作成するパズルの種類を選びます。

f:id:Karvan:20200707214656p:plain

 

選ぶことができるのは以下の7種類

  • Sliding:いわゆる15パズル、パネルをスライドさせて並べるパズル
  • Digicode:数値表などを使って導き出したパスワードを入力するパズル
  • Lever:レバーのON/OFFを切り替えて全てのランプを点灯するパズル
  • Cylinder:シリンダーを回転させるタイプのパズル、パズルというか鍵っぽい
  • Pipe:パーツを回転させて通り道を繋げていくパズル
  • Gear:ギアの組みあわせをつくるパズル
  • Logic:オブジェクトを正しいパターンに揃えるパズル

この中で「Logic」を選択してCreateボタンを押下します。

 

ロジックパズル

作成したロジックパズルとは上でも書いたように、配置されているオブジェクトから正しいパターンに合わせて揃えるパズルです。

このパズルは、まずロジックパズルには動かして並べる子オブジェクト(logicsxx)と、そのオブジェクトの配置場所を表す子オブジェクト(Axisxx)があり、logics側のオブジェクトをAxisオブジェクトの位置へ移動、その二つのオブジェクトの属性(Type)が一致した場合、正しいパターンだと認識させる仕組みです。

f:id:Karvan:20200707214931p:plain

 

この正解のパターンはLogicsPuzzleコンポーネントで設定することができます。
f:id:Karvan:20200707215027p:plain

 

色々とごちゃごちゃしていますが、色のついた四角形の部分が正解のパターンを示しています。
各四角形はロジックパズルで並べ替える各オブジェクトと関連付けられていて、図の場合だと左上から順にNo0からNo3の子オブジェクトを表しています。

 

f:id:Karvan:20200707215100p:plain

ロジックパズルの子オブジェクト(logics00~logics03,Axis00~Axis03)が各四角形と関連付けられている。

 

四角形の色は属性(Type)を示していて、四角の上方にあるtype欄から選択して設定します。

f:id:Karvan:20200707215132g:plain

 type欄でtypeを選択して、四角形をクリックすると選択したtypeが設定される。

 

オリジナルパズルに適用

ロジックパズルを作成して正解のパターンを設定したら、動かす各数字のオブジェクトを各logicオブジェクトの子オブジェクトとします。
そして、Axisオブジェクトを並べる場所に設定します。

 

f:id:Karvan:20200707215446p:plain

設置後の状態

 

今回の場合は、並べる候補は4つ(4,5,7,8)なのに正解は2つ(4,8)となっています。5と7の数字はフェイクです。
このようなときはLogicsPuzzleコンポーネントでFakeを設定することでパズル解読の成否判定から除外させることができます。

 

ここまでの設定が完了するとオリジナルパズルが出来上がります。
実際動かしてみるとこんな感じ

 

f:id:Karvan:20200707215737g:plain

パズル開始でカメラが寄って行ったり、オブジェクトを選択すると拡大されたり、配置場所にアイコンが表示されたり等の動作はFA側で実装されているのでこちら側では特に何もしていません。
設定が色々と面倒くさいですがコーディング不要なのは良いですね。あとはこの手順を忘れないように・・・
 

【Unity】CameraのパラメータをDotweenで変更する

特別給付金

ボーナス前に給付金が貰えたのでBeatSaber目的でPSVRのパックセットを購入したものの、BeatSaberのダウンロードコードが期限切れ(2020/6/18まで)で結局ストアで買う羽目になった皆さんこんにちは。
正に『安物買いの銭失い』ってやつですね。これからPSVRのパックセットの購入を検討されている方は注意が必要です。

 

CameraとDotween

一般的にDotweenはゲームオブジェクトを動かす(移動・回転される)際に用いられるかと思いますが、実はTransformコンポーネントだけでなく他のコンポーネントに対するTween(パラメータの変更)もそれなりに用意されています。


まぁ、Dotween.Toメソッドを使えば大抵のコンポーネント・パラメータをすることはできるのですが、専用のメソッドのほうが使い勝手が良いことは確かですし、特にCameraコンポーネントに対するTweenメソッドは覚えておいても損はないと思います。

 

DotweenでCameraコンポーネントに対して用意されているメソッドは以下の通り

  • DOAspect:アスペクト比を変更する
  • DOColor:背景色を変更する
  • DOFarClipPlane:FarClipPlaneのサイズを変更する
  • DOFieldOfView:カメラの視野角を変更する
  • DONearClipPlane:NearClipPlaneのサイズを変更する
  • DOOrthoSize:Orthographicサイズを変更する
  • DOPixelRect:表示画面に対する画素演算範囲を変更する
  • DORect:画面の表示範囲を変更する
  • DOShakePosition:手ぶれ効果(位置)
  • DOShakeRotation:手ぶれ効果(角度)

元々CameraにはOrthographic(正投影)モードとPerspective(透視投影)モードがあるので、それぞれのモードでのみ使用できる(効果のある)メソッドがあります

 

Orthographicモードのみ

  •  DOOrthoSize

 

Perspectiveモードのみ

  • DOFieldOfView
  • DOFarClipPlane
  • DONearClipPlane

ここで、DOFieldOfViewとDOFarClipPlane,DONearClipPlaneはどれも視錐台のサイズに関する設定なので、それぞれを同時に使うと互いのTweenが干渉することになり注意が必要です。

 

実際に使ってみよう

まぁ文章で書いてもピンとこないと思うので幾つかのメソッドを使ってみましょう。
今回、カメラモードはPerspectiveモードとしています。

 

DOFieldOfView

ズームアップ等で使用します。

f:id:Karvan:20200630195411g:plain

 

DOShakePosition

DOShakePosition メソッドでは、duration(揺れる時間)以外のパラメーターはオプション扱いで、指定しなければデフォルト値が使用されます。

f:id:Karvan:20200630195456g:plain

 

DOColor

DOColorはSkyBoxを使用していない場合に使用します。

f:id:Karvan:20200630195529g:plain

 

ここで進捗報告

夏に向けて一人称視点のAVGを制作中ですが、そればっかりでは飽きるので他のゲーム開発にも手を出しています。

f:id:Karvan:20200630195810g:plain

 

まぁ、今年の初めに一週間ゲームジャムに投稿した「Helios Orbit」の焼き直しなのですが、頓挫している2.5D-STGの資産を使って規模を大きくしたいなぁ、と思っています。

完成するかどうかは・・・

 

【Unity】LOD Groupを使うと何ができるのか

最近の願い事

長く続くコロナ禍の中で唯一良かったことが会社の無駄な会議や飲み会が開催されないという事だったのに、ここ最近の社内で「Zoom飲み会」というワードが飛び交っていて戦々恐々としている皆さんこんにちは。IT系企業勤めの場合「家にPCがないので~」といった手口が使えないので逃げ場がない、上司が急に言い出さないことを願っています。

 

Level Of Detail

LODとはLevel Of Detailの略で、スマホゲーム等でパフォーマンスを改善する手法として用いられています。
カメラから遠く離れているオブジェクトは小さくて詳細は見にくいのでポリゴンを減らして表示させよう、という合理的な手法です。

 

Untiyでは距離によって表示させるオブジェクトをグループ化することで、カメラとの距離によって表示を自動で切り替える機能を備えています。
それがLOD Groupコンポーネントです。

 

導入は簡単

例えば下の図のようなポリゴン数の異なるオブジェクトを用意して、これを距離によって表示を切り替えるとします。

f:id:Karvan:20200623234232p:plain

 

まず、これらを束ねる空のオブジェクトを作成、3つのオブジェクトをすべて子要素にし、それらが同じ位置に重なるように配置します。

f:id:Karvan:20200623234613p:plain

 

次に親のオブジェクトにLOD Groupコンポーネントをアタッチ、LOD Groupコンポーネントでカメラがどのくらい離れたときに、どのオブジェクトを表示するかを設定します。

f:id:Karvan:20200623234809p:plain

LOD0がカメラがオブジェクトに最も近い距離、LOD2が最も遠い距離となっています。LOD2のエリアより遠くにカメラが移動した場合は非表示になります。

 

各LODをクリックすると、その下にRendersの欄が表示されるので、欄内の「Add」ボタンを押すとその距離で表示させれる子オブジェクトを選択できます。
LOD0,LOD1,LOD2で表示させるオブジェクトをそれぞれ選択すればLOD Groupの設定完了です。めっちゃ簡単

 

ちなみにカメラをドラッグして動かすことで、シーンビューにリアルタイムでLOD切り替えの距離が表示されます。
また、バーを動かすことで、シーンビューにリアルタイムでLOD切り替えの距離が表示されます。

 

実際にカメラを動かしてみると、カメラからの距離によってオブジェクトが切り替わっているのがわかると思います。

f:id:Karvan:20200623234953g:plain

 

他の使い方を考える

LODの使用例として挙げらるのは上記のように同じオブジェクトのハイポリゴンとローポリゴンを切り替える例ばかりですが、実は各LODで表示させる各オブジェクトは同じ形状である必要はありません。
つまり、まったく別のオブジェクトをLOD Groupに纏めてしまっても全然かまわない。

 

だったらちょっと面白い演出しても使えるのではないか、と思ったわけです。
こんな感じで

 

f:id:Karvan:20200623235159g:plain

パフォーマンス改善以外にもビックリ箱的な演出にも使えるかもしれません。

 

【Unity】DotweenのLoopとDelayとRotate

暑い

この暑さの中、マスクを着けて歩くなんて狂気の沙汰だと思う皆さんこんにちは。6月ってこんなに暑かったかな?

去年が冷夏だった分、その反動でこの夏は猛暑になりそうで凄く嫌。

 

Dotweenによる回転

例えば歯車のようなオブジェクトを回転させたい場合、DotweenだとDORotateを使います。

f:id:Karvan:20200616212735p:plain

 

そしてこの回転を延々と続けたい場合はLoopオプションに「-1」を設定します。

GearObj.transform.DOLocalRotate(new Vector3(0.0f, 0.0f, 360.0f), 2.0f)
                            .SetRelative(true)
                            .SetLoops(-1);

まぁ、このぐらいの動作なら簡単に実装できるのですが、これを「1秒待った後に10度回転する」動作を繰り返す、という処理を実装しようとした場合ちょっと頭を悩ませます、ってか、結構悩みました。今回はそのお話。

 

Delayの設定

当初は「1秒待った後に」とあるので、Delayオプションをつければ良かろう、と単純に考えていたのです

GearObj.transform.DOLocalRotate(new Vector3(0.0f, 0.0f, 10.0f), 0.7f)
                            .SetRelative(true)
                            .SetDelay(1.0f)
                            .SetLoops(-1);

実際に動かしてみると

 

f:id:Karvan:20200616213211g:plain

ん~・・普通に回転しとる

 

DORotateのDelayオプションはあくまで「回転動作開始の遅延」設定であるため、遅延が発生するのは最初の一回だけですのようです。Loopオプションで繰り返されるのは回転動作の部分のみ、なるほどね。

 

なので次はSequenceを使うことにしました。Sequenceに上のDORotateをAppendして、SequenceのLoopオプションに「-1」を設定。

Sequence GearSeq = DOTween.Sequence();

GearSeq.Append(
   GearObj.transform.DOLocalRotate(new Vector3(0.0f, 0.0f, 10.0f), 0.7f)
                               .SetRelative(true)
                               .SetDelay(1.0f)
   );
GearSeq.SetLoops(-1);

これでSequenceを繰り返す=「最初の遅延動作」+「回転動作」を繰り返す、となるはずなので「1秒待った後に10度回転する」動作が繰り返されるはずです。

 

f:id:Karvan:20200616213611g:plain

・・・なんだこれ?・・・

 

Loopの設定

なるほど、Sequenceを繰り返す、ということは指定のTweenを最初から実行する、となりますが、DORotateを最初から実行するということは「初期角度から指定角度まで回転する」という動作を繰り返すことになります。これでは上の動画みたいに壊れたレコードみたいな動作となるのは当然です。なるほど、なるほど

 

Loopオプションは第一引数でループ回数を指定出来ますが、第二引数にループの挙動も指定することができます。

  • Restart: 挙動が終了した時に値を始点に戻し、再度実行する
  • Yoyo: ヨーヨーのように行き戻りを繰り返す
  • Incremental: 挙動が終了した時に差分を endValue に追加しつつ再度Tweenを実行する

 

今回の場合はLoopTypeにIncrementalを指定する必要があったみたいです。

GearSeq.SetLoops(-1, LoopType.Incremental);

さっそく追加して実行

 

f:id:Karvan:20200616213911g:plain

・・・なんだこれ?(二度目)・・・

 

暫定対応

f:id:Karvan:20200616214516p:plain

よく見ると回転動作の最終位置は加算されているようで、じわじわ回転しているのはわかります。が、何故か動作開始位置が前回動作時のendValueとなっていないようで先ほどの動作と大して変わらない挙動となってしまいます。

 

 色々と調べましたがお手上げとなってしまったので暫定的な対応としてDelayオプションによる遅延動作をあきらめ、Sequenceに遅延時間分ダミーオブジェクトを動作させるTweenを追加、これを繰り返すことにしました。

 

f:id:Karvan:20200616214615g:plain

左の歯車がダミーオブジェクト
本命オブジェクトのDORotate前に左のダミーオブジェクトを遅延時間分回転させています。

 

GearSeq = DOTween.Sequence();

  GearSeq.Append(
   DummyObj.transform.DOLocalRotate(new Vector3(0.0f, 0.0f, 360.0f), 1.0f)
                               .SetRelative(true)
   );

GearSeq.Append(
   GearObj.transform.DOLocalRotate(new Vector3(0.0f, 0.0f, 10.0f), 0.7f)
                               .SetRelative(true)
   );

GearSeq.SetLoops(-1, LoopType.Incremental);

一応これで想定する動作を実現することができましたが、何かほかに良い方法があればだれか教えてください。


ちなみに、どうしてこんな動作を作る必要があったのかと言えば、現在作成中のゲーム内で使用するためです。
こんな場面で使っています。

f:id:Karvan:20200616215101g:plain

 

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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