前提
見下ろし型2Dシューティングゲームを作成しています。
実現したいこと
prefabから生成した弾の座標を移動するキャラの子オブジェに設定し発射させたい
発生している問題・エラーメッセージ
下記ソースコードは2つのスクリプトで管理されており、上のコードを1,下のコードを2とする。
キャラの子オブジェの座標を代入する変数をコード2bulletSpawnPosで宣言し、この変数を
コード1 public void Shoot(Vector2 spawnPos) に引数として渡し
複製する GameObject newBulletに引数を座標として与えたいが
エラー CS1503 引数 2: は 'UnityEngine.Vector2' から 'UnityEngine.Transform' へ変換することはできません
と表示され、複製したオブジェに座標を入れる事が出来ない
該当のソースコード
コード1
//弾を格納する配列、撃つ場所、方向、発射位置 //カメラ [SerializeField] private GameObject[] bullets; private Vector2 targetPos, direction, bulletSpawnPos; private Camera cam; public void Shoot(Vector2 spawnPos) //撃つ { targetPos = cam.ScreenToWorldPoint(Input.mousePosition); //マウス座標を変数に入れる bulletSpawnPos = spawnPos; //下のコード2からbulletSpawnPosを引数として受け取り代入する direction = (targetPos - bulletSpawnPos).normalized; GameObject newBullet = Instantiate(bullets[weaponIndex],spawnPos); //spawnPosを入れたい※ここが問題点 newBullet.GetComponent<WeaponPistol>().MoveDirection(direction); //別スクリプトWeaponPistolで定義した弾の方向設定 MoveDirectionメソッドを呼ぶ //MoveDirectionメソッドの内容 public void MoveDirection(Vector3 direction) //弾の方向設定、非表示設定 { rb.velocity = direction * moveSpeed; }
コード2
[SerializeField] private float shootTimer, shootTimeDelay = 0.2f; //射撃タイマー、射撃間隔 [SerializeField] private Transform bulletSpawnPos; //弾が出るべきポジション変数 private void Update() { Shooting(); //下のメソッドを呼ぶ } void Shooting() { if (Input.GetMouseButtonDown(0)) //左クリックが押されたら { if(Time.time > shootTimer) //ゲーム内時間が射撃タイマーを超えたら { shootTimer = Time.time + shootTimeDelay; //shootTimerを更新する playerWeaponManager.Shoot(bulletSpawnPos.position); //発射関数を呼ぶ } } }
試したこと
・「vector2 transform 変換」と検索しても望んでいる解決方法がヒットしない
・スペルミスがないかチェック済み
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。