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

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

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

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

Unity

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

Q&A

解決済

2回答

4723閲覧

画面上のタップした位置にオブジェクトを出現させたいです【Unity】

massu2357

総合スコア17

C#

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

Unity

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

0グッド

1クリップ

投稿2016/08/13 05:51

編集2016/08/13 07:18

###前提・実現したいこと
初めまして。
現在「Unity」を使って3Dゲーム開発を行っているmassu1221と申します。
使用しているプログラミング言語はC#です。

実現したい事としましては、
カメラを旋回させたとしても、ゲーム画面上の任意の位置をタップすれば
その位置にオブジェクト(ここではCubeを使っています)を配置できるようにすることです。

###発生している問題・エラーメッセージ
現在発生している問題としまして、
カメラを旋回させてから画面上をタップすると、
タップした場所ではなく、意図しない場所にオブジェクトが生成されるということです。

スクリーン座標からワールド座標への変換の部分が
原因なのかなということはなんとなく分かるのですが、
そこから先がどうしていいか分かりません。

イメージでご説明致します。

このようなGameViewがあるとします。
![初期状態

ここで画面をタップするとそこにオブジェクトが出現します。
下図では、うまくオブジェクトが配置されています。
画面タップ時

しかし、カメラをワールド座標系の原点(0,0,0)を中心に旋回させてから
画面上をタップすると、全く別の場所にオブジェクトが出現してしまいます。
カメラの向いている方向(GameView)とは異なる範囲にオブジェクトが作られてしまいます。
エラー時

この部分を解決し、カメラを旋回させたとしても、
カメラが映しているGameView上でタップした位置に
オブジェクトを出現させたいと考えています。

どなたかご教授いただければと思います。
どうぞよろしくお願い致します。

###ソースコード

using UnityEngine; using System.Collections; public class GameMgr : MonoBehaviour { //生成されるオブジェクトのプレハブ public GameObject boxPrefab; //画面タップ時の効果音 private AudioSource audioSource; [SerializeField] Camera _camera; // Use this for initialization void Start () { audioSource = gameObject.GetComponent<AudioSource> (); } // Update is called once per frame void Update () { //画面タップした際の処理 if(Input.GetMouseButtonDown(0)){ //タップした3次元座標を取得 Vector3 pos = _camera.ScreenToWorldPoint(Input.mousePosition + _camera.transform.forward * 10); //タップした位置にプレハブ化したオブジェクトを生成 Instantiate (boxPrefab, pos, Quaternion.identity); audioSource.Play (); } } }

上記が画面をタップした位置にオブジェクトを生成するためのソースコードです。
空オブジェクトにアタッチしています。

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

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

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

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

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

sakura_hana

2016/08/13 07:08

オブジェクトの生成に利用しているソースコードを記載してください。
massu2357

2016/08/13 07:19

質問を見ていただきありがとうございます! ソースコードを追加させていただきました。 載せれておらず申し訳ありません。
guest

回答2

0

ベストアンサー

ScreenToWorldPointはスクリーン位置をワールド位置に変換するので、
渡す値はスクリーン位置にする必要があります。
その後で加算してみてください。

C#

1Vector3 screenPosition = Input.mousePosition; 2Vector3 worldPosition = _camera.ScreenToWorldPoint(screenPosition); 3// ここで worldPosition にベクトルを加算など

投稿2016/08/13 08:36

buibui80

総合スコア1033

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

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

massu2357

2016/08/13 21:43

ありがとうございます! ご教授いただいた変換で行ってみたところ、しっかりとカメラ視点での枠内に オブジェクトを生成することができました。 本当にありがとうございます!
guest

0

生成するオブジェクトに対して、カメラのベクトルを適用し、そこから好きな場所に平行移動させてみてはどうでしょう。

投稿2016/08/13 07:35

mugicya

総合スコア1046

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

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

massu2357

2016/08/13 21:44

なるほどです! そういった方法もあるのですね! ベクトル変換や座標の平行移動が大事になるのですね。 それらを意識しながら作ってみます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問