スライダーを使用してオブジェクトを作成および破棄するにはどうすればよいですか?

ダニエルリップ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class GameManager : MonoBehaviour
{
    public GameObject prefabToDraw;
    [Range(0, 100)]
    public int amountOfObjects;

    private int amountCopy;

    // Use this for initialization
    void Start()
    {
        amountCopy = amountOfObjects;
        prefabToDraw.tag = "DrawPrefab";
    }

    // Update is called once per frame
    void Update()
    {
        if (amountOfObjects > amountCopy && amountCopy != amountOfObjects)
        {
            for (int i = 0; i < amountOfObjects; i++)
            {
                Instantiate(prefabToDraw);
            }

            amountCopy = amountOfObjects;
        }

        if (amountOfObjects == 0)
        {
            var gos = GameObject.FindGameObjectsWithTag("DrawPrefab");

            for (int i = 0; i < gos.Length; i++)
            {
                DestroyImmediate(gos[i]);
            }
        }
    }
}

この部分がないと、オブジェクトを作成する場合にのみ正常に機能します。

if (amountOfObjects == 0)
            {
                var gos = GameObject.FindGameObjectsWithTag("DrawPrefab");

                for (int i = 0; i < gos.Length; i++)
                {
                    DestroyImmediate(gos[i]);
                }
            }

しかし、スライダーが右に移動しているときに、より多くのオブジェクトがより多くの新しいオブジェクトを作成し、これが機能しているときに、それを実行したいと思います。

スライダーを左に移動するときは、オブジェクトの量を減らしてからオブジェクトを破棄します。たとえば、オブジェクトが90個あり、スライダーの値が90の場合、スライダーを左に移動すると、90から70に移動するとオブジェクトの破棄が開始されます。再び右に移動すると、20個のオブジェクトが破壊され、新しいオブジェクトが再度作成されます。

破壊部分のやり方がわかりません。

私は試した:

if (amountOfObjects == 0)
        {
            var gos = GameObject.FindGameObjectsWithTag("DrawPrefab");

            for (int i = 0; i < gos.Length; i++)
            {
                DestroyImmediate(gos[i]);
            }
        }

しかし、「DrawPrefab」というタグが付いたオブジェクトが1つでもあると、0でなくても、オブジェクトは破棄されます。私はそれを台無しにしました。

更新

これは私が試したものです:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class GameManager : MonoBehaviour
{
    public GameObject prefabToDraw;
    [Range(0, 100)]
    public int amountOfObjects;

    private int amountCopy;
    private List<GameObject> gos = new List<GameObject>();

    // Use this for initialization
    void Start()
    {
        amountCopy = amountOfObjects;
    }

    // Update is called once per frame
    void Update()
    {
        CreateObjects();
        DestroySomeObjects(amountOfObjects);
    }

    private void CreateObjects()
    {
        if (amountOfObjects > amountCopy && amountCopy != amountOfObjects)
        {
            for (int i = 0; i < amountOfObjects; i++)
            {
                GameObject go = Instantiate(prefabToDraw);
                gos.Add(go);
            }

            amountCopy = amountOfObjects;
        }
    }

    private void DestroySomeObjects(int amountFromRightSide)
    {
        if (gos.Count != 0)
        {
            for (int i = gos.Count - 1; i <= gos.Count - amountFromRightSide; i--)
            {
                DestroyImmediate(gos[i]);
            }
        }
    }

    private void DestroyAllObjects()
    {
        if (gos.Count != 0)
        {
            foreach (GameObject go in gos)
            {
                DestroyImmediate(go);
            }
        }
    }
}

スライダーを右に移動すると、新しいオブジェクトが作成および追加されますが、左に移動すると、例外が発生します。ArgumentOutOfRangeException:引数が範囲外です。パラメータ名インデックス。

行で:

DestroySomeObjects(amountOfObjects);

そして

DestroyImmediate(gos[i]);
Doh09

常に同じ量のオブジェクトがある場合は、パフォーマンスが向上するため、オブジェクトを破棄するのではなく、有効/無効にすることをお勧めします。

また、後で別のメソッドでオブジェクトを見つけるのではなく、作成したオブジェクトをリストに保存して、それらを参照できるようにします。

List<GameObject> gos = new List<GameObject>();
void CreateObjects()
{
    if (amountOfObjects > amountCopy && amountCopy != amountOfObjects)
    {
        for (int i = 0; i < amountOfObjects; i++)
        {
            GameObject go = Instantiate(prefabToDraw);
            gos.Add(go);
        }

        amountCopy = amountOfObjects;
    }
}

そうすれば、破壊したり他のことをしたりするときにリストを使用できます。

void DestroySomeObjects(int amountFromRightSide)
{
    if (gos.Count != 0)
        {
            for (int i = gos.Count-1; i <= gos.Count-amountFromRightSide; i--)
            {
                DestroyImmediate(gos[i]);
            }
        } 
}

void DestroyAllObjects()
{
    if (gos.Count != 0)
        {
            foreach (GameObject go in gos)
            {
                DestroyImmediate(go);
            }
        } 
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Restパターンを使用してオブジェクトの目的の部分のみを破棄するにはどうすればよいですか?

分類Dev

不完全なオブジェクトタイプへのスマートポインタを使用してクラスを安全に破棄するにはどうすればよいですか?

分類Dev

タスクで作成したオブジェクトを破棄するにはどうすればよいですか?

分類Dev

C#の静的クラスからアンマネージドオブジェクトを破棄するにはどうすればよいですか?

分類Dev

RAIIプロパティを使用してサブスクライバーオブジェクトを作成するにはどうすればよいですか?

分類Dev

画面を離れたオブジェクトを破棄するにはどうすればよいですか?

分類Dev

ラスターオブジェクトの値を使用してレイヤーを作成するにはどうすればよいですか?

分類Dev

QMLで同じイベントの後に動的オブジェクトを作成/破棄するにはどうすればよいですか?

分類Dev

SharedPreferencesを使用してカスタムオブジェクトのリストを保存および取得するにはどうすればよいですか?

分類Dev

TypeScriptで既知および未知のキーを使用してオブジェクトを入力するにはどうすればよいですか

分類Dev

シリアライザーを使用してオブジェクトからjsonファイルを作成するにはどうすればよいですか?

分類Dev

AssociationTypeMisMatch:JSONを受け入れるRESTful API(Rails)を使用して、オブジェクトおよび関連付けられた(ネストされた)オブジェクトを作成するにはどうすればよいですか?

分類Dev

Railsでオブジェクトをフィルタリングして、オブジェクトを作成したユーザーまたは管理者だけがそのオブジェクトを破棄できるようにするにはどうすればよいですか?

分類Dev

Pythonでループを使用して複数のクラスオブジェクトを作成するにはどうすればよいですか?

分類Dev

既存のフォーメーションに新しいオブジェクトを追加/破棄するにはどうすればよいですか?

分類Dev

新しいオブジェクトを作成する前に、すべての子オブジェクトを破棄するにはどうすればよいですか?

分類Dev

Zend:PHP 7でカスタムオブジェクトを正しく破棄するにはどうすればよいですか?

分類Dev

静的メソッドのオブジェクトの破棄エラーを修正するにはどうすればよいですか?

分類Dev

Python / PySide:終了したスレッドオブジェクトを破棄するにはどうすればよいですか?

分類Dev

Javascriptを使用して動的オブジェクトを作成するにはどうすればよいですか?

分類Dev

mysqlコネクタを使用して共有オブジェクトライブラリ(* .so)を作成するにはどうすればよいですか?

分類Dev

変数の文字列を使用してJavaScriptオブジェクトを作成し、クラス名を定義するにはどうすればよいですか?

分類Dev

複数のPythonオブジェクトをjsonファイルにダンプおよびロードするにはどうすればよいですか?

分類Dev

THREE.InstancedBufferGeometryを使用してオブジェクトを動的に追加および削除するにはどうすればよいですか?

分類Dev

forEachおよびpush関数を使用してJavascriptでオブジェクトの配列を更新するにはどうすればよいですか?

分類Dev

FastReportオブジェクトインスペクターをロックおよび非表示にするにはどうすればよいですか?

分類Dev

Reactを使用してオブジェクトのリストからテーブルを作成するにはどうすればよいですか?

分類Dev

Hibernateを使用して子オブジェクトを親クラスオブジェクトに保存するにはどうすればよいですか?

分類Dev

C++ リンク リストのコピーをクラス オブジェクトとして作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    Restパターンを使用してオブジェクトの目的の部分のみを破棄するにはどうすればよいですか?

  2. 2

    不完全なオブジェクトタイプへのスマートポインタを使用してクラスを安全に破棄するにはどうすればよいですか?

  3. 3

    タスクで作成したオブジェクトを破棄するにはどうすればよいですか?

  4. 4

    C#の静的クラスからアンマネージドオブジェクトを破棄するにはどうすればよいですか?

  5. 5

    RAIIプロパティを使用してサブスクライバーオブジェクトを作成するにはどうすればよいですか?

  6. 6

    画面を離れたオブジェクトを破棄するにはどうすればよいですか?

  7. 7

    ラスターオブジェクトの値を使用してレイヤーを作成するにはどうすればよいですか?

  8. 8

    QMLで同じイベントの後に動的オブジェクトを作成/破棄するにはどうすればよいですか?

  9. 9

    SharedPreferencesを使用してカスタムオブジェクトのリストを保存および取得するにはどうすればよいですか?

  10. 10

    TypeScriptで既知および未知のキーを使用してオブジェクトを入力するにはどうすればよいですか

  11. 11

    シリアライザーを使用してオブジェクトからjsonファイルを作成するにはどうすればよいですか?

  12. 12

    AssociationTypeMisMatch:JSONを受け入れるRESTful API(Rails)を使用して、オブジェクトおよび関連付けられた(ネストされた)オブジェクトを作成するにはどうすればよいですか?

  13. 13

    Railsでオブジェクトをフィルタリングして、オブジェクトを作成したユーザーまたは管理者だけがそのオブジェクトを破棄できるようにするにはどうすればよいですか?

  14. 14

    Pythonでループを使用して複数のクラスオブジェクトを作成するにはどうすればよいですか?

  15. 15

    既存のフォーメーションに新しいオブジェクトを追加/破棄するにはどうすればよいですか?

  16. 16

    新しいオブジェクトを作成する前に、すべての子オブジェクトを破棄するにはどうすればよいですか?

  17. 17

    Zend:PHP 7でカスタムオブジェクトを正しく破棄するにはどうすればよいですか?

  18. 18

    静的メソッドのオブジェクトの破棄エラーを修正するにはどうすればよいですか?

  19. 19

    Python / PySide:終了したスレッドオブジェクトを破棄するにはどうすればよいですか?

  20. 20

    Javascriptを使用して動的オブジェクトを作成するにはどうすればよいですか?

  21. 21

    mysqlコネクタを使用して共有オブジェクトライブラリ(* .so)を作成するにはどうすればよいですか?

  22. 22

    変数の文字列を使用してJavaScriptオブジェクトを作成し、クラス名を定義するにはどうすればよいですか?

  23. 23

    複数のPythonオブジェクトをjsonファイルにダンプおよびロードするにはどうすればよいですか?

  24. 24

    THREE.InstancedBufferGeometryを使用してオブジェクトを動的に追加および削除するにはどうすればよいですか?

  25. 25

    forEachおよびpush関数を使用してJavascriptでオブジェクトの配列を更新するにはどうすればよいですか?

  26. 26

    FastReportオブジェクトインスペクターをロックおよび非表示にするにはどうすればよいですか?

  27. 27

    Reactを使用してオブジェクトのリストからテーブルを作成するにはどうすればよいですか?

  28. 28

    Hibernateを使用して子オブジェクトを親クラスオブジェクトに保存するにはどうすればよいですか?

  29. 29

    C++ リンク リストのコピーをクラス オブジェクトとして作成するにはどうすればよいですか?

ホットタグ

アーカイブ