Ich habe eine große Anzahl von vorgefertigten. Diese prefabs haben mehrere Instanzen des gleichen Skript, das die folgenden Felder enthält:Unity serialisierte Felder Migration
[SerializeField]
private AudioClip[] _audioClip;
[SerializeField, Range(0, 1)]
private float _volume = 1;
Da ich die Lautstärke der einzelnen Audioclip separat steuern können möchte, würde ich gerne verwenden:
[SerializeField]
private VolumedAudioClip[] _audioClips;
Wo:
[Serializable]
public class VolumedAudioClip
{
[SerializeField]
public AudioClip _audioClip;
[SerializeField, Range(0, 1)]
public float _volume = 1;
}
Problem ist, dass, wenn ich es jetzt ändern, die alle die prefabs werden die Verweise auf die a verlieren udio Clips bereits eingestellt.
Ich weiß von FormerlySerializedAs
Attribut, es hilft nicht in meinem Fall (nur wenn Sie ein Feld umbenennen).
Meine aktuelle Richtung ist es, ein Editor-Skript zu schreiben, das aus den alten Feldern liest und die Daten in die neuen Felder legt.
glücklich sein würde keine bessere Vorschläge zu hören ...
, dass ein smart (faul) Weg ist, es zu tun. Fügen Sie einfach ein serialisiertes Feld Ihrer benutzerdefinierten Klasse in das Skript ein und führen Sie for-loop aus, um Referenzen der Audioclips mithilfe der Editor-Methode zu kopieren. Sobald Sie fertig sind, löschen Sie einfach Ihre alten Felder. Das sollte gut funktionieren.Lassen Sie mich wissen, wenn Sie Code benötigen –
Das ist genau das, was ich tue. Problem ist, dass das Skript, das dieses Feld enthält, nicht vom Typ MonoBehavior ist, also muss ich Reflektion verwenden, um alle Felder dieser Typen zu erhalten –
welche Art von Skript ist das? –