Unityで配置を楽にしよう

はじめに

どうも!コーディング課2回生のko-kiです!
ブログを書くのは初めてなのでおかしなところがあっても暖かい目で見てください。もう12月も17日、今年もすぐに終わってしまいますね……

ところで皆さん、Unityで複数のオブジェクトを配置するとき、めんどくさいなぁと思うことはないですか?

僕はよく思います。3Dゲームのチュートリアルで有名な(多分)Roll-a-ballでアイテムを配置する時にも円形に配置するの大変だなぁと思いながらやってた記憶があります。そんな面倒な配置を少し楽にできるかもしれないお話。

インスペクターで配置をいじる

インスペクターから配置をいじる時、直線的に配置するだけなら適当に数値をいれたり、シーン上でMoveToolで動かしたりでも簡単に動かせますが規則的に何個も置くのは大変ですよね。そんな時に便利な方法があるのです。

まずは適当に床と配置したいオブジェクト(今回はSphere)を作成してください。今回はRoll-a-ballに習って12個でいきます。

こんな感じに今は全部同じ場所にあります。それではSphereを12個すべて選択した状態でインスペクターのPositionのxにL(0,12)と入力してみましょう。すると下のように直線的に等間隔で並ぶと思います。

これは一直線に並べる関数をインスペクターで実行してるイメージで大丈夫です。L(min,max)でL(2,5)とすると2から5まで線形に増加していきます。ちなみに1メートルずつの等間隔に配置したい場合は”#”とインスペクターで入力するだけで1メートルずつの等間隔に配置されます。”#”は選択されてる個数分0から割り振られるインデックス番号です。他にもzでR(0,5)とするとランダムに散らしてくれたりします。色々使い方はあるので気になった方は調べてみてください。

円周上に配置してみる

それでは本題的なRoll-a-ballのように円周上に綺麗に並べる方法を紹介。とりあえず説明は後でするのでPositionのxにcos(pi/6*#)*5、zにsin(pi/6*#)*5と入力してみてください。そうするとあら不思議綺麗な円形に並んだではありませんか。Roll-a-ballの時に苦労したあれは何だったんだ……?

さてそれでは式の意味を説明していきます。これで好きなように配置ができるよやったね!
sin,cosを使ってるので察している方もいるかと思いますが三角関数使って配置をしてます。ちなみに僕は三角関数大っ嫌いです。
ですが細かい作業も同じくらい嫌いなんでこの配置の方法をマスターした方がよさそうな気もしますね。

話がそれたので式の説明を

cos(pi/6*#)*5のうちのpiはもちろんπです。例えば単位円上の一点は(cosα,sinα)と表現できますがαの値は先ほど出てきた#(インデックス番号)を使うことで360/12*#と書くことができます。12は選択した個数ですね。ただポジションで使われる角度はラジアンなので360を2πとしましょう。そして約分もするとα=π/6*#となります。なのでインスペクターに記述するのはx=cos(pi/6*#),z=sin(pi/6*#)ですね。これにそれぞれ好きな半径を掛けてあげれば円周上に配置できます。

大量のオブジェクトを配置する

オブジェクトを一気に規則性無しで配置したいこともありますよね。でも一個一個適当に配置するのも中々大変なものです。それを少し楽にしようというお話。

それではまず上のWindowからPackageManagerを開いてInProjectの部分をUnityRegistryにしてpolyと検索欄に入れてみてください。

そうするとPolybrushというものが出てくると思うのでそれをインストールしましょう。

インストールが出来ると上のTools→Polybrush→PolybrushWindowからウインドウを出しましょう。

そしたら右から二番目のScatter Prefabs on meshesを選択してCurrentPaletteに配置したいPrefabをドラッグアンドドロップでいれてください。その後右下のチェックボックスにチェックをいれてシーン上をドラッグするとドラッグに沿って配置してくれます。

配置の様子

動画のように配置が簡単にできると思います。ただオブジェクトの横側にも配置できるので変な方向に配置されたりすることもあるのは注意です。手作業で取り除きましょう。配置するオブジェクトの大きさや回転にランダム性を持たせることもできるので自然物を配置する時なんかはいいのではないでしょうか。さらに複数のオブジェクトからランダムに配置もできるし、BrushLoadoutでオブジェクトのスライダーでどれくらいの割合でどれが生成されるか調整することもできます。

まぁ相変わらずオブジェクトの上に配置されたりするので自然物(山とか?)以外に使うと整えるのに苦労しそうですが……

曲線に沿って配置する

先ほど紹介したPolybrushは手軽に使えて便利ですがオブジェクトの横に配置してしまったりなんてこともあって絶妙に不便な気もします。そこで最後に紹介するのがSplineです。こちらはUnity2022.1以降でしか使えない機能なので気を付けてください。

Polybrushの時と同様にPackageManagerでSplineと検索してSplinesをインストールしてください。
そしたらHierarchyでcreate→spline→draw spline toolを選択して生成されたsplineにSpline Instantiateをadd componentしてください。 

Splineを選択してシーン上のツールバーの一番上と一番下のものを押すとsplineの編集が可能になります。好きなように描いてみましょう。

てなわけで適当に描いてみました。インスペクターでsplineのcloseにチェックを入れると最初と最後がつながってくれます。

線が描けたらSpline InstantiateのItem To Instantiateに生成したいオブジェクトをいれてください。今回はとりあえずcubeを入れておきました。

そうすると画像のようにきれいに並んでくれると思います。間隔を開けたければSpacingのところに好きに数字を入力してください。一種類だけ生成しても面白くないのでさっきcubeをアタッチしたところにオブジェクトを増やしてとなりの%のところに適当に数字を入れてみましょうか。

いい感じにばらついてくれましたね。ちなみにRandomizeを押すと何度でも抽選してくれるのでいい感じにしましょう。

ちょっと遊んでみる

これで終わってもいいんですけどどうせなら遊んでみましょう。
散々例に出したので自然な感じの山でも作りましょうか。
てなわけでとりあえずこんな感じの岩っぽい何かをblenderで用意します。

岩っぽい何か

そして適当にsplineを描いて、インスペクターで大きさや回転にランダム性を持たせて生成したものがこちら

ランダムの値を大きくしすぎてしまったような気もしますがまぁごつい岩山の背景と考えたらこんな感じでいいでしょう。xとzのランダムを上手いことやるともっと細い岩山もできると思うので自分だけの岩山を作りましょう!(?)

さいごに

説明が下手だったりで魅力が伝わってるか不安ですが最後のSplineなんかは一個一個オブジェクトを置いて岩山を作るなんてやってられないので使えるタイミングがあればガンガン使っていきましょう。明日はguu君の「攻略ウィキ書いてみた」ですね、お楽しみに。それではみなさん良き配置ライフを!

コメントを残す

CAPTCHA