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

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

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

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

Q&A

0回答

1060閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2019/07/05 11:37

編集2019/07/07 13:58

前提・実現したいこと

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); } }

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

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

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

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

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

sakura_hana

2019/07/07 05:18

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

2019/07/07 05:24

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

2019/07/08 09:23

まずこのサイトはスクリプト作成依頼を受け付けるサイトではないので、それを頼みたいなら別サイトで業務として依頼してください。 何も分からないまま回答だけ貰っても何の進歩もしないし、次に同じような問題が出て来た時に同じような質問をするだけなので、「今のコードは何をしているのか」を理解出来るようになるのが先決かと思います。 以下、ヒントです。 1:今のコードはtargetが存在する限り実行されます。なので「右クリックが押されたら(押されている間?)」という条件分岐が必要です。「unity 右クリック 取得」などでググりましょう。ホイールについても同様です。 2:今のコードはClampAngleにより入力の値を変更しているものの、「現在位置+回転により生成された距離+マウスカーソルの移動した距離」のような形になっているので当然ながらカーソルを動かす度にカメラ位置が移動していきます。サンプルをコピペしたにしても、そのサンプルの意図がよく分からないです。(一部を切り貼り&自分で追加でもされたのでしょうか?)とりあえず調べるなら「unity 移動 制限」とかで出ると思います。 「カーソルを動かしている間(右クリックやホイール操作無しの時)、カメラをどう動かしたいのか」という「実現したいこと」も必要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問