2020.08.22追記
スクリプトのスクショもありがとうございました。
弾丸のスピードが変わらなかったのは、弾丸のRotation指定などが悪影響していたかもしれません。
また、現在のスクリプトだとそもそも、 「向いている方向に発射する」 という仕様を実現できないと思うので、それぞれのスクリプトを以下の様に変更した方が処理がスッキリすると思われます。
「やはりスピードが変わらない」などあればご指摘ください
(弾丸となるカプセルオブジェクトは、こちらで少し工夫したので横を向いていますが、質問者様の方だともしかしたら向きがおかしくなるかもです。その場合は別途ご質問ください)
・弾丸のプレハブにアタッチするスクリプト(弾丸を削除する処理のみにする)
C#
1using UnityEngine;
2
3public class ExBulletPrefab : MonoBehaviour
4{
5 public float timer = 1.0f;
6
7 void Update()
8 {
9 // 指定秒数後にオブジェクトを削除する
10 timer -= Time.deltaTime;
11 if (timer < 0.0) {
12 Destroy(this.gameObject);
13 }
14 }
15}
・空のオブジェクトにアタッチするスクリプト(こっちに、弾丸のスピードを持たせる)
C#
1using UnityEngine;
2
3public class ExBullet : MonoBehaviour
4{
5 [SerializeField]private GameObject bulletPrefab; // 弾丸のプレハブ設定用
6 [SerializeField]private float shotSpeed = 10f; // 弾丸のスピード設定用(デフォルト"10")
7
8
9 void Update()
10 {
11 // マウス押下時処理
12 if (Input.GetMouseButtonDown(0)) {
13
14 // プレハブから、GameObjectを生成する
15 // ※このスクリプトがアタッチされているオブジェクト(Bulletオブジェクト)と同じ位置に生成する
16 GameObject bulletObj = Instantiate(bulletPrefab, transform);
17
18 // 生成されたGameObjectから"RigidBody"取得後、指定したスピードで動かす
19 bulletObj.GetComponent<Rigidbody>().AddForce(transform.forward * shotSpeed, ForceMode.Impulse);
20 }
21 }
22}
・弾丸オブジェクトのInspector
↓動作結果(スピード"100"で連射)
当初の回答
処理の方向性は合っているかと思います。
質問者様の処理も以下とほぼ変わらないかと思いますが、こちらの"AddForce"部分と同じ様な処理にしても速度は変わりませんでしょうか。
変わらない場合、弾丸となるGameObjectの、Inspectorのスクショを質問に追記頂けると助かります。
C#
1using UnityEngine;
2
3public class AddForceScript : MonoBehaviour
4{
5 [SerializeField]private GameObject bullet; // <-弾丸となるオブジェクトを設定する
6 public float shotSpeed = 5000;
7
8 void Start()
9 {
10 bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * shotSpeed);
11 }
12}
13
以下、弾丸となるGameObjectのスクショ。
確認点は以下
・RigidBodyを付与しているか
・"Mass"プロパティの値が、極端に大きい値になっていいないか(大きい値ほど、速度が出にくい)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 14:32
2020/08/21 14:46
2020/08/21 14:59