何となく以前に作ったロケットをRigidbody2Dでリメイクしました。
素材やアセット・スクリプトは使用せず、全てアリものだけで作っています。
以前はRigidbody2DのJointにBreakable設定やConstant Force2Dが無かったのでRigidbody2Dでは作れませんでしたが、いつだったか追加されたので、作ってみました。
作り方(ログ)
作り方について、何かの役に立つかもしれないのでメモしておきます。
地面を作る
まず地面を作りました。ただ通常のボックスを引き延ばすと非常に見た目が悪いので、uGUIのImageにBox Collider 2Dを付ける形で作成しています。Unity 5.4からスプライトの9スライスが来るので、それが来たらもう少し楽に…
CanvasはWorldSpace設定で、CanvasScalerとかは付けませんUIでは無いので。大きさは初期状態だと大きすぎるので、Scaleで小さくします。
初期状態ではBoxCollider2Dを割り当てても自動的に大きさを設定してくれないので、自分で大きさを調整します。
大きさ的にはRectTransformのWidth/HeightとBox Collider2DのSizeが一致すれば概ねサイズは一致します。
ロケットを作る
次にロケットになるスプライトを作りました。
Coreを中心にB1~B6まで適当に。名前は一意にして、アイコンを表示するように設定して置きます。こうしないとブロック毎に繋げるのが面倒くさいです。
アイコンはInspectorから変えられます。何故か一括で変えられないので、ブロックを量産する前に変更しておくのがお勧めです。
物理演算で折れる
ダメージを受けたらポキっと折れるようにします。
まずはRigidbodyをCoreと各ブロック(B1とかB2と名前が付いてる物全て)にRigidbody2Dを設定します。
終わったらFixedJoint2DをB1~B6まで設定して、Conected Rigidbodyに接続先の(隣接する)ブロックを設定します。
この時、ブロックにアイコン付けてないと凄い面倒なので、アイコン付けてない場合はご愁傷さまです。
Break Forceで「耐久性」を設定できるので、そこそこ高めに設定して置きます。低いと何も衝撃が無くても折れます。
Berak Forceを高めに設定すると、衝撃や圧力を与えた時に折れるようになります。一本の矢で折れぬなら2本の矢を…
推進力を与える
エンジンを追加します。
スクリプト推進の変わりにConstant Force 2Dを追加します。
Relative Forceを使設定すると、そっちの方向に対して力を加えてくれます。
ついでに推進方向にパーティクルを出力しておくと良い感じです。Unityエディタに標準で付いてくるパーティクルエフェクトにバーニアがあるのでソレを使えば良いかもしれませんが、まぁどうせ適当な物ですし適当に。
あとは推力を調整して飛ばします。
全体の重量的に推力が足りなければ飛ばないですし、水力が超余裕であると凄い飛んでいきます。
バランスが悪いと飛びません。(下のアニメでは、エンジンの水力を少しずつ調整して動きを見ています)
映画アイアンマン1のアイアンスーツ開発中はこんな感じの飛行テストを繰り返してたんじゃないかなぁ…
物理演算パズル
ツムツムやAngrybirdのような物理演算ありきのパズルは、「同じ動きを再現することが難しい」半面、予想外のことが起こったりして色々と面白いです。
完璧にバランス調整したゲームを作る場合は向いてないですが、こういった大雑把な楽しみ方が出来るゲームには中々に面白いんじゃないかなと。