前提・実現したいこと
TextMeshProの文字情報を3D空間でマウスのカーソルに合わせてカメラ移動し、見れるようにしたいです。
- 右クリックをすると3D(?)のカメラ移動から切り替わって、2D(?)で縦横にカメラ移動をして文字を読めるようにしたいです。これもマウスカーソルに合わせて行いたいです。
- マウスのホイール操作でズームインズームアウトもできるようになりたいです。
今現在できていること・やってみたこと
今現在はこのような感じで,マウスのカーソルに合わせて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); } }
あなたが分かっていないことは大抵他者も分かりません。
例えば「マウスを使って」と言っても、「どのような入力をしたらどうなるか」が違えばコードは変わります。ハテナマークを出したいのはこっちの方です。
以下を参考に、「実現したいことを具体的に」「今出来ていること」「今出来ていないこと」「試したこと」を記載してください。
https://teratail.com/help/question-tips
ちなみに初心者だから悪いとかそういう意味ではなく、初心者だからと恐縮するならその分サイトの使い方や投稿ページをよく見てください(例えばタイトル横に初心者アイコンを付けられます)、あなたのことを何も知らない人が見て理解出来る質問かどうか・非推奨質問になっていないか読み直してみてください、というお願いです。
厳しい言い方になってしまい申し訳無いですが、質問は編集出来ますので直して頂ければ問題無いです。宜しくお願いします。
まずこのサイトはスクリプト作成依頼を受け付けるサイトではないので、それを頼みたいなら別サイトで業務として依頼してください。
何も分からないまま回答だけ貰っても何の進歩もしないし、次に同じような問題が出て来た時に同じような質問をするだけなので、「今のコードは何をしているのか」を理解出来るようになるのが先決かと思います。
以下、ヒントです。
1:今のコードはtargetが存在する限り実行されます。なので「右クリックが押されたら(押されている間?)」という条件分岐が必要です。「unity 右クリック 取得」などでググりましょう。ホイールについても同様です。
2:今のコードはClampAngleにより入力の値を変更しているものの、「現在位置+回転により生成された距離+マウスカーソルの移動した距離」のような形になっているので当然ながらカーソルを動かす度にカメラ位置が移動していきます。サンプルをコピペしたにしても、そのサンプルの意図がよく分からないです。(一部を切り貼り&自分で追加でもされたのでしょうか?)とりあえず調べるなら「unity 移動 制限」とかで出ると思います。
「カーソルを動かしている間(右クリックやホイール操作無しの時)、カメラをどう動かしたいのか」という「実現したいこと」も必要です。
あなたの回答
tips
プレビュー