csharp 大量のオブジェクトを何度も吐温させる场合はSetRecyclable(真)にした方がよいかもと検证したサンプルコード

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 大量のオブジェクトを何度も吐温させる场合はSetRecyclable(真)にした方がよいかもと検证したサンプルコード相关的知识,希望对你有一定的参考价值。

using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(PooledDOTween))]
public class PooledDOTweenEditor : Editor
{
    private PooledDOTween _target;
    private void OnEnable ()
    {
        _target = (PooledDOTween)target;
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        if (GUILayout.Button("CreateCapsules"))
        {
            _target.CreateCapsules();
        }

        if (GUILayout.Button("StartTween"))
        {
            _target.StartTween();
        }
    }
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;

public class PooledDOTween : MonoBehaviour 
{
    private List<GameObject> objs = new List<GameObject>();
    /// <summary>
    /// TweenerのPoolフラグ
    /// </summary>
    public bool isPool = false;

    private bool _isPlayed;

    /// <summary>
    /// カプセルをたくさん生成
    /// </summary>
    public void CreateCapsules()
    {
        for (int i = 0; i < 10000; i++)
        {
            var obj = GameObject.CreatePrimitive(PrimitiveType.Capsule);
            // 不要なコンポーネントは削除
            var collider = obj.GetComponent<Collider>();
            Destroy(collider);
            objs.Add(obj);
        }
    }

    /// <summary>
    /// Tween開始
    /// </summary>
    public void StartTween()
    {
        if (_isPlayed)
        {
            return;
        }
        _isPlayed = true;
        StartCoroutine(_StartTween());
    }

    private IEnumerator _StartTween()
    {
        while (true)
        {
            foreach (var obj in objs)
            {
                var goal = new Vector3(Random.Range(-10f, 10f), Random.Range(-10f, 10f), Random.Range(10f, 50f));
                if (isPool)
                {
                    // DOTweenのPoolを有効化する
                    obj.transform.DOLocalMove(goal, 1f).SetRecyclable();
                }
                else
                {
                    obj.transform.DOLocalMove(goal, 1f);
                }
            }
            yield return new WaitForSeconds(2f);
        }
    }
}

以上是关于csharp 大量のオブジェクトを何度も吐温させる场合はSetRecyclable(真)にした方がよいかもと検证したサンプルコード的主要内容,如果未能解决你的问题,请参考以下文章

csharp DIできる状态で,动的にオブジェクトを生成する(普通にGameObject.Instantiateすると,生成されたオブジェクトにはDIされない))

csharp DIが机能するように,オブジェクトを动的生成する

markdown SharedPreferenceに単纯なオブジェクト,泛型を使ったオブジェクトを保存

javascript オブジェクトをコピーする

markdown 争论オブジェクトを配列に変换

markdown 地图オブジェクトを使ったもぐらたたき