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.

È stato utile?

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.

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top