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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

3502閲覧

Unity2D C# マウスカーソルの座標にずれが生じる

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2021/07/03 09:02

編集2021/07/03 23:19

前提・実現したいこと

マウスカーソルの場所を示すときのずれを直したい

該当のソースコード

マウスカーソルの場所を示すための画像を、以下のスクリプトで生成しています。

C#

1mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 2float x = Mathf.RoundToInt(mousePos.x); 3float y = Mathf.RoundToInt(mousePos.y); 4 5x += 0.5f; 6y -= 0.5f; 7 8mousePos = new Vector2(x, y);

C#

1Graphics.DrawMesh(mesh, mousePos, Quaternion.identity, selectCursorMat, 0);

C#

1 void GenerateMesh() 2 { 3 mesh = new Mesh(); 4 mesh.vertices = new Vector3[] { 5 new Vector3 (0f, 0f, 0), 6 new Vector3 (0f, 1f, 0), 7 new Vector3 (1f, 0f, 0), 8 new Vector3 (1f, 1f, 0), 9 }; 10 11 mesh.uv = new Vector2[] { 12 new Vector2 (0, 0), 13 new Vector2 (0, 1), 14 new Vector2 (1, 0), 15 new Vector2 (1, 1), 16 }; 17 }

↑メッシュを生成するメソッド

試したこと

イメージ説明
↑X座標を+0.5し、y座標を-0.5していない場合

イメージ説明
↑X座標を+0.5し、y座標を-0.5した場合。Graphics.DrawMeshで生成したタイルにぴったり合うように座標を調整しています

地形はGraphics.DrawMeshで生成しているのですが、マウスカーソルの場所とずれを直すために、上記のスクリプトで、X座標を+0.5し、y座標を-0.5しています。

ですが、こうしてしまうと、マウスの動きに対して、直感的に画像のカーソルが動いてくれません。

どのようにすれば、正しくマウスカーソルの位置を示す画像を動かすことができるでしょうか?

回答よろしくお願いいたします。

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

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

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

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

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

Bongo

2021/07/03 13:54 編集

ご提示いただいた図では、カーソルが砂のような地形と岩のような地形のちょうど境界の角の部分を指しているようです。 これは、ご提示いただいたコードの中の「x += 0.5f; y -= 0.5f;」の処置を加えずに実行した場合の、カーソルの見た目の位置がずれてしまった状態を示していると考えていいのでしょうか? それともう一つ、「Graphics.DrawMesh(mesh, mousePos, Quaternion.identity, selectCursorMat, 0);」の第一引数の「mesh」はどのようなメッシュでしょうか(Unityに組み込まれているQuadだとかを使っていらっしゃるのか、それとも独自にモデリングしたメッシュなのでしょうか)。
退会済みユーザー

退会済みユーザー

2021/07/03 23:20

上の画像が「x += 0.5f; y -= 0.5f;」の処置を加えなかったもので、下の画像が処置を加えたものです。 メッシュを生成するメソッドを追記致しました。
guest

回答1

0

ベストアンサー

追記ありがとうございます。メッシュのverticesが左下(0, 0)、右上(1, 1)の正方形で、カーソルの座標修正を行わない場合だと地形タイルの境界部分を指しているように見えるということは、ワールド座標が整数の地点が地形タイルの中心になるように制作されている様子ですね。
ということは、カーソル座標のずらし量は...

lang

1x -= 0.5f; 2y -= 0.5f;

とするべきではないでしょうか?
あるいは、カーソル座標のずらしは行わずに、カーソルメッシュのverticesを(0, 0)が中心になるように作ってしまうのでもいいかもしれません。

lang

1mesh.vertices = new Vector3[] { 2 new Vector3 (-0.5f, -0.5f, 0), 3 new Vector3 (-0.5f, 0.5f, 0), 4 new Vector3 (0.5f, -0.5f, 0), 5 new Vector3 (0.5f, 0.5f, 0), 6};

投稿2021/07/04 00:07

Bongo

総合スコア10807

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

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

退会済みユーザー

退会済みユーザー

2021/07/04 01:51

思った通りの実装ができました。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問