【Unity】重ならないようにランダムにオブジェクトを配置する – Unityの使い方|初心者からわかりやすく | 您所在的位置:网站首页 › caj文件打印出来都是半截 › 【Unity】重ならないようにランダムにオブジェクトを配置する – Unityの使い方|初心者からわかりやすく |
![]() スクリプトでアイテムが重ならないようにランダムに配置してみました。 ランダムの位置を設定Random.insideUnitCircleメソッドは、半径1の円の内部のランダムな位置を返します。その位置に値をかけると半径を伸縮できます。 戻り値の型はVector2なので、これをVector3の変数に入れてY軸とZ軸を入れ替えることで、床に沿った位置にしています。 // ランダムの位置 Vector3 pos = Random.insideUnitCircle * 5; pos.z = pos.y; pos.y = 0.5f; アイテムをインスタンス化この位置を使ってアイテムをインスタンス化すると、互いに重なることがあります。 ![]() ![]() これを回避するために、Physics.CheckBoxメソッドを使って、アイテムを配置したいところにボックスを作り、それが他のアイテムと重ならないときだけアイテムをインスタンス化しました。 重なりを確認Physics.CheckBoxメソッドの第1引数にはボックスの中心、第2引数にはボックスサイズの半分を渡します。 このボックスが他のコライダーと重ならないときにtrueを返します。 // ボックスサイズの半分 Vector3 halfExtents = new Vector3(0.5f, 0.5f, 0.5f); // --- // 10回試す for (int n = 0; n他のアイテムと重なるときは位置を変えて再度ボックスを作っています。これを10回ずつ試すことにしました。 ボックスが床を無視してほしいので、アイテムのプレハブにレイヤーを設定して、第4引数にレイヤーマスクを入れています。 ![]() 作られるアイテムの数に偏りができましたが、アイテム同士が重ならなくなりました。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
CopyRight 2018-2019 实验室设备网 版权所有 |