実現したいこと
ここに実現したいことを箇条書きで書いてください。
- クリックした位置が正面になるように弾丸の向きを変える
クリックした位置に向かって弾丸を飛ばす
前提
ここに質問の内容を詳しく書いてください。
(例)
2Dのunityでシューティングっぽいゲームを作ろうとしています。
下記のスクリプトで
1クリックした位置を取得
2bulletをコピー
3コピーをクリックした方向へ飛ばす
4コピーをクリックした位置へ回転させる
とやりたいのですが、コピーを基準に横方向以外の位置をクリックした場合コピーが消滅してしまいます
該当のソースコード
C#
1using UnityEngine; 2 3public class Shot : MonoBehaviour 4{ 5 public GameObject bullet; 6 public float Speed = 10f; 7 8 void Update() 9 { 10 if (Input.GetMouseButtonDown(0)) 11 { 12 ////クリックした座標の取得 13 Vector3 clickPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); 14 15 // 弾の生成 16 GameObject clone = Instantiate(bullet, transform.position, Quaternion.identity); 17 18 //向きの生成 19 Vector3 shotForward = Vector3.Scale((clickPosition - transform.position), new Vector3(1, 1, 0)).normalized; 20 21 22 //弾に速度を与える 23 clone.GetComponent<Rigidbody2D>().velocity = shotForward * Speed; 24 25 26 //cloneからクリック位置までの方向を計算 27 Vector3 direction = clickPosition - clone.transform.position; 28 29 //方向とcloneの前方ベクトルの間の角度を計算 30 float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; 31 32 //cloneの回転を計算された角度に設定 33 clone.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 34 35 } 36 } 37}
試したこと
色々なサイトを見て探り探りで作ったので何を試せばいいのかわかりませんでした
float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;のdirection.y, direction.xを入れ替えると上下以外の位置をクリックした場合消滅するようになります
あなたの回答
tips
プレビュー