LoginSignup
3
2

More than 5 years have passed since last update.

Editor拡張でPlayerSettingの値をいじる

Last updated at Posted at 2016-10-22

Editor拡張練習がてらにPlayerSettingでいちいち変更していたアプリ名などの項目を、独自のウィンドウを作り、そこから編集できるようにしたい。

UnityEditor拡張基礎

unityでは独自でエデッターウィンドウを作成することがでます。そのためにはまず「Editor」フォルダをUnityプロジェクトのAsset下に作らなければなりません。そして、Editorフォルダの中にスクリプトを入れて、初めて機能します。

Asset

Scene
Script
Editor

ここにいれる

今回はPlayerSettingの値をいじるので、PlayerSettingという名前でc#スクリプトを作ります。

PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
    [MenuItem("KitouSpecial/BuildSetting")]
    static void Open()
    {
        EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
    }

    void OnGUI()
    {
        GUI.skin.label.fontSize = 24;
        GUILayout.Label("PlayerSetting");
        GUI.skin.label.fontSize = 0;
    }
}

エディッターウィンドウを使うので、EditorWindowクラスを使います。
MenuItemで、Unityのツールバーに項目を増やすことができます。この場合は
スクリーンショット 2016-10-22 14.13.03.png

こういう風になりますね

次にopen関数ですが、これはウィンドウが開いたときに一回だけ呼ばれる関数です。start関数と似ています。その中のEditorWindow.GetWindowで、ウィンドウの名前を指定することができます。

だいたい分かるとは思いますがOnGUI関数はそのままエディッターウィンドウのなかを作っていきます
fontSizeはこの後の文字の大きさを変えることができます。大きさを戻すのを忘れないようにしましょう。
GUILayout.Labelで文字を書き出すことができます。この場合は題名を書いてます。

文字入力

では、ウィンドウに文字を入力できるようにしたいと思います。
適当にstring変数を作り、TextFieldを作り文字を入力できようにします。

PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
    string productName;//商品名
    string companyName;//会社名
    string bundleVersion;//バージョン
    string bundleIdentifier;// パッケージ名

    [MenuItem("KitouSpecial/BuildSetting")]
    static void Open()
    {
        EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
    }

    void OnGUI()
    {
        //プレイヤーセッティング
        GUI.skin.label.fontSize = 24;
        GUILayout.Label("PlayerSetting");
        GUI.skin.label.fontSize = 0;
        productName = EditorGUILayout.TextField ("アプリ名", productName);
        companyName = EditorGUILayout.TextField ("チーム名", companyName);
        bundleVersion = EditorGUILayout.TextField ("バージョン", bundleVersion);
        bundleIdentifier = EditorGUILayout.TextField("BundleIdentifier",bundleIdentifier);
    }
}

セーブとロードとレイアウト

このままではただ文字を入力するだけのウィンドウなので開いたときにPlayerSettingを読み取れるようにし、ボタンを押したら記入してある文字がPlayerSettingに書き出されるようにします。
そして、仕切りや、スペースなどを用いてある程度見やすくします。

PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
    string productName;//商品名
    string companyName;//会社名
    string bundleVersion;//バージョン
    string bundleIdentifier;// パッケージ名

    bool one = true;

    [MenuItem("KitouSpecial/BuildSetting")]
    static void Open()
    {
        EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
    }

    void OnGUI()
    {
        //プレイヤーセッティング
        EditorGUILayout.BeginVertical( GUI.skin.box );
        GUI.skin.label.fontSize = 24;
        GUILayout.Label("PlayerSetting");
        GUI.skin.label.fontSize = 0;
        GUILayout.Space(15);
        productName = EditorGUILayout.TextField ("アプリ名", productName);
        GUILayout.Space(15);
        companyName = EditorGUILayout.TextField ("チーム名", companyName);
        GUILayout.Space(15);
        bundleVersion = EditorGUILayout.TextField ("バージョン", bundleVersion);
        GUILayout.Space(15);
        bundleIdentifier = EditorGUILayout.TextField("BundleIdentifier",bundleIdentifier);
        GUILayout.Space(15);
        if (GUILayout.Button ("Save")) {
            saveSetting ( );
        }
        EditorGUILayout.EndVertical();
        GUILayout.Space(30);

        if (one) {
            LoadSetting ();
            one = false;
        }
    }

    void LoadSetting( ) {
        productName = PlayerSettings.productName;
        companyName = PlayerSettings.companyName;
        bundleVersion = PlayerSettings.bundleVersion;
        bundleIdentifier = PlayerSettings.bundleIdentifier;
    }

    void saveSetting ( ) {
        PlayerSettings.productName = productName;
        PlayerSettings.companyName = companyName;
        PlayerSettings.bundleVersion = bundleVersion;
        PlayerSettings.bundleIdentifier = bundleIdentifier;
    }
}

セーブとロードの仕方は上記の通りです。GUILayout.Space(int)を使うことで好きなだけ空白を作ることができます。

スクリーンショット 2016-10-22 14.52.56.png

次はEditorWindowを使ってビルドのあれこれをやってみたいと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2