指定したパーセンテージでジオメトリ オブジェクトをランダムに削除する方法はありますか。
 
 
 

MAXScript に関する質問と回答 > シーン ノードの操作 > 指定したパーセンテージでジオメトリ オブジェクトをランダムに削除する方法はありますか。

質問:

パーセンテージを指定して、オブジェクトをシーン内から削除するスクリプトを作成しようとしています。オブジェクトはランダムに選択されるようにします。メッシュだけを対象とするスクリプトを作成したいと考えています。

回答:

次に実行可能な手段を示します。

スクリプト:

(
-- 特定のタイプのオブジェクトを配列内に収集します。 たとえば、
-- ここでは、すべてのジオメトリ オブジェクトを収集します。 ただし、
-- MAXScript 以前の経緯により、 Geometry スーパークラスのターゲット オブジェクトは除かれます。
 
candidatesArray = for o in Geometry where classof o != TargetObject collect o
 
-- 指定したパーセンテージでオブジェクトをランダムに削除する場合は、
-- オブジェクトを実際に削除する前に
-- 削除するオブジェクトを選択しておくことをお勧めします。
-- 第 2 の配列を作成して、
-- 削除する実際のオブジェクトで埋めることもできます。
 
deathRowArray = #() --  空配列を初期化します。
thePercentage = 50.0 -- パーセンテージを定義します。
 
-- 削除するオブジェクトの数を計算します。
numberToDelete = (thePercentage / 100.0 * candidatesArray.count) as integer
 
-- deathRow 配列が目的の数のオブジェクト数で一杯になるまで
-- ループします。
while deathRowArray.count < numberToDelete do
(
  newIndex = random 1 candidatesArray.count --新しいランダム インデックスを生成します。
  --使用されていない場合、deathrow 配列に追加されます。
  if findItem deathRowArray candidatesArray[newIndex] == 0 do
    append deathRowArray candidatesArray[newIndex]
)
delete deathRowArray --最後に、収集されたオブジェクトを削除します。
)
関連事項