Unityでモンキーハンティングの確認
高校で習った物理で、式の上では理解していても、実際に確かめたことはないものが多いですよね。そのような物理現象を、Unityの物理エンジンで確かめたらおもしろいのではないかと思い立ちました。(物理を習ったのは大昔で、Unityも初心者なので、いろいろ突っ込みどころがあるかもしれません。)
今回はモンキーハンティングです。木の枝にぶら下がったサルに銃の照準を合わせ、引き金を引くと、銃声に驚いたサルが枝から手を放して落下するとします。このとき、銃弾は落下中のサルに必ず命中するという話です。物理の授業で教わりましたが、実験したことはありません。では、さっそくやってみましょう。【A】
当たった!
ちなみに、弾丸はどんなに遅くても当たります。(地面に落ちるより前に当たる必要はある。)【B】
モンキーハンティングを実際に試そうとすると、かなり大がかりな装置が必要ではないでしょうか。Unityなら数十分でできました。次は何を試そうかな~
[付録] Unityオブジェクト設定
今回作成した主なオブジェクトの設定を記載します。
■サル(Sphere)のコンポーネント設定(記載なしのものはデフォルト)
コンポーネント | 設定 | 備考 | |||
A | B | ||||
Transform | Position | X | 30 m | ||
Y | 30 m | ||||
Z | 0 m | ||||
Rigidbody | Mass | 1 kg | |||
Use Gravity | チェックあり |
■弾丸(Sphere)のコンポーネント設定(記載なしのものはデフォルト)
コンポーネント | 設定 | 備考 | |||
A | B | ||||
Transform | Position | X | 30 m | ||
Y | 30 m | ||||
Z | 0 m | ||||
Rigidbody | Mass | 1 kg | |||
Use Gravity | チェックあり | ||||
Script | 初速 | 25 m/s | 15 m/s | C#スクリプトのStart()で設定する。 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BulletScript : MonoBehaviour { public Transform monkeyTransform; //サルのTransform public float v0; //弾丸の初速 // Use this for initialization void Start () { // 銃からサルに向かうベクトルを計算 Vector3 monkeyDir = monkeyTransform.position - GetComponent<Transform>().position; monkeyDir.Normalize(); //ベクトルを正規化(大きさを1にする) // 弾丸の初速を設定 GetComponent<Rigidbody>().velocity = v0 * monkeyDir; } }