🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity3D

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

Unity

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

Q&A

解決済

3回答

12478閲覧

「Unity」特定のオブジェクト同士の距離を保ちたい

Kitsutsuki

総合スコア24

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2016/02/04 12:17

初めまして、Unityに関して質問します。

Unity・プログラミング共に初心者です。
現在Unity3DでTPSカメラ・移動のコントローラを作成しているのですが、
その作成中に詰まってしまった所がありそこを質問したいです。

仕様
PSO2やWatch dogsカメラと言うと分かりやすいかとも思いますが
キャラクターが停止している時は自由な角度からキャラを見る事ができ
移動する時はカメラの向いている方向に移動
という物です。

ちょうど良く使えそうなRotateAround()という物を見つけ
それらしい動きはする様になったのですが
キャラクターを動かしてみた所、
カメラがついて行かないのです、

恐らく
RotateAround(回転の中心,方向,速度)
だけでは距離を保つ事ができないからだと思うのですが
Transform.positionにキャラクターのpos+offsetを入れるだけでは
回転させる事ができないので、特定のオブジェクトと距離を保つ方法をお教え頂きたいです。

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ほぼ同じ回答になりますが、オブジェクト間の距離を保つという点につきまして

空のゲームオブジェクト(仮に回転軸オブジェクトとします)を作ります
カメラを上記の子として配置します。
回転軸オブジェクトを回転させるとカメラがぐるぐると回るかと思います。

回転軸オブジェクトには自身の座標をキャラクタ座標の位置に移動する処理とキーによって回転する処理を追加し、
カメラオブジェクトにはキャラクタの方を向く処理を追加します。

上記がUnity的な解決方法ですが計算で行うことも多いです。
座標にオフセットを追加するだけでは回転できませんが、
カメラのX座標 = キャラのX座標 + Cos( カメラの回転量 ) × 離したい距離
カメラのY座標 = キャラのY座標 + Sin( カメラの回転量 ) × 離したい距離
で計算できます。
これはベクトル計算の基本で非常に応用が利くので覚えておいて損はないです。

投稿2016/02/09 08:36

hiramaru

総合スコア48

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

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

Kitsutsuki

2016/02/16 14:48

ありがとうございます。 一度そのような形の処理をしているスクリプトを見た事があるのですが 正直な所、理解出来ておりませんでしたが この様に説明して頂いてやっと理解出来ました。 ありがとうございます。 ベストアンサーは非常に迷ったのですが、 先に回答して頂いた方をベストアンサーにさせて頂きました。
guest

0

ベストアンサー

カメラの操作がちょっとイメージしきれていないですが、
カメラをキャラに追従させるには、一番簡単にやるならそれらを内包するGameObjectを作ることかな、と思います。

つまり、コンテナとなるGameObject(仮に container と名付ける)を親に、カメラとキャラを子にします。

構造で言うと以下のようなイメージ。

container ├ camera └ character

こうした上で、移動自体は container を動かせばキャラとカメラは常に一緒に動くことになります。

投稿2016/02/04 14:51

edo_m18

総合スコア2283

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

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

Kitsutsuki

2016/02/16 14:46

ありがとうございます。 何とか上記の仕様を実装出来ました。 カメラの向いている方向に進ませる処理は Vector3のmoveDirection変数にMouseYとXをGetAxisで入れて カメラのtransform.TransformDirection(moveDirection) で実装出来ました。 ベストアンサーは非常に迷ったのですが、 先に回答して頂いた方をベストアンサーにさせて頂きました。
guest

0

この様な形で解決できるとは思ってもみませんでした。
更にすぐに回答して頂き非常に助かりました。

最終的な形としては回答頂いた様に
container
├ camera
└ character
という形にした上で、
カメラが向いている方向に進む(PSO2カメラ?)というのを実装する為に

obj = GameObject.Find("Main Camera");
cameraPos = obj.GetComponent<Transform>();
moveDirection = new Vector3(GetAxis,0,GetAxis);//省略してあります。
cameraPos.TransformDirection(moveDirection)
という様な形で、ここにスピードやらdeltaTimeやらを掛けて
Controller.Moveで動かしました。

投稿2016/02/16 14:59

Kitsutsuki

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問