質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

1331閲覧

バーチャルカメラの挙動を調整したい

release832555

総合スコア9

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/08/08 07:27

やりたいこと
バーチャルカメラが注視対象に対して常に最短距離に移動してもらいたい

GIFをご覧いただくとわかりやすいのですが
イメージ説明
黄色のパスがプレイヤー 緑のパスがカメラです
プレイヤーが徐々に移動していき、黄色と緑のパスの接点に到達するのですが
パスの形状が特殊なせいかカメラがひっかかり最短距離に移動してもらえません
AUTODOLLYの機能は常に注視対象に対して最短距離に移動してもらえると思いましたが違うようです

イメージ説明

解決方法はありますか?
よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

念のため確認しますが、ご提示のスクリーンショットでは「Auto Dolly」の「Enabled」がオフになっているようですが、実際に動かす際にはここをオンにしているということでいいでしょうかね?

試してみましたところ、ご質問者さんのスクリーンショットをまねた下図のような経路をとらせたところ、反対側の末端にターゲットが近づいてもカメラが最近傍であるはずの反対側末端に移動しない現象が起こりました。

図1

そこで「Auto Dolly」の「Search Radius」を0に変更したところ、下図のように反対側末端へ移動するようになりました。

図2

マニュアルによれば、「Search Radius」は最近傍地点を探す際に「現在カメラがいるパスセグメントから、前後に何セグメントの範囲から最近傍地点を探すか」を指定するもののようです。初期値の2だと反対側末端が遠すぎて最近傍探索にひっかからなかったと思われます。
これが0の時は特別扱いとなり、パス全体から最近傍点を探してくれるようですね。

余談ですが、下図のようにカメラのパスを逆向きにしたところ...

図3

向きが逆転しただけでパスの形状は同じなのにもかかわらず、「Search Radius」が2でも反対側末端に移動しました。
最近傍点の探索には、内部的にはCinemachinePathBaseFindClosestPointが使われているようです。メソッドの序盤に...

C#

1 float start = MinPos; 2 float end = MaxPos; 3 if (searchRadius >= 0) 4 { 5 int r = Mathf.FloorToInt(Mathf.Min(searchRadius, (end - start) / 2f)); 6 start = startSegment - r; 7 end = startSegment + r + 1; 8 if (!Looped) 9 { 10 start = Mathf.Max(start, MinPos); 11 end = Mathf.Max(end, MaxPos); 12 } 13 }

という部分がありますが、ここのend = Mathf.Max(end, MaxPos);という箇所にご注目いただきますと、「計算して求めた探索終端位置とパスの最大位置のうち、大きい方を探索終端位置として採用する」という動作になっていることがお分かりいただけるかと思います。
このため、たとえ「Search Radius」を2に設定していたとしても探索終端位置はパスの最大位置となってしまい、先の図のように反対側末端までカメラが移動する動きになったのでしょう。
おそらくあの部分は間違いであり、end = Mathf.Min(end, MaxPos);とするべきなんじゃないかと思います。

投稿2020/08/08 21:51

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

release832555

2020/08/09 06:33

回答ありがとうございます Search Radiusを0にする方法はビックリしました また探索優先順位という点もためになりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問