タップしても弾が前に飛ばない!現象
Unityで3Dゲームを制作している中、弾が上手く飛ばないという事があるのではないでしょうか。
その原因の1つがCamera.main.ScreenPointToRay()に起因します。
タップした場所に弾を飛ばす時の座標取得方法
そもそもタップした時にどう座標取得するのでしょうか。
3Dでは座標が3次元世界での座標系(ワールド座標系)になります。
UnityではScreenPointToRayというメソッドがあり、カメラからスクリーン座標に向かうベクトルを取得できます。
このベクトルを使って弾をタップした方向に飛ばします。
↓弾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をタグ付けしないと上画像のようにベクトルを取得できずに弾が発射できません。


参考書籍