상품 설명
歩いても歩いても終わらない地下通路。奥へ進むほど霧が濃くなり、灯りがちらつき、背後から足音が寄ってくる……。そんな地下道を、入った人ごとに自動で組み立てる UdonSharp スクリプトです。
直線、曲がり角、階段、T字、十字の区画を見本から複製して並べていきます。曲がり角や分岐は決めた深さから出始め、ドラム缶や貼り紙は置き場に確率で置かれ、異変は深さに応じてくじで選ばれます。種(seed)が同じなら全員が同じ通路を歩きます。
スクリプトは書きません。TunnelKit の子に区画の種類、登場する物、異変を 1 行ずつ並べて、インスペクターの数字を変えるだけです。区画 9 種、物 4 種、異変 6 種を設定済みの見本シーンを同梱したので、まず取り込んで再生してみてください。
できること
入室時に種を決めて、区画を最大 2000 個まで少しずつ組み立てます。実体があるのはプレイヤーの周りだけで、離れた区画は片付けて使い回します。2000 区画といっても、同時にシーンに置いてあるのは十数個です。
形は 8 種類。直線、左折、右折、上り階段、下り階段、T字、十字、行き止まりで、それぞれ出始める深さと確率を決められます。出口の先がすでに埋まっている形は自動で避けるので、壁に刺さった階段は出ません。
進んだ距離が怖さ(0〜1)になります。効くのは霧の濃さ、灯りのちらつき、異変の頻度です。既定では入口から 40m までは何も起きず、灯りがちらつき始めるのは 600m あたりからです。
物は、区画の見本に Slot_ で始まる置き場を作り、物の行に置き場の名前と確率を書くだけです。深くなるほど出やすくする倍率もあります。
異変は、物を出す、音を鳴らす、前後の灯りを消す、点滅させる、自作スクリプトを呼ぶ、の 5 つを 1 行の中で組み合わせます。背後か前方か今いる区画か、何区画離すかも行ごとに決めます。抽選はインスタンスの所有者が引き、全員の手元で同じ瞬間に出ます。
見本シーンは取り込んで再生するだけで、区画 9 種、物 4 種、異変 6 種が動いている通路を歩けます。見た目が気に入らなければ、見本の区画や物を自分のプレハブに差し替えてください。仕組みはそのまま使えます。
注意
・通路は入口から前方へ、階段のぶん上下(既定で 6m)にも伸びます。ワールドの他の部分と重ならない空き地に置いてください
・霧は RenderSettings.fog を使って深さで濃くします。自分で霧を制御している場合は controlFog を OFF にしてください。ON のまま重ねると取り合いになります
・区画の見本は 1 辺 10m の正方形に収まる形で作る決まりです。同梱の見本を複製して形を変えるのが確実です
同梱物
1. TunnelKit(本体。通路の生成、区画の出し入れ、霧と灯り、異変の抽選)
2. SegmentKind(区画の種類 1 行。形、見本、出やすさ、出る深さ)
3. PropRule(登場する物 1 行。置き場の名前、確率、出る深さ)
4. AnomalyRule(異変 1 行。物を出す / 音 / 消灯 / 点滅 / 自作スクリプト呼び出し)
5. SampleEventReceiver(異変から自作スクリプトを呼ぶ見本)
6. インスペクター拡張(追加ボタンと設定ミスの点検)
7. 設定済みの見本プレハブ(区画 9 種、物 4 種、異変 6 種)と見本シーン
8. 見本用の材質 9 個、壁と床の模様 2 枚、足音などの音 4 つ
9. README / LICENSE / CHANGELOG
動作環境
・Unity 2022.3 系
・VRChat SDK3 Worlds(UdonSharp 同梱の版)
導入手順
1. unitypackage を取り込む
2. Prefabs/TunnelKit_Sample.prefab を自分のシーンに置く(位置は原点、回転なし)
3. スポーン地点を入口の少し手前 (0, 0.1, -2.5) あたりに置く
4. VRCSceneDescriptor の Respawn Height Y を -60 など十分低くする。階段で下へ潜るので、既定のままだと奥で落とされて入口に戻されます
5. 再生して奥へ歩く。既定では曲がり角が 60m、階段が 120m、分岐が 150m から出ます
見本シーンでは、試す人を待たせないように異変のくじの間隔を 8〜16 秒、入口付近で当たる確率を 0.4 にしてあります。既定は 20〜40 秒と 0.15 です。自分のワールドに持っていく時は既定値から始めた方が、たぶん怖いです。
1. TunnelKit 本体
■ 道の設定
・segmentLength: 1 区画の長さ。既定 10m
・stairRise: 階段 1 つで上下する高さ。既定 3m
・keepRadius: 今いる区画から何区画先まで実体化するか。既定 6
・maxNodes: 区画の上限。既定 2000。超えた先は行き止まり
・genPerFrame: 1 フレームに生成する区画の数。既定 48
・fixedSeed: 種を固定する。0 で毎回ランダム
■ 形の出やすさ
・cornerChance / cornerMinDepth: 曲がり角の確率と出始める深さ。既定 0.08 / 60m
・stairChance / stairMinDepth / stairMaxLevel: 階段の確率、出始める深さ、上下の階の上限。既定 0.06 / 120m / 2
・forkChance / forkMinDepth: 分岐(T字・十字)の確率と出始める深さ。既定 0.05 / 150m
・straightAfterSpecial: 直線以外の直後は必ず直線にする。既定 ON
■ 深さと雰囲気
・deepDepth: この深さで怖さが 1 になる。既定 2000m
・controlFog / fogColorNear / fogColorDeep / fogDensityNear / fogDensityDeep: 霧の制御と、入口と最深部の色と濃さ。既定 0.03 / 0.12
・flickerStartFear: 怖さがこの値を超えると灯りがちらつき始める。既定 0.3
・flickerRateDeep: 最深部で 1 秒あたりに切り替わる灯りの数。既定 1.5
■ 異変の抽選
・rollIntervalMin / rollIntervalMax: くじを引く間隔。既定 20〜40 秒
・chanceNear / chanceDeep: 入口付近と最深部で 1 回の抽選が当たる確率。既定 0.15 / 0.7
・anomalyStartDepth: この深さまでは異変を出さない。既定 40m
・sameCategoryScale: 直前と同じ系統の異変の重みに掛ける倍率。既定 0.25
・syncAnomalies: ON で抽選を所有者が行い全員に配る。既定 ON
■ 試験用
・botForceRule: 番号を入れると、その異変を botInterval 秒ごとに出し続ける。公開前に -1 へ戻してください
2. SegmentKind 区画の種類
Kinds/ の下に 1 形 1 オブジェクトで並べます。「区画の種類を追加」ボタンで行を足せます。
・shape: 形。0 直線 / 1 左折 / 2 右折 / 3 上り階段 / 4 下り階段 / 5 T字 / 6 十字 / 7 行き止まり
・template: 見本の形。空ならこのオブジェクトの最初の子。複製されて通路に並ぶ
・weight: 同じ形の中で選ばれやすさ。0 で出ない
・minDepth / maxDepth: 出る深さの範囲。maxDepth 0 で無制限
・poolSize: あらかじめ複製しておく数。既定 8。直線は keepRadius の 2 倍以上にしてください
・lightsOff: この区画は灯りを消した状態で置く
・noProps: 物を置かない。階段や曲がり角向け
見本の中では名前で役割が決まります。Lamp で始まる子は灯り(消灯と点滅の対象)、Slot_ で始まる子は物の置き場、Cap_F / Cap_L / Cap_R / Cap_B は出口を塞ぐ壁で、その先が塞がっている時だけ自動で表示されます。区画の中心が原点、入口は -Z 側、直線の出口は +Z 側です。
3. PropRule 登場する物
Props/ の下に並べます。区画の見本にある Slot_ の位置に確率で置かれます。
・template: 見本の形。空ならこのオブジェクトの最初の子
・slotName: 置き場の名前。既定 Slot_Floor
・chance: 置き場 1 つあたりの出る確率。既定 0.15
・minDepth / maxDepth: 出る深さの範囲
・deepMultiplier: 深くなるほど出やすくする倍率。3 なら最深部で 3 倍
・poolSize: あらかじめ複製しておく数。既定 12
・randomYaw / scaleMin / scaleMax: 置くときに回す、大きさをばらつかせる
置くかどうかは種から決まるので、同じ場所を通り直しても同じ物があります。
4. AnomalyRule 異変
Anomalies/ の下に並べます。「異変を追加」ボタンで足すと AudioSource も付きます。
■ 抽選
・weight: 選ばれやすさ。0 で出ない
・minDepth / maxDepth: 出る深さの範囲
・cooldown: 一度出たら次に出るまで最低これだけ空ける。既定 120 秒
・category: 系統の番号。直前と同じ系統は選ばれにくくなる
■ 場所
・placement: 0 背後 / 1 前方 / 2 今いる区画
・hops: 何区画ぶん離すか
・heightOffset / sideOffset: 床からの高さ、横へのずらし
・facePlayer: 出した物をプレイヤーの方へ向ける
■ やること(組み合わせ自由)
・物を出す: target に出す物、duration に消えるまでの秒数
・音を鳴らす: clip と volume。物と同じ場所から鳴る
・灯りを消す: lampsOffAhead / lampsOffBehind に区画の数
・点滅させる: 上と同じ設定で flickerInstead を ON
・自作スクリプトを呼ぶ: eventTarget に UdonBehaviour、eventName に public メソッド名。呼ばれた側は TunnelKit の anomalyPos / anomalyFwd / anomalyToPlayer で異変の位置と向きを読めます
見本シーン
Scenes/TunnelKit_Sample.unity を開いて再生し、奥へ歩きます。
・区画 9 種: 直線、暗い直線(80m 以降)、左折、右折、上り階段、下り階段、T字、十字、行き止まり
・物 4 種: ドラム缶、コーン、ゴミ袋(床の置き場)、貼り紙(壁の置き場)
・異変 6 種: 背後の足音 / 前方の消灯 / 背後の人影(250m 以降) / 遠くの金属音 / 点滅 / 自作スクリプト呼び出し(受け取ると入口の上にオレンジの板が 2 秒出る)
異変が出ないと思ったら、TunnelKit の botForceRule に 0〜5 を入れると強制的に出せます。人影は 250m より手前では出ないので、そこだけ注意してください。
利用規約
組み込んだワールドは無料・有料を問わず公開できます。
スクリプトの改変も可能です。区画の種類や異変などを自分のワールド向けに変更できます。
ただし、キットそのものの再配布・再販売、および改変したキットの配布はできません。
共同制作者に使用してもらう場合は、その方にもキットを購入してもらう必要があります。
詳細は同梱の LICENSE.txt を確認してください。
制作者の環境で動作確認済みです。現状有姿での提供となり、不具合・データ損失・その他一切の損害について責任を負いません。
更新履歴
1.0.0 (2026-09-23) 初版
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기