今回はUnityでの3Dゲーム開発に関するかなりニッチなTipsで
Unityできれいな斜面(スロープ)を作る方法
をご紹介するという内容になっております。
UnityでアクションゲームやFPSのステージを作っていると、ステージに斜面が欲しくなることが結構あると思います。しかし実際に斜面を作ってみると
- 位置や角度の調整が難しくて段差や隙間ができてしまう
- いちいちスロープ状の3Dモデルを作り、それにメッシュコライダーを適用しないときれいな当たり判定の斜面にならないので面倒くさい
といった悩みが出てくるのではないでしょうか?例えば下の図のように「なんか斜面がぴったり合わなくて気になる!」なんてことはよくありますよね。


そこでここでは「ボックスコライダーを使ったきれいな斜面」を簡単に作る方法を解説してみます。
今回の方法を使って作った斜面のサンプル
ではまずは今回の方法を使って作った斜面のサンプルをご覧いただこうと思います。

地面や高台との接続部分に段差や隙間がないきれいなスロープになっており、実際にゲームを実行してこの上を歩いてみても滑らかに移動することができます。
ボックスコライダーを使ったきれいな斜面の作り方
ではここからが本題で、先ほどのサンプルのような斜面の作り方を解説していきます。
仕様
まず今回作る斜面の仕様については下記のような感じです。
- シンプルな立方体にボックスコライダーをアタッチしてそれを回転させて斜面にする
- 斜面は、それよりも高い位置にある高台に接続するものとする
この仕様なら角度や長さが違う斜面が複数必要な場合もいちいち別の3Dモデルを用意せずに済みます。
ただ文章だけだとイメージしづらいと思うので図を用意しました。下記の赤い線がボックスコライダーをアタッチした立方体、黒い部分が地面だと思ってください。

このとき青で描いた部分a、b、c、θの意味は次の通りです。
- a:斜面の先端から高台までの距離
- b:高台の高さ
- c:斜面の長さ
- θ:斜面の角度
今回はこの仕様をもとにcとθを計算して斜面を作ることにします。
作り方
次にきれいな斜面の作り方の主な手順は次の通りです。
- Blenderなどを使って超簡単な3Dモデルを用意し、コライダーをつける
- 斜面の長さと角度を計算する
- Unityエディタのスナップ機能を使ってきれいに配置する
手順1. Blenderなどを使って超簡単な3Dモデルを用意し、コライダーをつける
まずはBlenderなどを使って超簡単な3Dモデル(立方体)を作ります。今回必要になるのは下記の位置にピボットがある各辺1mの立方体なのでこれをサクッと作ってください(位置をずらして原点を設定するだけです)。もしBlenderをインストールしていない方はUnityのProbuilder等でもすぐに作ることができます。

作れたらこれをUnityにインポートしてボックスコライダーをアタッチしておきましょう。
手順2. 斜面の長さと角度を計算する
次に先ほど作った立方体を斜面にするにあたって斜面の長さと角度を計算します。再確認しますが、今回は下の図のようなイメージで立方体を回転させます。

このとき高台との接続を簡単にするために、高台までの距離aと高台の高さbをあらかじめ決めておきます。そうすれば三角関数を使って斜面の長さcと角度θが求められるので、これを立方体のトランスフォームに入力すればいいというわけです。この計算は下記のサイトで簡単に行うことができます。
例えば、斜面を接続する地面までの距離a=5、高さb=3の場合はcとθを下記のように求めることができます。

あとはこれをコピーして立方体のトランスフォームにペーストします。今回作った立方体の場合、角度θは回転X、斜辺の長さcはスケールZに相当するのでそれぞれコピペすればOKです(※回転Xに貼り付けるときは値をマイナスにしてください)。

手順3. Unityエディタのスナップ機能を使ってきれいに配置する
ここまでできたら斜面自体は完成なので、あとはこれを高台にぴったり合うように配置するだけです。Unityのシーンビューにグリッドスナップ機能(磁石アイコン)があると思うので、それを有効化してスナップ距離を「1」などキリのいい数値に設定してから斜面を配置しましょう。

今回の方法を使えば斜面を高台にピッタリ接続できてとても気持ちいいはずです!
おわりに
以上、Unityでのきれいな斜面の作り方をご紹介しました。地味でニッチな内容でしたが、これを知っていれば3Dゲームのレベルデザインにかなり役立つと思いますのでぜひ参考になさってください。
この記事がUnityでのゲーム開発のお役に立てば幸いです。