前提・実現したいこと
[実現したい事]
Unity にてプレハブにて生成した弾を動かしたい
[前提]
2Dゲームです
弾の生成は「Player」というオブジェクトで行っており
生成した後に関数を使いVector3を計算
それを弾の「Rigidbody2D」に代入しています
発生している問題・エラーメッセージ
[追記・修正]
全く動かないです
下記の試した事で追加で色々と調べてみた結果
今までInitで「Debug.Log」してたのですが
「Update」のほうでしてみると値が初期化されている事が分かりました
m_velocity = shotForward * Speed;
m_velocity = new Vector3(0, 0, 0)
という処理になってしまうようです
これらはどうすれば初期化後「m_velocity = shotForward * Speed;」を行えるように出来るのか現状わかりません
どうすればよろしいでしょうか?
該当のソースコード
C#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class Bullet : MonoBehaviour 7{ 8 // プレイヤーのRigidbody2D 9 private Rigidbody2D rb; 10 11 // 座標 12 private Vector3 m_velocity; 13 14 // 速度 15 private float Speed = 3.0f; 16 17 // Start is called before the first frame update 18 void Start() 19 { 20 Speed = 3; 21 rb = GetComponent<Rigidbody2D>(); 22 } 23 void FixedUpdate() 24 { 25 rb.velocity = m_velocity; 26 } 27 28 // 弾の速度をセットする関数 29 public void Init(Vector3 shotForward) 30 { 31 m_velocity = shotForward * Speed; 32 } 33 34} 35 36追記:弾を生成しているプログラム 37public void Shot(Vector3 mouseWorldPos) 38 { 39 var pos = transform.localPosition; // プレイヤーの位置 40 var rot = transform.localRotation; // プレイヤーの向き 41 42 // 向きの生成(Z成分の除去と正規化) 43 Vector3 shotForward = Vector3.Scale((mouseWorldPos - transform.position), new Vector3(1, 1, 0)).normalized; 44 45 // 発射する弾を生成する 46 var shot = Instantiate(bulletPrefab, pos, rot); 47 48 shot.GetComponent<Bullet>().Init(shotForward); 49 } 50
試したこと
1.どこかでErrorはいてUpdateまで到達出来てない?
「Debug.Log」で確認
結果:動いてました
2.値が弾に正確に届いていない
色々とScriptを跨いでやり取りしてるのでどこかで計算・代入を間違っている?
「Debug.Log」で確認
結果:こちらも問題なし
3.「rb.velocity = m_velocity;」この部分に不具合がある?
「rb.velocity = new Vector3(1, 1, 0)」に変更
結果:動きました
オマケ
「rb.velocity = new Vector2(1, 1)」に変更
結果:動きました
追加
4.今までInitで「Debug.Log」してたのですが
「Update」のほうでしてみると値が初期化されている事が分かりました
m_velocity = shotForward * Speed;
m_velocity = new Vector3(0, 0, 0)
という感じの処理になってしまうようです。
正直色々な所から見よう見まねでやっているのでもしかすると
何か根本的なものが間違っているのかもしれません。
補足情報(FW/ツールのバージョンなど)
Unity 2019.3.15f Personal
回答1件
あなたの回答
tips
プレビュー