【Unity】ノーコードでシーソーを作る!
Unityでキャラクターが乗ったら傾くお手軽なシーソーを作りたい!
というわけでRigidbodyの設定だけで実装できましたのでご紹介します。
シーソーのオブジェクト
まずは肝心なシーソーの板を用意します。
私の場合はウエハース?ですが長細い板であれば何でもいいと思います。
デフォルトのCubeのサイズを変更したものでもオーケーです。
インスペクターにて、
Add ComponentからRigidbodyを追加します。
この時に何かしらのコライダーのアタッチも忘れずに。
(だいたいBoxCollider)
Rigidbodyの設定
Rigidbodyの設定を以下のようにします。
Massの値が2000になってますが、シーソーの上に乗っかるオブジェクト側のRigidbodyのMassの値によって変動するので、ここは調整が必要です。後ほど説明します。
Angular Dragを1にして回転の勢いに抑制をかけます。ここも作るゲームによって調整を。
ConstraintsのFreeze RotationのX軸以外にチェックを付けます。こうすることでシーソーをその場に固定してX軸のみで回転させるようにします。オブジェクトの向きによってはXでないかもしれないので、動かしてみて確認してみてください。
床の設置
続いて床を設置します。↓
床(コライダー)がないと当然ながらシーソーが360度回転してしまいます。
なので床はシーソーの回転のストッパーとしての役割を果たしています。
シーソーの高さや床はゲームに応じて…
そしてシーソーの中心下に何かオブジェクトを配置したほうがシーソーがどこを中心に動くか視覚的にわかりやすいですね。
これはロールケーキ。
私の場合はゲーム上、このままだとプレイヤーが段差のせいでシーソーに乗れないのでスロープを用意しました。
完成品
これでRigidbody付きのオブジェクトが上に乗っかればシーソーが動くはずです。こちらが完成したシーソーです。
先ほどのRigidbodyのコンポーネントにてMassの値が2000となっていましたが、これは操作するプレイヤーのRigidbodyのMass値が3000になっているためです。(フォークリフトのリアルな重さを基準にしています。)
シーソーのMass値が軽すぎるとものすごい勢いで回転してえらいことになるので…
最後に
ゲームによってはスクリプトで制御したほうがいいものもあるとおもいます。
プレイヤー以外には反応してほしくない、プレイヤーが乗るまでは動いてはいけないなど。
今回はこれで十分だったのでRigidbodyによる物理演算のみで実装しました。今後スクリプトによる制御なんかが必要になった時はまた記事にしたいと思います。