PhysApp

趣味と開発関連のメモ置き場です

PlayerPrefsとEditorPrefsを削除するエディタウィンドウ【Unity】

Prefs一々呼び出して消すのも面倒だなーって思ったので、すごい簡単なエディタウィンドウを作りました。PlayerPrefsの全消去とKeyを指定してEditorPrefsを消去するだけの機能。すごいシンプル。

PlayerPrefsは全消去を頻繁にするのでAllDeleteのみとなってます。

Unity2018.3からPlayerPrefsを全削除できるメニューアイテムが標準で追加されてるので使うかと言われたら微妙な所。ただ、自分のUnityは2018.2なので作りました。

EditorPrefsはプロジェクトを跨いで値が保存されてるので、全消去しちゃうと他プロジェクトに影響が出かねないので、Keyを指定して消去するようにしてます。

下のプログラムをEditorフォルダに入れると、上のツールバー > Physalis > Tools > Prefs Delete からエディタウィンドウを出すことが出来ます。

using UnityEngine;
using UnityEditor;
using System;

/// <summary>
/// Prefs消去するエディタウィンドウ
/// </summary>
public class PrefsDeleteEditor : EditorWindow {
    
    string editorPrefKey = "";
    
    [MenuItem( "Physalis/Tools/Prefs Delete" )]
    public static void OpenPrefsSettingWindow( ) {
        PrefsDeleteEditor window = EditorWindow.GetWindow< PrefsDeleteEditor >( "Prefs Delete" );
        window.Show( );
    }
    
    void OnGUI( ) {
        WindowGUI( );
    }
    
    /// <summary>
    /// ウィンドウGUI
    /// </summary>
    private void WindowGUI( ) {
        GUILayout.BeginHorizontal( );
        GUILayout.Label( "PlayerPrefs" );
        if ( GUILayout.Button( "All Delete" ) ) {
            PlayerPrefs.DeleteAll( );
            PlayerPrefs.Save( );
    
            Debug.Log( "PlayerPrefs all deleted." );
        }
        GUILayout.EndHorizontal( );
    
        GUILayout.Space( 10 );

        GUILayout.BeginHorizontal( );
        GUILayout.Label( "EditorPrefs" );
        if ( GUILayout.Button( "Delete") ) {
            if ( string.IsNullOrEmpty( editorPrefKey ) ) {
                throw new Exception( "Key is null or empty." );
            }
    
            // Keyがあれば消す
            if ( EditorPrefs.HasKey( editorPrefKey ) ) {
                EditorPrefs.DeleteKey( editorPrefKey );
                Debug.Log( "EditorPrefs( " + editorPrefKey + " )deleted." );
            } else {
                Debug.LogWarning( "EditorPrefs key( " + editorPrefKey + " ) not found." );
            }
        }
        GUILayout.EndHorizontal( );
        editorPrefKey = EditorGUILayout.TextField( "Target EditorPrefs Key", editorPrefKey );
    }
}