LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Unityで「おきあがりこぼし」を作ってみる

PONOS Advent Calendar 2020の14日目の記事です。
昨日は@nissy_gpさんの「オーストラリアのサマータイムからtz databaseを読み解く」でした。

はじめに

今日はUnityで「おきあがりこぼし」を作ったお話をさせていただきます。
daruma5.png
おきあがりこぼしとは、倒そうとしても倒れない人形のことです。

ストレス解消の「パンチングバルーン」と呼ばれるものも仲間ですね。
我が家にもアンパンマンの玩具があったなぁと探してみたのですが、流石にもう捨ててしまったたようです。

ちなみに英語で「Roly-poly toy」だそうで、韻を踏んでていい感じ。

作ってみる

不意にそのおきあがりこぼしを作ってみたくなりました。
リアルに工作してもいいのですが...今回はUnityの画面上で表現してみます。
頭に描いたイメージを気軽に形にできちゃうってのはUnity最大の魅力ですよね!

Prefabの構造

既に完成形ですが、RolyPolyToyと名付けたPrefabです。
スクリーンショット 2020-12-14 9.58.06.png
親の「RolyPolyToy」という空オブジェクトの子要素に「Body」、孫要素に「Weight」を配置します。
スクリーンショット 2020-12-13 15.12.12.png
※Unity標準の3D Objectですが、構造が把握しやすいよう半透明にしています。下部の黒い球体が重りです。

Inspectorの設定

それぞれの設定は以下の通りです。

RolyPolyToy ・・・ Transformだけの空オブジェクトです。初期位置を浮かせています。
スクリーンショット 2020-12-13 15.18.51.png

Body ・・・ 本体になります。CapsuleにRigidbodyを追加しています。
スクリーンショット 2020-12-13 15.31.13.png

Weight ・・・ 重りになります。SphereにRigidbodyとFixedJointを追加しています。
スクリーンショット 2020-12-14 9.58.27.png

ポイントは、以下の2点。
1.WeightのRegidbody.MathをBodyより明らかに大きな値にする
2.WeightにFixedJointコンポーネントを追加し、Bodyとジョイントする

UnityのJointクラスの中にあるFixedJointを使いましたが、Rigidbodyを持つオブジェクト同士を繋ぐことができます。ジョイントしないと、Rigidbodyを持ったオブジェクトはそれぞれバラバラになります。
https://docs.unity3d.com/ja/current/ScriptReference/Joint.html
(他にもバネのように伸び縮みするSpringJointや、関節のようなHingeJointなどがあります。)

あと、カプセル形状の場合は、重りの中心点をなるべく外側に配置することも重要です。下図でいうとマゼンタの線より内側に配置した場合は横に倒れたまま起き上がりませんが、この挙動は現実の事象と同じですね。
スクリーンショット 2020-12-13 16.34.12.png

重りを視覚化していましたが、WeightのMeshRendererとSphereColliderは不要なのでOFFにしましょう。
スクリーンショット 2020-12-14 9.56.24.png

完成形

スクリーンショット 2020-12-13 16.45.30.png
パンチングバルーン的な物体が揺れながら立ち上がります。
動画でお見せできないのが残念ですが、イメージ通りのものができました!

他にも実現する方法はあるでしょうけど、UnityのPhysicsを使ったお手軽な方法として紹介しました。

以上

明日は@loveRiceさんです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0