Have you made any useful utilities with Odin?
Login and submit your creations hereJust a simple attribute that disables a field in prefab variants, thus avoiding allowing overrides in fields you don't want to be changed from the original.
This works even on prefab stages.
Usage
public class SampleScript : MonoBehaviour
{
[DisableInPrefabVariants]
public int somethingToSetOnlyOnOriginalPrefab;
public int overridableValue;
}
DisableInPrefabVariantsAttribute.cs
[AttributeUsage(AttributeTargets.Field)]
public class DisableInPrefabVariantsAttribute : Attribute
{
}
DisableInPrefabVariantsAttributeStateUpdater.cs
[assembly: RegisterStateUpdater(typeof(DisableInPrefabVariantsAttributeStateUpdater))]
namespace DisableInPrefabVariants
{
public class DisableInPrefabVariantsAttributeStateUpdater : AttributeStateUpdater<DisableInPrefabVariantsAttribute>
{
private bool _disable;
protected override void Initialize()
{
var unityObjectTarget = Property.Tree.WeakTargets[0] as UnityEngine.Object;
if (unityObjectTarget == null) return;
var stage = PrefabStageUtility.GetCurrentPrefabStage();
if (stage != null)
{
unityObjectTarget = stage.openedFromInstanceObject;
}
var type = PrefabUtility.GetPrefabAssetType(unityObjectTarget);
bool isPartOfVariant = PrefabUtility.IsPartOfVariantPrefab(unityObjectTarget);
_disable = type == PrefabAssetType.Variant || isPartOfVariant;
}
public override void OnStateUpdate()
{
if (Property.State.Enabled && _disable)
{
Property.State.Enabled = false;
}
}
}
}
#endif