Fonction de traitement de l'importation des ressources de l'éditeur Unity OnPostprocessAudio : analyse approfondie et cas pratiques

Utilisation de la fonction de traitement d'importation des ressources de l'éditeur Unity OnPostprocessAudio

https://github.com/AlianBlank/download.unity.com

Cliquez sur la couverture pour accéder à la page de téléchargement

Introduction

Dans Unity, nous pouvons utiliser la fonction de traitement de l'importation des ressources de l'éditeur ( OnPostprocessAudio) pour personnaliser le processus d'importation des ressources audio. Cette fonction est héritée de la classe AssetPostprocessorEn réécrivant cette fonction, nous pouvons effectuer certaines opérations personnalisées après l'importation de la ressource audio.

Hériter AssetPostprocessor

Tout d'abord, nous devons créer un AssetPostprocessorscript qui hérite de. Ce script sera utilisé pour gérer le processus d'importation des ressources audio. Voici un exemple de code :

using UnityEditor;
using UnityEngine;

public class AudioPostprocessor : AssetPostprocessor
{
    void OnPostprocessAudio(AudioClip clip)
    {
        // 在这里编写自定义的音频导入处理逻辑
    }
}

Dans cet exemple, nous avons créé un AudioPostprocessorscript appelé et remplacé OnPostprocessAudiola fonction.

Logique de traitement d'importation audio personnalisée

Dans OnPostprocessAudiola fonction, nous pouvons écrire une logique de traitement d'importation audio personnalisée. Voici un exemple de code montrant comment modifier les propriétés d'une ressource audio après l'avoir importé :

using UnityEditor;
using UnityEngine;

public class AudioPostprocessor : AssetPostprocessor
{
    void OnPostprocessAudio(AudioClip clip)
    {
        // 将音频的音量设置为0.5
        AudioImporter audioImporter = (AudioImporter)assetImporter;
        AudioImporterSampleSettings sampleSettings = audioImporter.defaultSampleSettings;
        sampleSettings.volume = 0.5f;
        audioImporter.defaultSampleSettings = sampleSettings;
    }
}

Dans cet exemple, nous prenons l'importateur audio ( AudioImporter) et modifions ses paramètres d'échantillonnage par défaut ( defaultSampleSettings). Nous avons réglé le volume de l'audio sur 0,5 afin que lorsque l'audio est lu après l'importation, son volume soit réduit de moitié.

Vous pouvez écrire n'importe quelle logique de traitement d'importation audio personnalisée en fonction de vos besoins. Par exemple, vous pouvez modifier les paramètres de compression audio, définir les propriétés de la boucle, ajouter des balises, etc.

Utiliser la fonction OnPostprocessAudio

Pour utiliser OnPostprocessAudioune fonction, AssetPostprocessorplacez simplement le script dont vous héritez n'importe où dans votre projet. Lorsque vous importez un élément audio, Unity appelle automatiquement OnPostprocessAudiola fonction et exécute la logique personnalisée que vous avez écrite.

Notez que OnPostprocessAudiola fonction ne sera appelée que lorsque la ressource audio est importée, pas lorsque la ressource est mise à jour ou supprimée.

exemple de code

using UnityEditor;
using UnityEngine;

public class MyAudioPostprocessor : AssetPostprocessor
{
    void OnPostprocessAudio(AudioClip audioClip)
    {
        // 获取导入的音频资源
        AudioImporter audioImporter = assetImporter as AudioImporter;

        // 根据不同平台设置音频的压缩格式
        SetCompressionFormat(audioImporter);

        // 根据不同平台设置音频的加载方式
        SetLoadType(audioImporter);

        // 调整音频的音量
        AdjustVolume(audioClip);

        // 设置资源打包标签
        SetAssetBundleTag(audioImporter);

        // 根据不同平台设置音频的采样率
        SetSampleRate(audioImporter);
    }

    // 根据不同平台设置音频的压缩格式
    private void SetCompressionFormat(AudioImporter audioImporter)
    {
        AudioImporterSampleSettings sampleSettings = audioImporter.defaultSampleSettings;

        // Android 平台使用 OGG 压缩格式
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
        {
            sampleSettings.compressionFormat = AudioCompressionFormat.Vorbis;
        }
        // iOS 平台使用 AAC 压缩格式
        else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
        {
            sampleSettings.compressionFormat = AudioCompressionFormat.AAC;
        }
        // 其他平台使用 MP3 压缩格式
        else
        {
            sampleSettings.compressionFormat = AudioCompressionFormat.MP3;
        }

        audioImporter.defaultSampleSettings = sampleSettings;
    }

    // 根据不同平台设置音频的加载方式
    private void SetLoadType(AudioImporter audioImporter)
    {
        AudioImporterLoadType loadType = AudioImporterLoadType.CompressedInMemory;

        // Android 平台使用解压缩加载方式
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
        {
            loadType = AudioImporterLoadType.StreamFromDisc;
        }

        audioImporter.loadType = loadType;
    }

    // 调整音频的音量
    private void AdjustVolume(AudioClip audioClip)
    {
        float[] audioData = new float[audioClip.samples * audioClip.channels];
        audioClip.GetData(audioData, 0);
        for (int i = 0; i < audioData.Length; i++)
        {
            audioData[i] *= 0.5f; // 调整音量为原来的一半
        }
        audioClip.SetData(audioData, 0);
    }

    // 设置资源打包标签
    private void SetAssetBundleTag(AudioImporter audioImporter)
    {
        audioImporter.assetBundleName = "AudioBundle";
        audioImporter.assetBundleVariant = "unity3d";
    }

    // 根据不同平台设置音频的采样率
    private void SetSampleRate(AudioImporter audioImporter)
    {
        AudioImporterSampleSettings sampleSettings = audioImporter.defaultSampleSettings;

        // Android 平台设置采样率为 44100
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android)
        {
            sampleSettings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate;
            sampleSettings.sampleRateOverride = 44100;
        }
        // iOS 平台设置采样率为 48000
        else if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
        {
            sampleSettings.sampleRateSetting = AudioSampleRateSetting.OverrideSampleRate;
            sampleSettings.sampleRateOverride = 48000;
        }
        // 其他平台使用默认采样率
        else
        {
            sampleSettings.sampleRateSetting = AudioSampleRateSetting.PreserveSampleRate;
        }

        audioImporter.defaultSampleSettings = sampleSettings;
    }
}

Dans le code ci-dessus, nous définissons différents paramètres d'importation en fonction de différentes plates-formes pour garantir le meilleur effet et les meilleures performances des ressources audio sur différentes plates-formes. Nous obtenons la méthode de chargement appropriée, un débit binaire raisonnable et un taux d'échantillonnage raisonnable en fonction de la longueur audio, et appliquons ces paramètres aux paramètres d'échantillonnage par défaut de l'importateur audio.

Veuillez noter que la logique de jugement dans l'exemple de code est un exemple simple, vous pouvez le modifier et l'étendre en fonction de vos besoins réels.

Grâce aux exemples de codes ci-dessus, vous pouvez personnaliser les ressources audio en fonction de vos propres besoins pour obtenir de meilleurs effets d'importation et une meilleure expérience utilisateur.

Résumer

En utilisant la fonction de traitement d'importation des ressources de l'éditeur Unity OnPostprocessAudio, nous pouvons exécuter une logique de traitement personnalisée une fois l'importation des ressources audio terminée. Cela nous permet de modifier les propriétés et les paramètres des ressources audio en fonction des besoins du projet, afin de mieux contrôler et gérer les ressources audio.


Toutes mes excuses pour les éventuelles erreurs dans mes articles techniques. Des efforts ont été faits pour s'assurer que les informations sont exactes et fiables, mais en raison de l'évolution constante du paysage technologique, les erreurs sont inévitables. Si vous trouvez un bogue ou avez des questions, s'il vous plaît contactez-moi. Je ferai de mon mieux pour corriger les erreurs et fournir des informations plus précises.

Mes plus sincères excuses à nouveau, je vais revoir et mettre à jour l'article avec plus de soin pour offrir une meilleure expérience de lecture et des informations techniques précises.

Merci de votre compréhension et de votre soutien.

Je suppose que tu aimes

Origine blog.csdn.net/alianhome/article/details/132176425
conseillé
Classement