【Unity】RPGを作るチュートリアルその92 特定のタイル越しにイベントを起動する機能
- 2025.07.02
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルなRPGをUnityで作るチュートリアルシリーズの92回目です。
第91回では決定ボタンによるイベントの起動の仕組みを実装しました。
今回はカウンターなどの特定のタイル越しにイベントを起動する機能を実装します。
制作環境
MacBook Pro 2023 Apple M2 Max
Unity6 (6000.0.30f1) Silicon
作業内容と順序
シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。
チュートリアルの一覧
このシリーズ全体の一覧は以下のページにまとめています。
前回の内容
前回は決定ボタンによるイベントの起動の仕組みを実装しました。
特定のタイル越しにイベントを起動
前回の作業で、決定ボタンによるイベントの起動ができるようになりました。今回はそれを少し拡張して、お店のカウンターなどを飛び越えてイベントを起動する仕組みを実装します。例えば作成済みの村のマップだと、右側のお店ではカウンターが並んでいるので、この向こうにいるおっちゃんに話しかけられるようにします。
移動できないタイルを定義した時と同様に、どのタイルを対象にするのかをScriptableObjectで定義します。「TilemapManager」のクラスでこのファイルを確認して、操作キャラクターの目の前に該当のタイルがあったら、イベントの実行対象のゲームオブジェクトを取得する際に飛ばすRayの距離を1マス分追加します。
これに伴って、タイルを確認する処理やRayを飛ばす距離を変える処理などを追加していきましょう。
ScriptableObjectの作成
まずは飛び越えてイベントを起動するタイルの定義を作成します。Projectウィンドウから「Assets/Scripts/Data」のフォルダを開き、空のスクリプトファイルを作成します。名前は [ThroughTileData] にしました。

作成した「ThroughTileData」の中身は以下のように記載しました。
メニューからScriptableObjectを作成できるように[CreateAssetMenu]の属性をつけています。
クラス内では飛び越えてイベントを確認する対象のタイルをリストとして保持するようにします。
スクリプトを保存したら、Projectウィンドウから「Assets/Data」のフォルダを開き、上記のメニューのパスからScriptableObjectのファイルを作成します。名前はデフォルトの [ThroughTileData] にしました。

作成した「ThroughTileData」を選択し、Inspectorウィンドウから机のタイルをリストに追加します。

既存のクラスの変更
指定したタイルを飛び越えてイベントを起動できるように、以下のクラスを変更していきます。
- TilemapManager
- CharacterMover
TilemapManagerの変更
「TilemapManager」のクラスでは、今回作成したScriptableObjectへの参照用フィールドを追加して、指定したタイルが飛び越してイベントを確認するタイルかどうかを確認するメソッドを実装します。
フィールドの宣言部にて、既存の「_noEntryTileData」の下に「_throughTileData」へフィールドを追加します。
CanEntryTile()のメソッドでは、メソッド内でタイルを取得していた部分をメソッドとして切り出して、上記コード内のGetTilesOnPosition()に移行しました。
IsThroughTile()のメソッドでは飛び越えてイベントを確認する対象のタイルかどうかを判定しています。publicで外部から呼び出せるようにしているので、これを使ってRaycastの距離を切り替えるようにします。
CharacterMoverの変更
「CharacterMover」ではRayを飛ばす際に距離を切り替えるメソッドを追加しました。
GetRayDistance()のメソッドでは「TilemapManager」のIsThroughTile()のメソッドを使用して、飛び越えてイベントを確認するタイルかどうかを判定しています。その結果を受けて、該当のタイルであればRayを飛ばす距離を2マス分、そうでなければデフォルトの1マス分を返すようにしています。
GetOtherCharacter()では、distanceの値に直接1.0fを代入していた部分をGetRayDistance()のメソッドを使う形に変更しました。
参照のアサイン
Hierarchyウィンドウの「TilemapManager」のゲームオブジェクトを選択し、Inspectorウィンドウから「Through Tile Data」のフィールドに作成したデータをアサインします。

動作確認
スクリプトを保存したら動作を確認します。確認のため、ゴブリンのゲームオブジェクトをカウンターの向こうに配置しておきましょう。リポジトリと同じマップを使っている場合、「Position」の「X」を [13.5]、「Y」を [7.5] にしておくとカウンターの向こうに配置されるかと思います。この部分は必要に応じて調整ください。
ゲームを実行して、カウンターの向こうにいるゴブリンに向かって決定ボタンを押したらイベントが開始されればOKです。

今回のブランチ
まとめ
今回はカウンターなどの特定のタイル越しにイベントを起動する機能を実装しました。この仕組みを入れておくことで、カウンター全部にイベントを設置する必要がなくなります。
次回は操作キャラクターが触れた時にイベントを起動する仕組みを実装します。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその91 決定ボタンによるイベントの起動 2025.07.01
-
次の記事
【Unity】RPGを作るチュートリアルその93 触れた時にイベントを起動する仕組み 2025.07.02
コメントを書く