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

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

ただいまの
回答率

88.23%

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 7,173

Kitsutsuki

score 24

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

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

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

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

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

containercameracharacter

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/16 23:46

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

    キャンセル

+1

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/16 23:48

    ありがとうございます。
    一度そのような形の処理をしているスクリプトを見た事があるのですが
    正直な所、理解出来ておりませんでしたが
    この様に説明して頂いてやっと理解出来ました。
    ありがとうございます。

    ベストアンサーは非常に迷ったのですが、
    先に回答して頂いた方をベストアンサーにさせて頂きました。

    キャンセル

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で動かしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る