Unity Warping tra più materiali
Domanda
Ho bisogno di fermare attraverso 10 diversi materiali allegati a uno dei miei oggetti di gioco, ma per qualche motivo, il codice che ho scritto non funziona.Ho passato l'ultima ora cercando di allenarmi perché e sono abbastanza bruciato.
Potrebbe qualcuno con gli occhi freschi, per favore dai un'occhiata e vedi se sto facendo un po 'stupido?
public class LerpMaterials : MonoBehaviour
{
public List<Material> materials = new List<Material>();
public float lerpSpeed;
int currentMaterialNo;
Material currentMaterial;
Material targetMaterial;
bool lerpingMaterial;
float lerp;
void Start ()
{
if (materials.Count < 2) return;
currentMaterialNo = 0;
currentMaterial = materials[currentMaterialNo];
targetMaterial = materials[currentMaterialNo+1];
}
void Update ()
{
if (materials.Count < 2) return;
lerp += lerpSpeed;
renderer.material.Lerp(currentMaterial, targetMaterial, lerp);
if (lerp >= 1)
SwitchMaterial();
}
void SwitchMaterial()
{
if ( currentMaterialNo >= (materials.Count - 1) )
currentMaterialNo = 0;
else
currentMaterialNo++;
currentMaterial = materials[currentMaterialNo];
targetMaterial = materials[currentMaterialNo++];
lerp = 0;
}
.
}
Il mio elenco contiene ogni singolo materiale e il mio rendering in rete contiene anche i materiali richiesti.Ma nulla accade diverso da un'istanza del primo materiale che appare nel rendering del materiale.Nessun altro movimento.
Soluzione
Probabilmente hai bisogno di impostare la tua lerpseed.
Se lerpseed= 0, quindi non accadrà alcuna modifica.
Se lerpseed> 1, quindi una volta per fotogramma, cambierà il materiale.
Dal momento che il primo materiale è l'unica cosa che mostra e non looping attraverso ogni materiale rapidamente, la lerpseed è probabilmente 0. Tuttavia, finirai con un problema con questa funzione in quanto cambierà ogni fotogramma o estremamente rapido.Il problema è con il modo in cui il Lerp viene incrementato.
invece di:
lerp += lerpSpeed;
.
Usa questo invece:
lerp += lerpSpeed * Time.deltaTime;
.
Che cosa farà è invece di incrementare il Lerp di LerpsPeed una volta per fotogramma (che dipende dalle prestazioni del computer), invece, incrementerà a Lerpseed da lerpseed ogni secondo, che garantirà un effetto coerente su ogni macchina.
.