質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4207閲覧

物を投げる時の反動(作用反作用)の表し方【Unity】

tokiwokakeru

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/07/20 16:46

前提・実現したいこと

物を投げたり発射した時に、その反動で移動させたいです。
例えば、ツルツルの床でボールを投げたら、その逆の方向に人が進むようにしたいです。

どのような機能を使って作用反作用を表すのでしょうか?

参考動画
↓0:35 あたりからの内容
【物理エンジン】お金を噴射して飛んだら、いくらで宇宙まで行けるのか

↓0:25 あたりからの内容
【物理エンジン】摩擦がなかったらおならで前進できるのか?

該当のソースコード

これは砲弾を発射するだけのスクリプトです。
エラーは出てませんが一応載せました。

C#

1public class ShotShell : MonoBehaviour 2{ 3 4 public GameObject shellPrefab; 5 public float shotSpeed; 6 public AudioClip shotSound; 7 8 void Update() 9 { 10 11 // もしもSpaceキーを押したならば 12 if (Input.GetKeyDown(KeyCode.Z)) 13 { 14 15 // 砲弾のプレハブを実体化する。 16 GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity) as GameObject; 17 18 // 砲弾に付いているRigidbodyコンポーネントにアクセスする。 19 Rigidbody shellRb = shell.GetComponent<Rigidbody>(); 20 21 // forward(Z軸)の方向に力を加える。 22 shellRb.AddForce(transform.forward * shotSpeed); 23 24 // 発射した砲弾を3秒後に破壊する。 25 Destroy(shell, 3.0f); 26 27 } 28 } 29} 30

試したこと

砲弾を発射するスクリプトを書きました。
それを適当な親オブジェクト(Cube)の子オブジェクトに設定しました。

床や親オブジェクトの摩擦を0にして砲弾を発射しましたが、作用反作用は起こらず、
今のところ、ただの弾が出る物体です......。

Unityにおける反動の事を調べましたが、参考になるサイトが見つかりませんでした。

もしかして、反動(作用反作用)のような機能は、あらかじめ計算して、反動で動いたかのように見せるのでしょうか...?

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多分「無い」というか「自分で求めて与える」となると思います。

まず「作用・反作用」は2物体間で発生します。
例えば「床」と「ボール」があって、ボールは床の上に乗って静止しているとします。
この時、「重力によりボールが床を押す力(作用)」と「ボールが床から押される力(反作用)」が釣り合っている為に静止しています。
これについては「物体の衝突に伴う移動」という形でUnityも計算してくれます。

一方、AddForceはある1つの物体に力を与える処理です。多分現実的には存在し得ない状況です。
例えば「弾」と「砲台」があって、弾にAddForceしたとしても、その力には弾にしか影響しない為に砲台は全く力を及ばされません。単体へ力を与える行為なので弾自身に反作用も生じません(多分)。
これが「弾」と「押出し機」で、押出し機にAddForceすることで押出し機が動く→それにぶつかった(押された)弾が動く、だったら押出し機と弾との間に作用・反作用が生じると思います。
(「ツルツルの床の上で物を投げる」はこちらで実験可能かと思います。「物にAddForce」ではなく「手にAddForce」です)

なお、所謂銃や大砲などの「反動」は、弾が飛んで行く力の反作用というよりも、「弾を発射する為に起きる火薬の爆発等により生じる力」になります。(「自由反動(Wikipedia)」というそうです)
これをUnityで再現したいなら、弾にAddForceするのと同時に銃身にもAddForceするのが一番手っ取り早いかなぁと思います。
なのでこちらの場合は質問者さんの言う通り「あらかじめ計算して、反動で動いたかのように見せる」になるんじゃないかと思います。

投稿2019/07/21 07:00

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokiwokakeru

2019/07/24 00:24

反動を再現することができました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問