質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

675閲覧

複製した弾の発射座標を指定したい

35Riel

総合スコア31

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/06/05 04:07

前提

見下ろし型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 変換」と検索しても望んでいる解決方法がヒットしない
・スペルミスがないかチェック済み

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

コード1のpublic void Shoot(Vector2 spawnPos) メソッドの最後の行に

newBullet.transform.position = bulletSpawnPos;

を追加したところ理想通りの挙動をしてくれるようになりました

投稿2022/06/05 04:44

35Riel

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問