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

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

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

Q&A

解決済

2回答

351閲覧

スプライト マウスに追従

Qoo

総合スコア1249

0グッド

0クリップ

投稿2019/04/14 05:13

スプライト画像をマウスの位置に表示したく
下記のスクリプトを動かしたい2Dオブジェクトにアタッチしているのですが全く動きません。

2Dオブジェクトにはboxコライダ2Dもアタッチ済です。
何が悪いのでしょうか。

using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragAndDrop : MonoBehaviour { void Update() { var mpos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mpos.z=0; transform.position = mpos; } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

Perspectiveに設定したCameraを用いた場合,ScreenToWorldPoint()の返り値は0,0,0になってしまいます。
そこで、Perspectiveに設定したカメラAとは別に新しくカメラBを作成します。

カメラBは、Orthgraphic設定で、カメラAのtransform.positionをトレース、表示サイズも同じ設定とします。
描画先はひとまずDisplay2とでもしておけば、重複して描画されなくなります。

DragAndDropスクリプトにカメラBの参照を持たせ、
var mpos = カメラBのCameraコンポーネント参照.ScreenToWorldPoint(Input.mousePosition);
のように書き換えることで解決します。

C#

1using UnityEngine; 2 3public class MouseFollow : MonoBehaviour 4{ 5 6 [SerializeField] Camera targetCamera; 7 8 void Update() 9 { 10 11 var mpos = targetCamera.ScreenToWorldPoint(Input.mousePosition); 12 mpos.z = 0; 13 transform.position = mpos; 14 15 Debug.Log(mpos); 16 17 } 18}

投稿2019/04/15 15:54

Sado

総合スコア89

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

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

Qoo

2019/04/15 15:56

丁寧に解説いただきありがとうございます! とても良くわかりました!
Sado

2019/04/15 15:58

すみません。こちらのテスト用プロジェクトの都合でクラス名を変更したままのスクリプトを上げてしまいました。 MouseFollowクラスになっていますが、そこだけ気にしないで頂ければ......。
guest

0

添付されたスクリプトですが、私の環境下では問題なく動作しました。
(ゲームスクリーン上のマウス座標が、そのままワールド座標に対応した形に変換されるような動作です)

質問文にて少し誤解されているようですが、transform.positionを操作するためにコライダやリジッドボディは不要です。
おそらくですが、描画順や、他の座標操作系のスクリプトと干渉しているのではないでしょうか。

投稿2019/04/15 06:45

Sado

総合スコア89

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

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

Qoo

2019/04/15 06:56

回答ありがとうございます! カメラをOrthgraphicにしたら動作しました! Perspectiveだとなぜ動かないのでしょうか またPerspectiveで同様のことを実現するにはどうすればよいでしょうか??
Sado

2019/04/15 15:47

たしかに、パースペクティブにすると動きませんね......。 DebugLogで出力してみても、パースペクティブ時のみVector3で(0,0,0)を返してきます。 私もカメラ操作に疎いので、これ以上のアドバイスができず申し訳ありません。
Sado

2019/04/15 15:47

少し考えていたこと試したらうまいこと動作しましたので、新しく回答しますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問