fix the render texture issue
This commit is contained in:
@@ -16,7 +16,7 @@ RenderTexture:
|
||||
m_Height: 512
|
||||
m_AntiAliasing: 1
|
||||
m_MipCount: -1
|
||||
m_DepthStencilFormat: 0
|
||||
m_DepthStencilFormat: 90
|
||||
m_ColorFormat: 12
|
||||
m_MipMap: 0
|
||||
m_GenerateMips: 1
|
||||
|
||||
@@ -6,7 +6,7 @@ using BrewMonster.Scripts;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
public class LitModelHolder : MonoBehaviour
|
||||
public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
{
|
||||
[SerializeField] private AddressableObject[] addressableObjects;
|
||||
private CECHostPlayer _hostPlayer;
|
||||
@@ -23,7 +23,9 @@ public class LitModelHolder : MonoBehaviour
|
||||
[SerializeField] private int _maxUnloadsPerTick = 16;
|
||||
|
||||
private int _scanIndex = 0;
|
||||
private List<AddressableObject> _objectsToLoad = new List<AddressableObject>();
|
||||
|
||||
// this list is only available if we want to wait until all the objects are loaded.
|
||||
private List<AddressableObject> _objectsToLoad = new List<AddressableObject>();
|
||||
private List<AddressableObject> _objectsToUnload = new List<AddressableObject>();
|
||||
|
||||
private Vector3 _lastHostPos;
|
||||
@@ -80,7 +82,7 @@ public class LitModelHolder : MonoBehaviour
|
||||
|
||||
await UniTask.DelayFrame(1); // wait for the host player to be initialized.
|
||||
|
||||
await TickStreaming(_hostPlayer.transform.position, immediateSqr, paddingSqr, destroyToken);
|
||||
await TickStreaming(_hostPlayer.transform.position, immediateSqr, paddingSqr, true, destroyToken);
|
||||
}
|
||||
|
||||
private async UniTask StreamByDistanceLoop(CancellationToken destroyToken)
|
||||
@@ -119,13 +121,13 @@ public class LitModelHolder : MonoBehaviour
|
||||
_hasLastHostPos = true;
|
||||
_lastHostPos = hostPos;
|
||||
|
||||
await TickStreaming(hostPos, immediateSqr, paddingSqr, destroyToken);
|
||||
await TickStreaming(hostPos, immediateSqr, paddingSqr, false, destroyToken);
|
||||
|
||||
await UniTask.Delay(intervalMs, cancellationToken: destroyToken);
|
||||
}
|
||||
}
|
||||
|
||||
private async UniTask TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken)
|
||||
private async UniTask TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, bool waitUntilFinished, CancellationToken destroyToken)
|
||||
{
|
||||
if (addressableObjects == null || addressableObjects.Length == 0)
|
||||
{
|
||||
@@ -160,6 +162,7 @@ public class LitModelHolder : MonoBehaviour
|
||||
if (!_currentObjectToCheck.IsLoaded && !_currentObjectToCheck.IsLoading)
|
||||
{
|
||||
_currentObjectToCheck.LoadAsset().Forget();
|
||||
_objectsToLoad.Add(_currentObjectToCheck);
|
||||
}
|
||||
}
|
||||
else if (distSqr > paddingSqr)
|
||||
@@ -176,6 +179,14 @@ public class LitModelHolder : MonoBehaviour
|
||||
{
|
||||
obj.UnloadAsset();
|
||||
}
|
||||
|
||||
while (!IsFinishedLoadingObjects() && waitUntilFinished)
|
||||
{
|
||||
await UniTask.DelayFrame(1, cancellationToken: destroyToken);
|
||||
}
|
||||
_objectsToLoad.Clear();
|
||||
|
||||
BMLogger.Log("[LitModelHolder] All objects are loaded.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -186,6 +197,30 @@ public class LitModelHolder : MonoBehaviour
|
||||
{
|
||||
return CECGameRun.Instance.GetHostPlayer();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return True if all the objects that are needed to be loaded are loaded.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private bool IsFinishedLoadingObjects()
|
||||
{
|
||||
AddressableObject obj = null;
|
||||
for (int i = 0; i < _objectsToLoad.Count; i++)
|
||||
{
|
||||
obj = _objectsToLoad[i];
|
||||
if (obj == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!obj.IsLoaded && !obj.IsLoading)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user