[Fix] All in one + add dice
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AllIn13DShader
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
public class MaterialPrewarmer : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private Material[] materialsToPrewarm;
|
||||
[SerializeField] private GameObject[] objectsToPrewarm;
|
||||
[SerializeField] private Transform spawnPosT;
|
||||
[SerializeField] private GameObject overlayUI;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
StartRuntime();
|
||||
}
|
||||
|
||||
private IEnumerator PrewarmMaterials()
|
||||
{
|
||||
overlayUI.SetActive(true);
|
||||
|
||||
// Graphics.DrawMesh uses Matrix4x4 instead of spawn position
|
||||
Matrix4x4 matrix = Matrix4x4.TRS(spawnPosT.position, Quaternion.identity, Vector3.one * 0.01f);
|
||||
Mesh quadMesh = CreateQuadMesh();
|
||||
for(int i = 0; i < materialsToPrewarm.Length; i++) Graphics.DrawMesh(quadMesh, matrix, materialsToPrewarm[i], 0);
|
||||
DestroyImmediate(quadMesh);
|
||||
|
||||
// Only use spawn position for complex prefabs that still need instantiation
|
||||
for(int i = 0; i < objectsToPrewarm.Length; i++)
|
||||
{
|
||||
GameObject temp = Instantiate(objectsToPrewarm[i], spawnPosT.position, Quaternion.identity);
|
||||
temp.transform.localScale = Vector3.one * 0.01f;
|
||||
DestroyImmediate(temp);
|
||||
}
|
||||
|
||||
yield return null;
|
||||
overlayUI.SetActive(false);
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
private void StartRuntime()
|
||||
{
|
||||
if(!Application.isPlaying) return;
|
||||
StartCoroutine(PrewarmMaterials());
|
||||
}
|
||||
|
||||
private Mesh CreateQuadMesh()
|
||||
{
|
||||
Mesh mesh = new Mesh
|
||||
{
|
||||
vertices = new Vector3[] {
|
||||
new Vector3(-0.5f, -0.5f, 0),
|
||||
new Vector3(0.5f, -0.5f, 0),
|
||||
new Vector3(0.5f, 0.5f, 0),
|
||||
new Vector3(-0.5f, 0.5f, 0)
|
||||
},
|
||||
triangles = new int[] { 0, 1, 2, 0, 2, 3 },
|
||||
uv = new Vector2[] {
|
||||
new Vector2(0, 0), new Vector2(1, 0),
|
||||
new Vector2(1, 1), new Vector2(0, 1)
|
||||
}
|
||||
};
|
||||
return mesh;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user