teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記した代替手法の前提条件が満たされていない場合を考慮し、さらに代替手法を追記

2017/05/22 05:03

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -4,4 +4,7 @@
4
4
  最初に「弾を置き去りにしてしまった」という動きをしたのも、弾の質量が大きすぎて実際の初速度がかなり小さくなってしまったためかもしれません。
5
5
 
6
6
  [追記]
7
- うっかりしておりました。ForceMode2DではVelocityChangeが使えなかったかもしれませんね。モードはImpulseのままにして、代わりにその前の引数にさらにBulletのRigidBody2Dのmassを掛けてみるといかがでしょう。
7
+ うっかりしておりました。ForceMode2DではVelocityChangeが使えなかったかもしれませんね。モードはImpulseのままにして、代わりにその前の引数にさらにBulletのRigidBody2Dのmassを掛けてみるといかがでしょう。
8
+
9
+ [さらに追記]
10
+ もしかしてBulletのRigidBody2DのisKinematicがオンになっている、ということはありませんでしょうか。もしそうだと、AddForceで力積を加えようとしても無効になるかもしれません。isKinematicを切るか、あるいはAddForceを使う代わりにRigidBody2Dのvelocityにtransform.up.normalized * st.GetBulletSpeed()をセットする(こちらなら多分いける、と思います...)、などの手段が必要かと思います。

2

質問者提示の条件では試せない解決案だったため、代替手法を追記

2017/05/22 05:03

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -1,4 +1,7 @@
1
1
  おかしな動きの原因と関係あるかもしれないと思った箇所を挙げさせていただきます。
2
2
  Bulletが新たに作られたとき、BulletのStartの中で`GetComponent<Rigidbody2D> ().AddForce (transform.up.normalized * st.GetBulletSpeed(),ForceMode2D.Impulse);`で初速度を与えているご様子ですが、Impulseは力積を意味し、その前の引数として与えるべきは弾の運動量の変化量になるかと思います。
3
3
  試しにここのImpulseをVelocityChangeに変えてみて、さらにUpdateの中の`transform.position += pp.GetMoveVector ();`はコメントアウトしてしまい、一旦Startで初速度を与えたら、Updateでむやみに動きを操作せずに物理計算エンジンが自動的に移動させるに任せてみるとどうなるでしょうか。
4
- 最初に「弾を置き去りにしてしまった」という動きをしたのも、弾の質量が大きすぎて実際の初速度がかなり小さくなってしまったためかもしれません。
4
+ 最初に「弾を置き去りにしてしまった」という動きをしたのも、弾の質量が大きすぎて実際の初速度がかなり小さくなってしまったためかもしれません。
5
+
6
+ [追記]
7
+ うっかりしておりました。ForceMode2DではVelocityChangeが使えなかったかもしれませんね。モードはImpulseのままにして、代わりにその前の引数にさらにBulletのRigidBody2Dのmassを掛けてみるといかがでしょう。

1

見やすさ改善のため、コード引用部分をコード用マークダウンに変更

2017/05/22 03:53

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -1,5 +1,4 @@
1
1
  おかしな動きの原因と関係あるかもしれないと思った箇所を挙げさせていただきます。
2
- Bulletが新たに作られたとき、BulletのStartの中で
3
- GetComponent<Rigidbody2D> ().AddForce (transform.up.normalized * st.GetBulletSpeed(),ForceMode2D.Impulse);で初速度を与えているご様子ですがImpulseは力積を意味し、その前の引数として与えるべは弾の運量の変化量になるかと思います
4
- 試しにここのImpulseをVelocityChangeに変えてみて、さらにUpdateの中の「transform.position += pp.GetMoveVector ();」はコメントアウトしてしまい、一旦Startで初速度を与えたら、Updateでむやみに動きを操作せずに物理計算エンジンが自動的に移動させるに任せてみるとどうなるでしょうか。
2
+ Bulletが新たに作られたとき、BulletのStartの中で`GetComponent<Rigidbody2D> ().AddForce (transform.up.normalized * st.GetBulletSpeed(),ForceMode2D.Impulse);`で初速度を与えているご様子ですが、Impulseは力積を意味し、その前の引数として与えるべきは弾の運動量の変化量になるかと思います。
3
+ 試しにここのImpulseをVelocityChangeに変えてみて、さらにUpdateの中の`transform.position += pp.GetMoveVector ();`はコメントアウトしてしまい、一旦Startで初速度を与えたらUpdateでむやみに動を操作せずに物理計算エンジンが自移動させるに任せてみるとどうなるでしょうか。
5
4
  最初に「弾を置き去りにしてしまった」という動きをしたのも、弾の質量が大きすぎて実際の初速度がかなり小さくなってしまったためかもしれません。