LoginSignup
2
1

More than 5 years have passed since last update.

Unity,3Dゲームでタップ入力時の注意点/Camera.main.ScreenPointToRayでのエラー

Last updated at Posted at 2018-08-18

タップしても弾が前に飛ばない!現象

Unityで3Dゲームを制作している中、弾が上手く飛ばないという事があるのではないでしょうか。
その原因の1つがCamera.main.ScreenPointToRay()に起因します。
失敗.gif

タップした場所に弾を飛ばす時の座標取得方法

そもそもタップした時にどう座標取得するのでしょうか。
3Dでは座標が3次元世界での座標系(ワールド座標系)になります。
UnityではScreenPointToRayというメソッドがあり、カメラからスクリーン座標に向かうベクトルを取得できます。
このベクトルを使って弾をタップした方向に飛ばします。

スクリーン.png

↓弾Prefab用スクリプト

public class IgaguriGenerator : MonoBehaviour {

    public GameObject igaguriPrefab;

    void Update () {
        if(Input.GetMouseButtonDown(0)){
            GameObject igaguri = Instantiate(igaguriPrefab) as GameObject;
//ScreenPointToRayに因るベクトルの取得
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 worldDir = ray.direction;
            igaguri.GetComponent<IgaguriController>().Shoot(worldDir.normalized * 2000);
        }
    }
}

MainCameraの座標からタップした座標に向かうベクトルを取得できますがここでMainCameraをタグ付けしないと上画像のようにベクトルを取得できずに弾が発射できません。

スクリーンショット 2018-08-12 15.32.57.png
          ↓
タグにMainCameraを選択します。
スクリーンショット 2018-08-12 15.33.09.png

これで弾が発射できました。
成功.gif

参考書籍

Unityの教科書 北村愛美

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1