自分はうまくいきましたが、もっといい方法あるかも…。あくまで独自の方法です。
RBURというシステムを使用した鉄道ワールドです。
RBUR(RigidBodyUdonRailway)は曙松線建設事務所 frou01様が作成している製品です。
© 2025 frou01. Released under the MIT license.
前回の記事からの続きになりますので、最初に①~⑥の記事をご覧ください。
今進んでいるところ
・FBX Exporterの導入
・必要アセットのimport
・レールの下準備
・線路の敷設
・車両を配置する。
・線路をつなぐ
・ポイントを設定する
今回進むところ
・転てつ器を動かす
転てつ器を設置する
転てつ器を導入する
転てつ器もBooth等で売っています。
今回は下記の商品を使用させていただきます。
稲荷電気鉄道 様

好きなフォルダに展開し、Unityへのインポートを行ってください。
転てつ器をScene上に配置する
お好みの転てつ器をScene上に配置し、前回作った「pointswitch」の階層に入れてください。

今回は「switchstand_L Variant」を設置しました。
Point_Scriptについて
若干スクリプト編集したほうが、今後扱いやすくなるので、下記の通りスクリプトを変更しています。一応メモ帳とかでも変えれると思います。

アニメーター制御の追加
ポイント本体だけでなく、操作レバーなどのアニメーションも個別に制御できるようにします。
変更前:
public Animator machineAnimator;
変更後
public Animator machineAnimator;
public Animator leverAnimator;
public Animator machineAnimator;
の下にpublic Animator leverAnimator;
を追記するだけでOKです。(割と上の方の行にあります。)
変更前:
if (machineAnimator != null) machineAnimator.SetBool("state", state);
変更後
if (machineAnimator != null) machineAnimator.SetBool("state", state);
if (leverAnimator != null) leverAnimator.SetBool("state", state);
こちらも一行追記するだけです。ちょっと下の方にあります。
↓は変えなくてもいいと思われますが一応メモです
1. 同期設定の修正
ポイントの状態が他のプレイヤーに正しく同期されやすくるように変更します。
変更前: [UdonSynced(UdonSyncMode.None)] public bool state;
変更後: [UdonSynced] public bool state;
2. ネットワークオーナー権限の取得
ポイントを切り替える際に、接続先の線路オブジェクトのオーナー権限を一時的に取得する処理を追加
public void change()
メソッドに、以下のコードを追加します
C#
public void change()
{
if (Networking.LocalPlayer.IsOwner(gameObject))
{
if (pointPrevRail != null)
{
Networking.SetOwner(Networking.LocalPlayer, pointPrevRail.gameObject);
}
if (pointPrevRail_sub != null)
{
Networking.SetOwner(Networking.LocalPlayer, pointPrevRail_sub.gameObject);
}
}
// ... (既存のコード)
}
アニメーター制御の追加だけで大丈夫だと思います。
スクリプトを変更した後は必ずスクリプトを上書き保存してください。
※メモ帳で編集した場合は、メモ帳で上書き、Visual Studio等も同様
アニメーションを作成する
ポイントと同じ要領でアニメーションを追加します。
転てつ器と一緒にAnimationも同梱されていると思うので、探した後、
AnimationControllerを追加、Scene上に設置したオブジェクトと同様の名前のアニメーションを探してください。
AnimationControllerにAnimationを追加、Boolを指定し、stateに名前を変更、遷移を指定してください。遷移も「末尾N」と「末尾R」をポイントと同じように設定したら大丈夫です。

アニメーションを作成したら、転てつ器にポイントの時と同様にAnimatorを追加し、作成したアニメーションを指定してください。
アニメーションを設定する
「Pointswitch」に「Point_Script」内に新たに追加した「 leverAnimator」を設定する
項目があると思うので、そこに転てつ器を追加します。
Hierarchyはこんな感じになると思います。

「Pointswitch」に「Point_Script」
「turnout_L_1 Variant」(ポイント)にAnimator
「switchstand_L Variant」(転てつ器)にAnimator
が指定されて、それぞれのAnimatorControllerが指定されていればOKです。
動作確認、微調整
PlayMode(再生モード)で動作を確認してみてください。
「Pointswitch」を押したときに動作するようであればうまくいっています。
動作確認ができたら微調整を行います。
現在は「Pointswitch」を付与したブロックを押して操作していると思いますが、転てつ器を押すことで変化するほうがよりリアルになるので、「Pointswitch」の位置を調整します。
「Pointswitch」を動かして位置調整したいところですが、「Pointswitch」を動かすとそのまま下の階層のオブジェクトも一緒に動いてしまいます。
そこで「Pointswitch」の階層にある、ポイントと転てつ器を一旦「Pointswitch」の外に出します
外に出した状態で「Pointswitch」を動かし、「Pointswitch」の位置が転てつ器と重なるように調整してください。

こんな感じになっていたらOKです。
位置を合わせたら外に出したポイントと転てつ器を元々の階層に戻してください。
最後に「Pointswitch」を選択し、InspectorのMesh Rendererの文字の左にあるチェックボックスを押すと完成です。

最後に動作確認をしてみて問題ないか確認してください。
コメント