ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

自動連結器

今日は自動連結器づくり。できればすべて物理シミュレーションで動くようにしたいけど、さすがに無理かなあ。でもまずはチャレンジ。以下、メモ。

可動範囲

自動連結器は前後・左右方向に緩衝器がある。しかし、この可動範囲が分からない。日本大百科全書の図から、前後左右それぞれナックル1個分にしてみようか。

kotobank.jp

ロック(錠)

ロックピンは、ナックルの動きを邪魔したり開放したりすることでロック機能を実現する。これだけならUnityでシミュレーションできる気がするけど、並形自動連結器のロックピンはロック解除するとナックルが開くまでピンが解除位置に留まるという機能がある。

f:id:donadonasan:20190816154150p:plain

ロックピン端部の形状(https://www.youtube.com/watch?v=Z8gd4jh_V88より)

このへんの機構は、以下の動画がすごく勉強になりました。ありがとうございます。

www.youtube.com

でも、このへんをUnityの物理演算だけで実現しようとするとチューニングが大変なので、ここはC#で実現することにする。すなわち、ロックピンの状態として

  • Open (ロックピンはナックルの上に乗っておりナックルの動きを制限しない)
  • Close(ロックピンはナックルの横に落ちており動きを制限している)
  • ForcedOpen(ロックピンは端部突起に引っかかっておりナックルの動きを制限しない)

の3つを定義し、ロック解除時の状態遷移は下記とする。

  1. ロックピンを持ち上げる。(Open, Closeの判定は毎フレーム実施)
  2. ロックピンの状態がCloseからOpenとなったら、ForcedOpenに変更し、ロックピンの位置を固定する。
  3. ナックルがある程度開いたら、ForcedOpenからOpenに変更し、ロックピンの位置固定を解除する。

これでたぶん行ける。