### やりたいこと
打ち出す弾丸の弾道にランダム性を持たせたいです。
###現状
BulletPool.instance.GetUavBulletの引数はGetUavBullet(Vector3 pos, Quaternion rotate)です
現状だとまっすぐに射出されるだけなので、弾道をランダムにばらけさせたいです。
C#
1//オブジェクト生成 2if (shotInterval > shotIntervalMax) 3{ 4 BulletPool.instance.GetUavBullet(muzzle.transform.position, Camera.main.transform.rotation); 5 shotInterval = 0; 6} 7 8------------------ 9 10//Bulletの加速 11//弾を前進させる 12BulletR.AddForce(transform.forward * ShotSpeed, ForceMode.Impulse); 13 14------------------ 15 16//UavBulletのプール 17private void Start() 18{ 19 //ヒエラルキーにプールする空オブジェクトを作成 20 UavBullets = new GameObject("UavBullets").transform; 21 //uavbulletのリスト 22 pooledUavBullet = new List<GameObject>(); 23 for (int i = 0; i < UAVBULLET_MAX; i++) 24 { 25 GameObject newBullet = CriateUavBullet(); 26 newBullet.SetActive(false); 27 pooledUavBullet.Add(newBullet); 28 } 29} 30public GameObject GetUavBullet(Vector3 pos, Quaternion rotate) 31{ 32 //リストの中から使えるBulletを探し非アクティブがあればアクティブにして返す 33 foreach (GameObject obj in pooledUavBullet) 34 { 35 if (obj.activeInHierarchy == false) 36 { 37 obj.transform.position = pos; 38 obj.transform.rotation = rotate; 39 obj.SetActive(true); 40 return obj; 41 } 42 } 43 //使用できるものがなかったら新たに作成して追加する 44 GameObject newBullet = CriateUavBullet(); 45 pooledUavBullet.Add(newBullet); 46 return newBullet; 47} 48 49private GameObject CriateUavBullet() 50{ 51 GameObject newBullet = Instantiate(bullet, UavBullets); 52 return newBullet; 53}
###やってみたこと
全然あっているかわからないのですが、やってみた結果どこを向いて射出しても+Z軸方向に固定されて射出され、ランダム性も確認できませんでした。
C#
1public float randomX; 2public float randomY; 3public float nomalZ; 4private Quaternion MainShotAngle; 5private Quaternion ShotAngle; 6 7 8void Start() 9{ 10 ShotAngle = Camera.main.transform.rotation; 11 randomX = ShotAngle.eulerAngles.x; 12 randomY = ShotAngle.eulerAngles.y; 13 nomalZ = ShotAngle.eulerAngles.z; 14 randomX = Random.Range(-5.0f, 5.0f); 15 randomY = Random.Range(-5.0f, 5.0f); 16 17 MainShotAngle = Quaternion.Euler(randomX, randomY, nomalZ); 18} 19 20if (shotInterval > shotIntervalMax) 21{ 22 BulletPool.instance.GetUavBullet(muzzle.transform.position, MainShotAngle); 23 shotInterval = 0; 24} 25 26------------------ 27 28//Bulletの加速 29//弾を前進させる 30BulletR.AddForce(transform.forward * ShotSpeed, ForceMode.Impulse); 31 32------------------ 33 34//UavBulletのプール 35 36private void Start() 37{ 38 //ヒエラルキーにプールする空オブジェクトを作成 39 UavBullets = new GameObject("UavBullets").transform; 40 //uavbulletのリスト 41 pooledUavBullet = new List<GameObject>(); 42 for (int i = 0; i < UAVBULLET_MAX; i++) 43 { 44 GameObject newBullet = CriateUavBullet(); 45 newBullet.SetActive(false); 46 pooledUavBullet.Add(newBullet); 47 } 48} 49public GameObject GetUavBullet(Vector3 pos, Quaternion rotate) 50{ 51 //リストの中から使えるBulletを探し非アクティブがあればアクティブにして返す 52 foreach (GameObject obj in pooledUavBullet) 53 { 54 if (obj.activeInHierarchy == false) 55 { 56 obj.transform.position = pos; 57 obj.transform.rotation = rotate; 58 obj.SetActive(true); 59 return obj; 60 } 61 } 62 //使用できるものがなかったら新たに作成して追加する 63 GameObject newBullet = CriateUavBullet(); 64 pooledUavBullet.Add(newBullet); 65 return newBullet; 66} 67 68private GameObject CriateUavBullet() 69{ 70 GameObject newBullet = Instantiate(bullet, UavBullets); 71 return newBullet; 72}
###わからないこと
引数はQuaternionなのでQuaternion.eulerAnglesでランダムをかけたい軸を指定すればできると思っていましたができなかったので、わからなくなってしまいました。
###環境
Unity 2019.3.0f6
###参考にさせていただいたサイト
https://qiita.com/kaone_e/items/92bb8cf0c1ab01740f85
https://teratail.com/questions/234160
https://spi8823.hatenablog.com/entry/2015/05/31/025903