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

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

ただいまの
回答率

87.91%

TextMeshProをマウスを使って3D空間で見たい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 593
退会済みユーザー

退会済みユーザー

前提・実現したいこと

TextMeshProの文字情報を3D空間でマウスのカーソルに合わせてカメラ移動し、見れるようにしたいです。

  1. 右クリックをすると3D(?)のカメラ移動から切り替わって、2D(?)で縦横にカメラ移動をして文字を読めるようにしたいです。これもマウスカーソルに合わせて行いたいです。
  2. マウスのホイール操作でズームインズームアウトもできるようになりたいです。
    イメージ説明

今現在できていること・やってみたこと

今現在はこのような感じで,マウスのカーソルに合わせて3D(?)でカメラ移動はできるようになりました。
ただ、制限がない状態でどこまででもカメラが移動してしまい、TextMeshProの文字データがどこかに消えてしまい、画面が真っ白になってしまうので、カメラの移動に制限をかけたいのですが、これもどうすればいいのかわかりません…。

制限なしでどこまでも行ってしまい、画面が真っ白になってしまう

拙い説明で申し訳ありません。
短期間で無理やりプログラムを組まなければいいけない事情があり、ここまでコピペと少しの数値変更でなんとかやってきて、プログラムの書き方を何一つ理解せずにやってきてしまいました…。なにからなにまで聞いてしまって本当に申し訳ありません…。また不備や意味不明な点がございましたら本当に本当に申し訳ありません…。

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//クラス
public class CameraController : MonoBehaviour
{

    public Transform target;
    public float distance = 12.0f;
    public float xSpeed = 250.0f;
    public float ySpeed = 120.0f;
    public float yMinLimit = -45f;
    public float yMaxLimit = 85f;
    private float x = 0.0f;
    private float y = 0.0f;

    public GameObject target2;

    void Start()
    {
        var angles = this.transform.eulerAngles;
        // Rotation X : Vertical Rotation (Pitch)
        // Rotation Y : Horizontal Rotation (Yaw)
        x = angles.y;
        y = angles.x;

        target2 = GameObject.Find("TARGET");
        //Debug.Log(target2.transform.position.x);

    }

    void Update()
    {


        if (target)
        {
            x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;

            y = ClampAngle(y, yMinLimit, yMaxLimit);

            var rotation = Quaternion.Euler(y, -x, 0);
            var position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position;

            this.transform.rotation = rotation;
            this.transform.position = position;

            Vector3 temp = new Vector3( Input.GetAxis("Mouse X") * xSpeed * 0.02f , Input.GetAxis("Mouse Y") * ySpeed * 0.02f, 0);
            target2.transform.position += temp;


        }
    }

    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360) { angle += 360; }
        if (angle > 360) { angle -= 360; }
        return Mathf.Clamp(angle, min, max);
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • sakura_hana

    2019/07/07 14:18

    あなたが分かっていないことは大抵他者も分かりません。
    例えば「マウスを使って」と言っても、「どのような入力をしたらどうなるか」が違えばコードは変わります。ハテナマークを出したいのはこっちの方です。
    以下を参考に、「実現したいことを具体的に」「今出来ていること」「今出来ていないこと」「試したこと」を記載してください。
    https://teratail.com/help/question-tips

    キャンセル

  • sakura_hana

    2019/07/07 14:24

    ちなみに初心者だから悪いとかそういう意味ではなく、初心者だからと恐縮するならその分サイトの使い方や投稿ページをよく見てください(例えばタイトル横に初心者アイコンを付けられます)、あなたのことを何も知らない人が見て理解出来る質問かどうか・非推奨質問になっていないか読み直してみてください、というお願いです。
    厳しい言い方になってしまい申し訳無いですが、質問は編集出来ますので直して頂ければ問題無いです。宜しくお願いします。

    キャンセル

  • sakura_hana

    2019/07/08 18:23

    まずこのサイトはスクリプト作成依頼を受け付けるサイトではないので、それを頼みたいなら別サイトで業務として依頼してください。
    何も分からないまま回答だけ貰っても何の進歩もしないし、次に同じような問題が出て来た時に同じような質問をするだけなので、「今のコードは何をしているのか」を理解出来るようになるのが先決かと思います。
    以下、ヒントです。

    1:今のコードはtargetが存在する限り実行されます。なので「右クリックが押されたら(押されている間?)」という条件分岐が必要です。「unity 右クリック 取得」などでググりましょう。ホイールについても同様です。

    2:今のコードはClampAngleにより入力の値を変更しているものの、「現在位置+回転により生成された距離+マウスカーソルの移動した距離」のような形になっているので当然ながらカーソルを動かす度にカメラ位置が移動していきます。サンプルをコピペしたにしても、そのサンプルの意図がよく分からないです。(一部を切り貼り&自分で追加でもされたのでしょうか?)とりあえず調べるなら「unity 移動 制限」とかで出ると思います。
    「カーソルを動かしている間(右クリックやホイール操作無しの時)、カメラをどう動かしたいのか」という「実現したいこと」も必要です。

    キャンセル

まだ回答がついていません

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

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

関連した質問

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