private void GetCloneInfos(Func <int, int, bool> getIgnore, out LayersDic layersDic, out LayerCollsDic collsDic)
        {
            layersDic = new LayersDic();
            collsDic  = new LayerCollsDic();

            for (var i = 0; i < UnityLayerCount; i++)
            {
                var layerName = LayerMask.LayerToName(i);
                if (string.IsNullOrEmpty(layerName) == true)
                {
                    continue;
                }

                layersDic.Add(i, layerName);
            }

            var keys = new List <int>(layersDic.Keys).Select((key, index) => new { key, index });

            foreach (var layerID1 in keys)
            {
                var index1 = layerID1.index + UnityLayerCount;
                collsDic.Add(index1, new Dictionary <int, bool>());

                foreach (var layerID2 in keys)
                {
                    collsDic[index1].Add(layerID2.index + UnityLayerCount, !getIgnore(layerID1.key, layerID2.key));
                    collsDic[index1].Add(layerID2.key, !getIgnore(layerID1.key, layerID2.key));
                }
            }

            layersDic = layersDic
                        .Select((pair, i) => new { pair, i })
                        .ToDictionary(v => v.i + UnityLayerCount, v => v.pair.Value);
        }