VRChatでMiniGolfを作る3(障害物を置く編)

2023/07/08に公開

前回の記事では0からワールドを作成し、新規ホールを作成して動かすことができました。
基本的な作り方だいたい抑えたので、あとは自由に改変していけば良さそうです。

前回の記事はこちら。

https://zenn.dev/tyaahan/articles/82b6ad151c699f

とはいえこのレベルからいきなりMini Golfフルコース、18ホール分のメッシュやギミックを作るのはかなりシンドい…😅

そこで、まずはお遊び感覚で色々ホールを作ったり動かしたりしてみて、だんだんとホール作成に慣れていくのが良いと思います。今回の記事では前回作ったシンプルなホールへ、ポン置きで障害物を追加してみます。

ではやっていきましょう。

前提

  • VRChatでWorldを作成しUploadしたことがある
  • 前回の記事で作成したサンプルホールがある
  • バージョン
    • VCC
      • v2.1.1
    • Unity
      • 2019.4.31f1
  • ゴルフ用語の説明
    • ホール
      • ゴルフゲームの1つのラウンド。ティーグラウンドからグリーンまでのこと
    • コース
      • 18ホールで1つのゲームとなる。1つのゲームをコースと言う
    • カップ
      • 各ホールにあるゴール地点をカップと呼ぶ。小さな縦穴。
      • これを「ホール」と呼ぶこともあるが、ややこしいのでこの記事ではカップと表現する
      • OpenPuttに含まれるファイルは、カップのコライダー名が「Hole」となっているので混同しやすい!注意

ホールに障害物を作る

Mini Golfでよくある物体、カップへの道を阻むおじゃま者=障害物を置いてみましょう。
基本的には以下の2つをおさえるだけでOK。

  1. 障害物となる3Dモデルをホールの床に配置
    • (オプション)3Dモデルからボーンなどを削除して、メッシュだけにして軽量化する
  2. モデルのコーンポーネントにコライダーとOpenPutt物理演算を追加

準備

3Dモデルの準備

3Dモデルは好きなものを用意しましょう。
サカバンバスピスはやや好きですね?それでやっていきます。

Boothで無料のサカバンバスピスのモデルが提供されていました。
ありがたく使わせてもらいます。

https://booth.pm/ja/items/4850142

ダウンロードした中にあるsakaban.unitypackageをプロジェクトのAssetsにドロップします。
Assetsに追加されたサカバンフォルダにsakaban Prefabがあります。
このPrefabをhierarchyにドロップします。

し…死んでる…。(テクスチャが)
シェーダーが無いためです!急いで追加しましょう。

シェーダーの準備

サカバンバスピスのBoothページに、シェーダーはliltoonを使っていると書いてあります。
プロジェクトへliltoonを追加します。

liltoonもVCCへ登録可能なPackageです。
初回の記事でやったようにプロジェクトにliltoonを追加していきましょう。

https://twitter.com/lil_xyzw/status/1644166338603270144

lilさんのツイートにあるリンクをクリックしてVCCに登録します。
VCCアプリから、プロジェクトのManage Projectボタンを押します。

下の方にlilToonがありますので+ボタンを押して有効化します。

Unity画面に戻りますと自動でインポートが行われます。

復活!

ボーン削除ツールの準備

サカバン君はHumanoidアバターなのでボーンが入ってます。
今回は動かさず、障害物としてポン置きするだけです。
ワールド軽量化のためにボーンを削除してポーズを固定するツールSkinnedMeshBakerを使います。

https://summer2022.vket.com/docs/submission_tips_skinned_mesh_baker

ダウンロードして、SkinnedMeshBaker.unitypackageをAssetsにドロップします。

モデルをホールに配置

前回の記事で作った真っ直ぐなコースにサカバン君を配置します。

位置の変更

単に移動するだけです。

あ~
サカバンゴルフ圧倒的に良い…
でも障害物としてはちょっと頼りない…それも良い…

モデルを変形する

InspectorでScaleをちょっとイジってみましょう。
試しにカレイみたく平べったくします。
Scaleを変更。

いい感じにプレイヤーへの圧力が生まれました。

ボーンもちょっと変形してみます。
サカバン君はHumanoidアバターの3Dモデルですが、実際に動かして見た目に影響あるボーンはHead以下に接続されているbody_1~5とtailだけです。

body_1~5のボーンをUnity左上のRotateツールで回転させて、シャチホコのようなサカバンにしてみます。

うーん…正直シャチホコ化はイマイチです…
まァ、いいか🙄

モデルをポーズ付きでベイク

大体ポーズが決まりましたのでボーンを抜いて固定しましょう。
Hierarchyのsakabanを右クリックして出てきたメニューからBakedSkinedMeshPoseを実行。

Baked_sakabanというメッシュがHierarchyに生成されます。

Prefabの方は無効にします。
これでゴルフの障害物として欲しかった3Dメッシュだけの存在になります。

コライダーの設定

HierarchyのBaked_sakaban/mesh001_bodyのInspectorにMesh Coliderを追加します。

追加したMesh Colliderに物理を設定します。

  • Mesh CilliderのMaterialに以下を追加
  • Packages/OpenPutt/Runtime/PhysicMaterialsにあるWallPhysics

動かす

ローカルテストをVRモードで動かしてみます。

https://youtu.be/Clns3nUQ8gE

VRモードでのローカルテスト方法

Quest2+AirLinkを使ったVRモードでのローカルテストの簡単な方法

  • Quest2でAirLink経由でSteamVRに入ります
    • SteamVR起動しただけで、アプリはまだ起動しません
  • UnityでLoaltestingでForce Non-VRのチェックを外しBuild & Testボタンを押す
  • Quest2側でLocalのVRChatが起動する

VR上のOpenPuttの動作

  • 右手を後ろに持っていくとパター、左手を後ろに持っていくとボールが取り出せる
  • トリガーを引いた状態でパターをふる

ヨシ!ボールをぶつけるとうまく障害物として機能しました。

モデル変形のやり方次第でいくらでも応用ができます。
例えば尻尾の形状を横に伸ばてカップへの入場を阻止したり…
まぁカップ導線を厳しくすると、クソゴルフワールド化待ったなしになってしまいますが🤨

次は?

今回はサカバンバスピスの3Dモデルを障害物としてMini Golfのホールへ追加できました。
応用すれば自分の好きな3Dモデルをいくらでも配置できるでしょう!
今回の内容と手順はそう変わらないはずです。

次の記事ではホールの床面を既存の3Dモデルに置き換えてホールを作って行きます。
👉(記事作成中)

Discussion