docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class CustomTrackedObjectAttribute

    Indicates that the class is used to Track Property Variants for a particular Type.

    Inheritance
    object
    Attribute
    CustomTrackedObjectAttribute
    Namespace: UnityEngine.Localization.PropertyVariants
    Assembly: Unity.Localization.dll
    Syntax
    [AttributeUsage(AttributeTargets.Class)]
    public class CustomTrackedObjectAttribute : Attribute
    Examples

    This shows how to create a custom TrackedObject to support the AudioSource component.

    [Serializable]
    [DisplayName("Audio Source")]
    [CustomTrackedObject(typeof(AudioSource), false)]
    public class TrackedAudioSource : TrackedObject
    {
        public override AsyncOperationHandle ApplyLocale(Locale variantLocale, Locale defaultLocale)
        {
            var audioClipProperty = GetTrackedProperty("m_audioClip");
            if (audioClipProperty == null)
                return default;
    
            // Check if the Asset is stored in an Asset Table
            if (audioClipProperty is LocalizedAssetProperty localizedAssetProperty &&
                localizedAssetProperty.LocalizedObject is LocalizedAudioClip localizedAudioClip)
            {
                localizedAudioClip.LocaleOverride = variantLocale;
                var loadHandle = localizedAudioClip.LoadAssetAsync();
                if (loadHandle.IsDone)
                    AudioClipLoaded(loadHandle);
                else
                {
                    loadHandle.Completed += AudioClipLoaded;
                    return loadHandle;
                }
            }
            // Check if the Asset is stored locally
            else if (audioClipProperty is UnityObjectProperty localAssetProperty)
            {
                if (localAssetProperty.GetValue(variantLocale.Identifier, defaultLocale.Identifier, out var clip))
                    SetAudioClip(clip as AudioClip);
            }
    
            return default;
        }
    
        void AudioClipLoaded(AsyncOperationHandle<AudioClip> loadHandle)
        {
            SetAudioClip(loadHandle.Result);
        }
    
        void SetAudioClip(AudioClip clip)
        {
            var source = (AudioSource)Target;
            source.Stop();
            source.clip = clip;
            if (clip != null)
                source.Play();
        }
    
        public override bool CanTrackProperty(string propertyPath)
        {
            // We only care about the Audio clip
            return propertyPath == "m_audioClip";
        }
    }

    Constructors

    Name Description
    CustomTrackedObjectAttribute(Type, bool)

    Creates a new instance of a CustomTrackedObjectAttribute.

    In This Article
    Back to top
    Copyright © 2024 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)