前提・実現したいこと
球体に力を加えて動かし、その時の初速度を表示させたいです。
AddForce のモードは Impulse を使っています。
if (isFirst){ }を使って、力が加えられるのを1回だけにしているのですが、
これだと発射された直後しか見られていないらしく、速度が0としか表示されません。
if (isFirst){ }をコメントアウトして FixedUpdate ごとに力を毎回加えて動かすと速度は表示されます。
力を加えるのは1回だけにしたいのですが、この場合は初速度を表示させることはできないのでしょうか?
発生している問題・エラーメッセージ
エラーは出ていません。
該当のソースコード
前半は球体をプレハブとして発生させてます。
後半は球体プレハブをRigidBodyとして取得し、1回だけ力を加えています。
C#
1public class ShotShell : MonoBehaviour 2{ 3 public GameObject shellPrefab; 4 5 void Update() 6 { 7 // Zキーを押している間は 8 if (Input.GetKey(KeyCode.Z)) 9 { 10 // 砲弾のプレハブを実体化(インスタンス化)する。 11 GameObject shell2prefab = Instantiate(shellPrefab, transform.position, Quaternion.identity) as GameObject; 12 } 13 } 14}
C#
1public class AddForce : MonoBehaviour 2{ 3 public float shotSpeed; 4 bool isFirst = true; // 最初の一回を判定するフラグ 5 6 void FixedUpdate() 7 { 8 // 一回だけ呼ばれる 9 if (isFirst) 10 { 11 isFirst = false; // 一回はすぎた 12 13 Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得 14 15 rb.AddForce(transform.forward * shotSpeed , ForceMode.Impulse); // 力を加える 16 17 // 速度を表示 18 Debug.Log("速度: " + rb.velocity.magnitude); 19 } 20 } 21}
バージョン
Unity2019.1.2f1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/04 07:06