[UNITY]GearFactoryの使い方 | 『くつひも物語』開発日誌 #95

前提

GearFactoryは、UNITYで連動する歯車を実装するためのアセットです。

このアセットはアップデートが止まっているので、色々と不都合があります。

  • URPやHDRPでは正常に動作しません。
  • インポートしたフォルダを動かすとエラーを吐きます。
  • 私が作っているのは2Dゲームなので、3Dに関わる機能は一切試していません。
  • UNITYのバージョンが新しすぎてもダメかもしれません。
  • 私はUNITY 2021.3.10f1を使っています。

基本チュートリアル

歯車の設置

ヒエラルキーで右クリック > Create > Gear Factory > Gearから歯車オブジェクトを作成して、Gear1と名付けます。

このまま実行しても動きません。

マシンの設置

ヒエラルキーで右クリック> Create > Gear Factory > Machineからマシンオブジェクトを作成します。

Powered GearにGear1をアタッチして実行すると、歯車が動きます。

二つの歯車を連動させる

  1. 歯車をDuplicateして、Gear2と名付けます。
  2. Gear1とGear2をMachineオブジェクト配下に置きます。
  3. Gear2のDrivenByにGear1をアタッチします。
  4. 実行すると歯車がGear1とは逆に動きます。位置を合わせなくても動きます。
  5. 位置を合わせるには、AlignTeethWithParenttrueにします。
  6. その状態でX軸やY軸を調整すると、Gear1と噛み合う位置にしか移動できないことがわかります。
  7. 実行すると、きちんとかみ合っていることがわかります。
  • Gear2のRadiusを2にしても、AlignTeethWithParenttrueになっていれば、大きなGear2が小さなGear1とかみ合っていることがわかります。

噛み合う歯車を自動設定(AutoSetDrivenBy)

  1. Gear1をDuplicateしてGear3と名付けます。Gear1と重なっている状態でOKです。
  2. AlignTeethWithParenttrueにします。
  3. Gear3のAutoSetDrivenBytrueにします。
  4. 最も近い距離にあるGear1がDrivenByに自動でアタッチされました。
  5. Gear3のX軸をGear2方向に無理矢理動かしていくと、Gear2にスナップして、DrivenByが切り替わることがわかります。

Machineクラスのパラメーター

  • ShowPoweredByIndicator (bool):
    このオプションが有効の場合、ギアがどの親ギアによって駆動されているかを指す矢印を表示します。
  • PoweredGear (GFGear):
    このマシンが駆動する主要なギアを指定します。このギアの動きに基づいて、他のすべてのギアの回転が計算されます。
  • Reverse (bool):
    このオプションを有効にすると、すべてのギアの回転方向が逆になります。
  • AutoReverseOnReversedOrientation (bool):
    このオプションが有効な場合、ギアの向きが逆になったときに自動的に回転方向を反転させます。

以下、デフォルトでHideInInspectorになっているプロパティ

  • maxSpeed (float):
    ギアの最大速度。
  • speed (float):
    現在のギアの速度。
  • step (float):
    ギアの回転ステップ(度数)。
  • isStarted (bool):
    マシンが起動しているか。このプロパティは読み取り専用です。

GFGearクラスのパラメーター

  • DrivenBy (GFGear):
    このギアの動きが引き起こされる他のギアを指定します。このギアは、指定された「DrivenBy」ギアによって動力が供給されます。
  • AutoSetDrivenBy (bool):
    このオプションが有効な場合、他のギアと交差すると自動的に「DrivenBy」を設定します。手動で接続したい場合(例えば、ギア-軸-ギアシステムなど)はこのオプションを無効にします。
  • AutoAlign (bool):
    このギアを自動的に整列させるかどうかを指定します。このオプションは、現在のGameObjectに GFGearGen コンポーネントが存在しない場合にのみ表示されます。
  • ReverseRotation (bool):
    このオプションを有効にすると、計算された方向とは逆の方向に回転します(例えば、ローラーや車輪の作成に使用)。
  • ReverseRotationPlusSubtree (bool):
    このオプションを有効にすると、実行時、このギアによって駆動されるすべてのギアのReverseRotation をTrueにします。
  • SyncSpeed (bool):
    このオプションを有効にすると、計算された速度とは異なる速度で同期させます(例えば、一方が大きくてもバーで固定された速度で回転する列車の車輪のように)。

GFGearGenクラスのパラメーター

  • generateTextureCoordinates (GFGearGenTextureCoordinates):
    テクスチャ座標の生成方法を指定します。例えば、ボックスマッピングなどが選択できます。
  • uvTiling (Vector3):
    テクスチャのタイリングを指定します。
  • uvOffset (Vector3):
    テクスチャのオフセットを指定します。
  • tipSize (float):
    歯の先端の幅を指定します。
  • tipAngleOffset (float):
    歯先端の角度オフセットを指定します。
  • valleySize (float):
    歯の谷(二つの歯の間の空間)のサイズを指定します。
  • valleyAngleOffset (float):
    歯の谷の角度オフセットを指定します。
  • skew (float):
    歯先端の角度オフセットで、のこぎり歯効果を作ります。
  • twistAngle (float):
    歯車の前面と背面の角度の差を指定します。3Dモードでのみ可視化されます。
  • twistOutside (bool):
    歯車の外側のエッジもねじれるかどうかを指定します。
  • thickness (float):
    歯車の厚みを指定します。3Dモードでのみ適用されます。
  • showNormals (bool):
    デバッグ目的でエディタ内に法線を表示するかどうかを指定します。
  • splitVerticesAngle (float):
    頂点分割の角度を指定します。
  • is3d (bool):
    3Dギアメッシュを生成するかどうかを指定します。
  • fillCenter (bool):
    3Dモードで内半径が0より大きい場合、ギアの内側を面で埋めるかどうかを指定します。
  • fillOutside (bool):
    ギアの外側リングを埋めるかどうかを指定します。
  • innerRadius (float):
    内半径を指定します。0から(半径 - 先端長さ)の間で設定可能です。
  • innerMinVertexDistance (float):
    中心リングの頂点をマージする際の最小距離を指定します。
  • alignTeethWithParent (bool):
    親ギアとの歯数を基にして歯数を整列させるかどうかを指定します。
  • alignRadiusWithParent (bool):
    親ギアとの半径を基にして半径を整列させるかどうかを指定します。