WEBVTT 00:00:00.000 --> 00:00:01.931 一般的なルールとして、もしゲームの中で 00:00:01.931 --> 00:00:03.931 移動するゲームオブジェクトを使用する場合 00:00:03.931 --> 00:00:05.058 Rigidbody オブジェクトとする 00:00:05.058 --> 00:00:06.685 べきです。 00:00:07.185 --> 00:00:09.185 Rigidbody は ゲームオブジェクトが物理挙動(Physics)により 00:00:09.185 --> 00:00:11.365 影響を受けるためのコンポーネントです。 00:00:11.365 --> 00:00:13.365 オブジェクトが重力により落下し、 00:00:13.365 --> 00:00:15.809 重量(Mass)、抵抗(Drag)、速度(velocity) 00:00:15.809 --> 00:00:17.406 などといった物理挙動のプロパティをもちます。 00:00:17.906 --> 00:00:19.423 Rigidbody コンポーネントをゲームオブジェクトに 00:00:19.423 --> 00:00:22.029 追加すると、そのオブジェクトを Rigidbody オブジェクトと 00:00:22.029 --> 00:00:23.808 呼ぶことがよくあります。 00:00:24.128 --> 00:00:26.183 Rigidbody コンポーネントはあらゆる物理挙動の伴う相互作用に 00:00:26.183 --> 00:00:28.337 必要であり、ゲームオブジェクトは 00:00:28.337 --> 00:00:30.337 コライダをアタッチしないと 00:00:30.337 --> 00:00:33.059 他の物理挙動のあるオブジェクトと相互作用できません。 00:00:33.227 --> 00:00:35.840 Rigidbody がないと powerCube 00:00:35.840 --> 00:00:37.394 は宙に浮いたままです。 00:00:37.604 --> 00:00:39.604 しかし、Rigidbody を追加したときに何が起きるかみてみます。 00:00:39.828 --> 00:00:41.677 他のコンポーネントと同様に 00:00:41.677 --> 00:00:43.277 インスペクタの最下部にある Add Component ボタンを使用するか 00:00:43.277 --> 00:00:45.444 トップメニューの 00:00:45.444 --> 00:00:46.941 Component メニューを使用します。 00:00:47.123 --> 00:00:49.123 Physics セクションの配下でみつけることが出来ます。 00:00:51.129 --> 00:00:53.129 これでゲームオブジェクトは重力により落下し、 00:00:53.129 --> 00:00:55.129 物理エンジンおよび加えられた力により 00:00:55.129 --> 00:00:57.129 制御されます。 00:00:57.449 --> 00:00:59.449 Rigidbody にはさまざまなオプションがあります。 00:00:59.645 --> 00:01:01.840 最初にゲームオブジェクトの Mass 00:01:01.840 --> 00:01:04.312 Drag, Angular Drag が制御できます。 00:01:04.312 --> 00:01:06.409 オブジェクトの Mass により 00:01:06.409 --> 00:01:08.006 オブジェクトの衝突の処理方法に影響します。 00:01:08.299 --> 00:01:10.299 Mass の大きいゲームオブジェクトほど 00:01:10.299 --> 00:01:12.467 Mass の小さいゲームオブジェクトと衝突したときに 00:01:12.467 --> 00:01:13.433 小さな作用をします。 00:01:13.671 --> 00:01:15.574 ゲームオブジェクトの Drag は 00:01:15.574 --> 00:01:17.200 他の作用がない場合にどれぐらい早く減速するかに 00:01:17.200 --> 00:01:18.269 影響します。 00:01:18.507 --> 00:01:20.410 空気抵抗と考えると良いです。 00:01:20.634 --> 00:01:22.717 これは線形の速度の減少割合を決めるのに 00:01:22.717 --> 00:01:24.213 使用されます。 00:01:24.492 --> 00:01:26.629 同様にして、Angular Drag はゲームオブジェクトがいかに 00:01:26.629 --> 00:01:28.379 Angular Velocity、すなわち 00:01:28.379 --> 00:01:30.379 どれぐらい早く回転速度を減速するかにも 00:01:30.379 --> 00:01:31.931 影響します。 00:01:32.196 --> 00:01:34.154 例えば、もしオブジェクトにトルクを加えて 00:01:34.154 --> 00:01:35.904 回転させる場合、 00:01:35.904 --> 00:01:37.904 Angular Drag はこの力に抵抗を 00:01:37.904 --> 00:01:40.110 作ります。次のオプションは 00:01:40.110 --> 00:01:41.433 ゲームオブジェクトが重力(Gravity)により影響を受けるかどうか 00:01:41.433 --> 00:01:43.071 です。 00:01:43.532 --> 00:01:46.522 このチェックボックスを有効にすることにより重力を使用します。 00:01:47.602 --> 00:01:49.608 重力の設定については 00:01:49.608 --> 00:01:54.419 Unity の Edit - Project Settings - Physics メニューにてみることができます。 00:01:55.122 --> 00:01:57.513 みてのとおり 3 次元のベクトルであり 00:01:57.513 --> 00:01:59.126 デフォルトでは現実世界と同様 00:01:59.126 --> 00:02:01.557 -9.81 という値です。 00:02:02.027 --> 00:02:04.441 ここでグローバルにカスタマイズすることが出来るため 00:02:04.441 --> 00:02:06.880 興味深いエフェクトを作ることが出来ます。 00:02:07.380 --> 00:02:09.655 例えば横スクロールゲームでの弱い重力とか 00:02:09.655 --> 00:02:11.655 パズルゲームの一部として 00:02:11.655 --> 00:02:13.082 様々な軸として使用することさえ出来ます。 00:02:13.181 --> 00:02:16.065 例えば、 Z 軸に 5 という値を 00:02:16.065 --> 00:02:18.065 重力に加えてみましょう。 00:02:20.250 --> 00:02:22.134 これで powerCubet はグローバル空間座標での Z 軸に 00:02:22.134 --> 00:02:24.134 向かって引っ張られます。 00:02:25.905 --> 00:02:28.417 Is Kinematic オプションにより 00:02:28.417 --> 00:02:30.925 Rigidbody が物理挙動に対して反応するか決定します。 00:02:31.113 --> 00:02:33.782 通常、シーンが開始するときすべての static な物体、 00:02:33.782 --> 00:02:36.969 つまり、Rigidbody のないオブジェクトは 00:02:36.969 --> 00:02:39.202 物理エンジンによりチェックされ 00:02:39.202 --> 00:02:41.202 パフォーマンスのためそれ以降はチェックされません。 00:02:41.202 --> 00:02:43.202 しかし、もし static オブジェクトを移動した場合 00:02:43.202 --> 00:02:45.966 物理エンジンは再度すべての static オブジェクトを 00:02:45.966 --> 00:02:48.383 正確性の観点で再チェックを行い、 00:02:48.621 --> 00:02:50.621 これはパフォーマンスにとって負荷となります。 00:02:51.047 --> 00:02:53.752 これを回避するため、 Kinematic Rigidiby オブジェクトを使用して 00:02:53.752 --> 00:02:55.419 その Transform を通して 00:02:55.419 --> 00:02:57.282 Translate 関数を使用して移動させることが出来ます。 00:02:57.546 --> 00:02:59.546 これはつまり Physics オブジェクトについて 00:02:59.546 --> 00:03:02.950 他にオブジェクトに影響するけれども自身には影響しないものを作成することが出来ます。 00:03:03.229 --> 00:03:05.229 分かりやすい例は 00:03:05.229 --> 00:03:08.018 Pong または Breakout といったスタイルのゲーム(※アルカノイドのような)でのパドルがあります。 00:03:08.753 --> 00:03:11.778 このサンプルでは Rigidbody powerCube は 00:03:11.778 --> 00:03:13.778 Use Gravity オプションがチェックされています。 00:03:14.154 --> 00:03:17.420 Play ボタンを押下すると、オブジェクトは地面に落下します。 00:03:18.238 --> 00:03:21.349 さらに丸い prop_samoflange Ball オブジェクトがあり、同様のコンポーネント設定を 00:03:21.349 --> 00:03:23.349 となっています。 00:03:24.650 --> 00:03:27.220 もし powerCube に重力がない場合 00:03:28.922 --> 00:03:30.922 その下に落ちませんが、 00:03:30.922 --> 00:03:32.783 他のオブジェクトにより影響されます。 00:03:33.242 --> 00:03:35.061 もし他のオブジェクトにより影響されたくない場合 00:03:35.061 --> 00:03:38.313 Is Kinematic を使用することができます。 00:03:42.142 --> 00:03:44.543 前述のとおり オブジェクトはその Transform を通して 00:03:44.543 --> 00:03:46.833 動かすことが出来ます。このシンプルなスクリプトを 00:03:46.833 --> 00:03:49.274 使用して Tranlate 関数を使用して 00:03:49.274 --> 00:03:51.801 毎フレームごとに 00:03:51.801 --> 00:03:54.549 forward 方向に移動できます。 00:03:56.858 --> 00:03:59.387 みてのとおり、オブジェクトは 00:03:59.387 --> 00:04:02.084 他のオブジェクトと相互作用しますが 00:04:02.084 --> 00:04:04.447 Rigidbody のままであるため、 00:04:04.447 --> 00:04:06.280 物理エンジンに現在位置を伝えて 00:04:06.280 --> 00:04:08.128 物理エンジンが 00:04:08.128 --> 00:04:10.128 シーン全体を再評価しないようにします。 00:04:10.628 --> 00:04:13.041 Interpolate および Extrapolate は 00:04:13.041 --> 00:04:14.859 揺らぎ(Jitter)を回避します。 00:04:14.986 --> 00:04:16.723 もしオブジェクトのわずかな動きが 00:04:16.723 --> 00:04:19.221 Rigidbody により動かす時に発生する場合 00:04:19.221 --> 00:04:21.451 Interpolate 設定を使用することで 00:04:21.451 --> 00:04:23.827 前フレームにもとづいた Transform 動作のスムージングを 00:04:23.827 --> 00:04:26.061 行ないます。そして Extrapolate 設定により 00:04:26.061 --> 00:04:27.866 次フレームの位置予測にもとづいた 00:04:27.866 --> 00:04:29.368 スムージングを行ないます。 00:04:29.368 --> 00:04:31.094 次の設定は 00:04:31.094 --> 00:04:33.527 衝突判定(Collision Detection)のタイプです。 00:04:33.527 --> 00:04:35.527 Discrete, Continuous, および Continuous Dynamic があります。 00:04:36.085 --> 00:04:38.002 デフォルトは Discrete であり、 00:04:38.002 --> 00:04:40.542 問題ないかぎり Discrete を使用するべきです。 00:04:41.125 --> 00:04:43.125 Continuous は高速のオブジェクトで 00:04:43.125 --> 00:04:46.053 static な物体と相互作用がある場合に使用します。 00:04:46.318 --> 00:04:48.944 Continous Dynamic は高速なオブジェクトで 00:04:48.944 --> 00:04:50.820 他の Dynamic オブジェクトと相互作用がある場合に 00:04:50.820 --> 00:04:52.388 使用します。 00:04:52.971 --> 00:04:54.846 最後に Rigidbody コンポーネントの Constraints セクションにより 00:04:54.846 --> 00:04:56.846 オブジェクトの動作または回転の 00:04:56.846 --> 00:04:58.846 物理挙動を制限させることが 00:04:58.846 --> 00:05:00.846 できます。例えば、 00:05:00.846 --> 00:05:02.846 もしテトリスのようなゲームがあった場合 00:05:02.846 --> 00:05:04.846 ゲームのブロックが落下するときに 00:05:04.846 --> 00:05:07.168 回転させる必要があります。 00:05:07.168 --> 00:05:09.502 ここの Rotation Constraints を使用することで制限すべきです。 00:05:10.193 --> 00:05:12.635 このサンプルでは powerCube は 00:05:12.635 --> 00:05:15.026 workbench 上に落下します。これは Rigidbody であり 00:05:15.026 --> 00:05:17.026 Use Gravity が有効化されています。 00:05:17.995 --> 00:05:19.995 標準どおり、次のように落下します。 00:05:20.302 --> 00:05:23.130 もし落下するについれて回転させたくない場合 00:05:23.130 --> 00:05:26.053 Constraints のなかで回転をフリーズすることが出来ます。 00:05:26.553 --> 00:05:29.815 これで落ちるときに回転が発生しません。 (翻訳:gamesonytablet)