[Unity]物理演算でオブジェクトを動かそう

 

■前回の記事はこちら

 

 

●[Unity]物理演算でオブジェクトを動かそう

前回はなるべく難しくないように必要なことしか説明しないと思って書きましたが、それでも予想外の出来事にあったりしてハードルが一気に上がってしまった。

予想外の出来事、Auto Generateです。こんな機能昔はなかったのに…

 

 

 

■NewSceneを作成

NewSceneをパパっと作ってしまいましょう。

上部のメニューから/File/New Scene/

シーン名は[Scene002]です。

 

その後、Cubeを配置しましょう。配置したらこのような画面になると思います。なんだかCubeが黒い?暗いですね。どうやらNewSceneでシーンを作るたびにライティングがおかしくなるみたい。めんどくさい。でも愚痴ばかり言ってられないのでやりまっしょい。

 

■Auto Generateにチェックを入れる

前回にもさらっと説明しましたが、Auto Generateの項目にチェックが入ってない場合はライティングの自動更新がされないみたいです。

表示されたコンテンツの下の方に Auto Generate チェックボックスがあります。これを有効にすると、シーンを編集しながら、ライトマップデータを更新することができます。通常、更新は瞬時に起こるのではなく、2 - 3 秒かかってしまう点に注意してください。 Auto Generate box を無効にすると、チェックボックスの右側にある Generate Lighting ボタンが有効になります。必要に応じて、このボタンでライトマップの更新を発生させます。 GI キャッシュ をクリアせずにシーンからベイクしたデータをクリアしたい場合には、 Generate Lighting ボタンを使用します。(Unity説明書より)

 

 

 

/window/Rendering/LightingSetting/ のAuto Generateにチェックを入れよう。

これでライティングの自動更新が完了しました。

 

 

 

 

 

 

このように明るさが元にもどりました。

 

 

 

 

 

次にHierarchyウインドウでPlaneを作成しましょう。

 

 

 

このようになりました。PlaneとCubeが重なっているので。Cubeを上に移動させましょう。CubeをクリックしてInspectorウインドウのTransform項目を設定しましょう。Transformとはオブジェクトの現在の位置を示す項目です。

CubeをX:0 Y:3 Z:0にします。PlaneはX:0 Y:0 Z:0にします。

 

 

このようになりました。次は物理演算の設定を行います。

 

 

 

■CubeにRigidbodyを反映させよう

●Rigidbodyとは?

Rigidbody を使うと、ゲームオブジェクト を物理特性によって制御する事ができるようになります。リジッドボディに力やトルクを加えると、オブジェクトをリアリスティックに動かすことができます。重力の影響を加えたり、スクリプトを使って力を与えたり、NVIDIA PhysX 物理エンジンを通して他のオブジェクトと相互作用させるためには、ゲームオブジェクトにリジッドボディを加える必要があります。(Unity説明書より)

簡単に言えば、Rigidbodyをオブジェクトに反映させれば物理演算が使用できるよってことです。では反映させましょう。

 

 

 

 

Cubeをクリックして、/Component/Physics/Rigidbodyをクリックします。CubeのInspectorウインドウを見てみましょう。

 

 

 

 

InspectorウインドウにRigidbodyの項目が追加されました。

詳細説明はこちら

 

●Mass:物体の質量 (Kg 単位)

●Drag;力によって動く際に、オブジェクトに影響する空気抵抗の大きさ

●Angular Drag:トルクによって回転する際に、オブジェクトに影響する空気抵抗の大きさ

●UseGravity:有効にすると、オブジェクトは重力の影響を受けます。

●Is Kinematic:有効にすると、オブジェクトは物理エンジンによって駆動されず、その Transform によってのみ操作されます

●Interpolate:リジッドボディの動きがぎこちないとき、以下のオプションの 1 つを利用すると改善する場合があります。

 

なんだか難しそうです。百聞は一見に如かず、とりあえず確認して見てみましょう。

 

 

 

 

Gameの再生ボタンを押してみましょう。赤丸で囲ってある場所です。これを押すとGameが開始されます。

 

 

 

 

Game開始時のGIF。このようにRigidbodyを反映させることによって重力がかかり下に落ちていきました。でもなんだか味気ないですね。跳ねたりしないの?とか思いますよね。更に追加するコンポーネント次第ではスーパーボールみたいに跳ねさせることも可能です。ではやってみましょう。

 

 

 

■Physic Materialを反映しよう

●Physic Materialって何?

物理特性マテリアル

物理特性マテリアル は、衝突するオブジェクトの摩擦や跳ね返り効果を調整するのに使用されます。

物理特性マテリアルを作成するには、メニューバーから Assets > Create > Physic Material を選択します。次に、シーン内の Collider にプロジェクトビューから物理特性マテリアルをドラッグします。(Unity説明書より)

 

 

 

Assets > Create > Physic Materialを選択することで新しいPhysic MaterialProjectウインドウに追加されました。

 

 

 

 

使い方はInspectorウインドウで詳細設定をしたあと、前回のMaterial同様にドラッグ&ドロップすることで反映することできます。詳細を見ていきましょう。

 

■Dynamic Friction : 移動している物体に対する摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力や重力がオブジェクトを押さない限り、すぐに止まります。

■Static Friction: 面上で静止しているオブジェクトに使用される摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力を加えないとオブジェクトは動きません。

■Bounciness : 表面にどれだけ弾性があるか。0 の場合は弾性がありません。1 の場合はエネルギーが減ることなく跳ねます。シミュレーションには少量のエネルギーを加えるかもしれませんが、ある程度の近似が予想されます。

■Friction Combine : 衝突するオブジェクト間の摩擦をどう処理するか。

- Average : 2 つの摩擦力が平均化されます。

- Minimum : 2 つの摩擦力のうち小さい方の値が使用されます。

- Maximum : 2 つの摩擦力のうち大きい方の値が使用されます。

- Multiply : 2 つの摩擦力が互いに乗算されます。

■Bounce Combine : 衝突するオブジェクト間の跳ね返し度合いをどう処理するか。Friction Combineと同じです。

 

 

 

●NewPhysicMaterialをこのように変更してください。その後InspectorウインドウのCubeにドラック&ドロップで反映させてください。

 

 

 

正しく反映されたら、このようになります。赤丸の部分に追加されていることがわかります。では再びGameの再生ボタンを押してみましょう。

 

 

跳ねましたね!ぴょんぴょんです。

では最後にちょっとしたお遊びをしてみます。

 

 

オブジェクトを複数作りこのように配置しました。

青色はSphereです。これもHierarchyウインドウで追加することができます。

 

 

あとPlaneを2枚作り。一つは斜面になるように設置しています。TransformRotation項目のXを-45にしました。斜面の上部に複数のCubeとSphereを配置しています。ではこれでGame再生してみましょう。

 

 

 

こんな感じになりました。物理演算が反映されたオブジェクトはお互いに衝突することによって、跳ね返る方向が変わりますね。

 

 

物理演算の練習は以上で終了です。

使い方次第では色々なゲームに応用できます。有名どころではアングリバードなどは物理演算を使用して作成されています。何か面白そうなゲーム思いつきましたか?次回は簡単なゲーム一本作っちゃいましょう。これがクリアできればUnityで何ができるのかがおおよそ検討がつくと思います。

 

 

次回は[射撃ゲームを作ろう]です。次はC#のスクリプトが少々絡んできます。

 

 

---------------------------------------------

すこしでも役に立ったら、💛イイネよろしくお願いいたします!

クリプトピアでALISトークンGOXした馬鹿野郎に投げ銭のお恵みもください(´;ω;`)

 

 

 

■Unityの過去記事一覧です。

 

 

 

---------------------------------------------

 

著者:Umi

Unityでたまーにゲーム作ってます。

Unity歴は一応8年。プログラムはあまり詳しくありません。

 

 

---------------------------------------------

 

 

公開日 いいねによる獲得 投げ銭による獲得 サポーター
: : :
2019/06/09 9.84 ALIS 0.00 ALIS
Umi's icon'
  • Umi
  • @Umikawa
絵?ゲーム?
コメントする
  • kobsap
  • 16日前

物理エンジン面白そうですね〜
いつか使ってみたいです。

意外だったのは、質密ではなくて massを入れるんですね〜

返信
コメントする