Init
This commit is contained in:
137
Assets/Roaming/Scripts/LoadDynamic/DynamicLoader.cs
Normal file
137
Assets/Roaming/Scripts/LoadDynamic/DynamicLoader.cs
Normal file
@@ -0,0 +1,137 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
|
||||
public class DynamicLoader : MonoBehaviour
|
||||
{
|
||||
public static DynamicLoader Instance;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Instance = this;
|
||||
}
|
||||
/// <summary>
|
||||
/// <20>Ѽ<EFBFBD><D1BC>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
private List<GameObject> poolLoaded;
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
private List<GameObject> poolCache;
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
/// </summary>
|
||||
public List<string> poolWillLoaded;
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><F3BBBAB4><EFBFBD>
|
||||
/// </summary>
|
||||
public int cacheMaxNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
string showLayer = "Default";
|
||||
|
||||
/// <summary>
|
||||
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
|
||||
/// </summary>
|
||||
string hideLayer = "CacheLayer";
|
||||
|
||||
int showLayerIndex;
|
||||
|
||||
int hideLayerIndex;
|
||||
|
||||
public string LastPos;
|
||||
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
cacheMaxNum = 10;
|
||||
poolLoaded = new List< GameObject>();
|
||||
poolCache = new List<GameObject>();
|
||||
hideLayerIndex = LayerMask.NameToLayer(hideLayer);
|
||||
showLayerIndex = LayerMask.NameToLayer(showLayer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD>ȡҪ<C8A1><D2AA><EFBFBD>صĶ<D8B5><C4B6><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="objName"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <returns></returns>
|
||||
GameObject GetObjectFromCache(string objName)
|
||||
{
|
||||
return poolCache.FirstOrDefault<GameObject>(obj => obj.name == objName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD>Ѽ<EFBFBD><D1BC><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡҪ<C8A1><D2AA><EFBFBD>صĶ<D8B5><C4B6><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="objName"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
/// <returns></returns>
|
||||
GameObject GetObjectFromLoaded(string objName)
|
||||
{
|
||||
return poolLoaded.FirstOrDefault<GameObject>(obj => obj.name == objName);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD>ظ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="preNames">Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
||||
public void Load(string[] preNames)
|
||||
{
|
||||
// <20><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4>ڵ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
List<GameObject> lstFromCache = poolCache.FindAll(obj => preNames.Contains(obj.name));
|
||||
foreach (var obj in lstFromCache)
|
||||
{
|
||||
obj.layer = showLayerIndex;
|
||||
poolLoaded.Add(obj);
|
||||
poolCache.Remove(obj);
|
||||
}
|
||||
|
||||
// <20>Ƴ<EFBFBD><C6B3>Ѽ<EFBFBD><D1BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>Ҫ<EFBFBD><D2AA>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
List<GameObject> lstFromLoaded = poolLoaded.FindAll(obj => !preNames.Contains(obj.name));
|
||||
foreach (var obj in lstFromLoaded)
|
||||
{
|
||||
obj.layer = hideLayerIndex;
|
||||
poolCache.Add(obj);
|
||||
if (poolCache.Count > cacheMaxNum)
|
||||
{
|
||||
Destroy(poolCache[0]);
|
||||
poolCache.RemoveAt(0);
|
||||
}
|
||||
poolLoaded.Remove(obj);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>е<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
GameObject tmp = null;
|
||||
foreach (var name in preNames)
|
||||
{
|
||||
tmp = poolLoaded.FirstOrDefault(obj => obj.name == name);
|
||||
if (tmp == null)
|
||||
{
|
||||
StartCoroutine(GeneratePrefab(name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator GeneratePrefab(string name)
|
||||
{
|
||||
string parentName = name.Substring(0, name.IndexOf("_")); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
GameObject tmp = Resources.Load<GameObject>("Prefabs\\" + name);
|
||||
tmp = GameObject.Instantiate(tmp, GameObject.Find(parentName).transform);
|
||||
tmp.name = name;
|
||||
tmp.layer = showLayerIndex;
|
||||
poolLoaded.Add(tmp);
|
||||
|
||||
// DataLoader.Instance.AttachOperation();
|
||||
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
}
|
||||
|
||||
}
|
||||
11
Assets/Roaming/Scripts/LoadDynamic/DynamicLoader.cs.meta
Normal file
11
Assets/Roaming/Scripts/LoadDynamic/DynamicLoader.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 70dace2bb40041843a267fcf7d506fb8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
27
Assets/Roaming/Scripts/LoadDynamic/PosInfo.cs
Normal file
27
Assets/Roaming/Scripts/LoadDynamic/PosInfo.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class PosInfo : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ص<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
public string[] preNames;
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>λ<EFBFBD><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="collision"></param>
|
||||
public void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
// <20>жϽ<D0B6><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>
|
||||
if (DynamicLoader.Instance.LastPos != name)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
DynamicLoader.Instance.LastPos = name;
|
||||
// <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
||||
DynamicLoader.Instance.Load(preNames);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Roaming/Scripts/LoadDynamic/PosInfo.cs.meta
Normal file
11
Assets/Roaming/Scripts/LoadDynamic/PosInfo.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb45e4272b24ff145a1920cf04a0e496
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user