###前提・実現したいこと
初めまして。
現在「Unity」を使って3Dゲーム開発を行っているmassu1221と申します。
使用しているプログラミング言語はC#です。
実現したい事としましては、
カメラを旋回させたとしても、ゲーム画面上の任意の位置をタップすれば
その位置にオブジェクト(ここではCubeを使っています)を配置できるようにすることです。
###発生している問題・エラーメッセージ
現在発生している問題としまして、
カメラを旋回させてから画面上をタップすると、
タップした場所ではなく、意図しない場所にオブジェクトが生成されるということです。
スクリーン座標からワールド座標への変換の部分が
原因なのかなということはなんとなく分かるのですが、
そこから先がどうしていいか分かりません。
イメージでご説明致します。
ここで画面をタップするとそこにオブジェクトが出現します。
下図では、うまくオブジェクトが配置されています。
しかし、カメラをワールド座標系の原点(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 (); } } }
上記が画面をタップした位置にオブジェクトを生成するためのソースコードです。
空オブジェクトにアタッチしています。
回答2件
あなたの回答
tips
プレビュー