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

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

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

306閲覧

Unityのcinemachineでオブジェクト(敵)の方向にカメラをゆっくり向かせたい

YUTO_IT

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2024/02/18 04:44

実現したいこと

Unityでゲーム制作をしており、敵がプレイヤーを攻撃する際、プレイヤーの視点を敵にゆっくり向ける動作を作成したいと思っています。

<大まかな流れ>
1.敵の視界にプレイヤーが入る
2.敵がプレイヤーを追いかける
3.敵の攻撃範囲に入った
4.プレイヤーを敵の方向にゆっくり向かせる

イメージ説明

発生している問題・分からないこと

上記「4.」を実現するため、まずは敵を向くために必要な角度を求めたいのですが、「Vector3.Angle」だと(0度~180度)の範囲で、負数が図れずにうまく敵の向きに焦点が合いません。(角度は常に右回りで加算される。)

なお、まずは敵とプレイヤーの高さは一定として実装してますが、ゆくゆくは垂直方向も実装していきたいです。

該当のソースコード

C#

1   private CinemachineVirtualCamera camera; 2   private CinemachinePOV cameraPOV; 3   private GameObject Player; 4   private GameObject Enemy; 5 6   …略 7 8   var aim = Enemy.transform.position - Player.transform.position; // 敵への向きベクトル計算 9   var angle = Vector3.Angle(aim, Player.transform.forward); //常に正の値 10   cameraPOV.m_HorizontalAxis.Value += angle; // cinemachineの水平方向に値を加算 11

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

様々なWebサイトを閲覧して試しましたが、負数の算出方法がうまく求められずにいます。
また、そもそもこの手の攻撃演出において、実装方法が異なる場合はご指摘いただけますと幸いです。

補足

特になし

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

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

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

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

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

fana

2024/02/19 04:40

Unity とか cinemachine とかいうのを全く知らない人ですが, てきとーに外積でも見てやれば良いのでは? とか思いました.
guest

回答1

0

ベストアンサー

敵がプレイヤーから見て右にいるかどうか、で判断してはいかがですか。

c#

1   var aim = Enemy.transform.position - Player.transform.position; // 敵への向きベクトル計算 2   var angle = Vector3.Angle(aim, Player.transform.forward); //常に正の値 3 4   // もしかすると判定逆かも。実際に動かしてみて、調整してください。 5   if (Vecter3.Dot(aim, Player.transform.right) > 0) { 6    cameraPOV.m_HorizontalAxis.Value -= angle; // cinemachineの水平方向に値を加算 7   } 8   else { 9    cameraPOV.m_HorizontalAxis.Value += angle; // cinemachineの水平方向に値を加算 10   }

Vecter3.Dot(aim, Player.transform.right) > 0」でなぜ敵が右かどうかを判断できるか、わからなければ、内積について調べてみてください。
(例えば、こことか。)


MathfじゃなくてVecter3でした。

投稿2024/02/20 14:12

編集2024/02/21 01:02
katsuko

総合スコア3471

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

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

YUTO_IT

2024/02/26 08:57

ご連絡が遅くなり申し訳ございません。 ご回答いただきありがとうございます。 皆様にコメントをいただいたおかげで、無事にイメージ通りの実装ができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問