一般的には極めて需要はないと思うので、自分用の覚書として残しておく
例によって、パチンコアプリの制作中
パチンコ自体知らないとまったく意味不明だろうが・・・
いや、ピンボールゲームを作る際の、玉を発射した後に発射通路に玉が戻ってこないようにするようにはしたいのではないだろうか・・
おそらく応用は聞くのではと・・
ということで、完成品イメージ
画質の関係で分かりづらいが、発射した玉は、戻り防止弁により、発射後は発射通路に戻ることはない(たぶん)
ということで、実装方法を書き残しておく
○用意するもの
Unityの3Dオブジェクト
- Cube 玉を跳ね返すシャッター部分
- Cylinder シャッターの軸部分
その他は割愛
○Untiy Editor上での設定
まずはCubeのサイズを調整して板状に
Cylinderもサイズ調整して、CubeはCylinerの子オブジェクトにして、Cylinderを軸にシャッターが回転するようにする
次に親オブジェクトのCylinderに、RigidBodyとHinge Jointを追加
◆設定のポイント
●RigidBody
・Mass、Drag、AnglarDrag
大き目の設定にしているが、正直正解はわからない
一つだけ言えるのは、Massを小さくすると、シャッター(Cube)に玉に接触した場合の
玉からの力の影響が大きく、軸を関係なく押されて回転ではなく、位置ごとずれるようになる
Use Gravityのチェックをオフにしているのに、影響あるのか疑問はわくが、おそらくMassが大きければ元の場にとどまる力が強くなるのだと思われる
・Constraints
Freeze Position、Freeze Rotationともにチェックを入れている
動いてほしくないからなのだが・・・
納得いかないのは、シャッター(Cube)に玉が当たると位置がずれてしまうんだよ、これが( 一一)
これはここ数か月いろいろ設定を試したが、何かに接触しなくても位置がずれていってしまうようなこともあり、Editor上の設定での解決方法はわからづじまい
●Hinge Joint
・ConnectedBody
シャッター(Cube)を設定
・Axis
Y軸中心に回転させたいので、Yのみに1を設定
・Spring
玉が当たった後に自動で元の角度に戻るようにバネを設定
・Limits
回転角度の制限を設定
Cubeの方には、Box ColliderとRigidBodyを追加
〇設定のポイント
とくにはない
軸はCylinderのHingeJointに連結しているためか、Constraintsをすべてフリーにしていても、Cylinderの軸を中止に回転だけするようなかたちとなる
修正忘れ
Massは0.005にしないと、玉の力の影響が強めに出て見た目が悪い
◎問題点
下記を見てほしい
画質が悪くわかりづらいが、玉が当たっているうちに軸の位置がズレてしまっている
ConstraintsでFreeze Positionにチェックを入れているにもかかわらず・・
う~ん
謎仕様
力がかかった時の影響は別扱いなのだろうか??
悩んだ挙句の末
スクリプトで対応
最初の位置を記憶しておき、玉が発射されるたびにズレをもとの位置に戻すようにした
最初はUpdate()で毎フレーム修正にしてみて、これが見た目ずれがないように見えるが、毎フレームというのが精神衛生的によくないので(負荷がとられる気がする)このようにしてみた
以上、今日はここまで