Unity通过脚本修改Prefab预设【用于写插件编辑器】

前言

最近在做一个编辑器。给策划美术调动作打击感。其中需要修改预设。中间碰到点小坑。然而并没有百度到。后面经过查阅API后,找到了解决方法。

在这里就分享下了。编辑预设。一般可以用于做一些编辑器,比如动作编辑器等等。如下。

这时就需要我们队预设编辑。这样策划美术用编辑器编辑预设。比如模型预设。地形预设等等。我们就能解放双手了。。

好了言归正传。解决方案如下。

预览图

1

本文示例截图

1

2

 

解决方案

核心API

//标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。
EditorUtility.SetDirty(prefab);

示例代码

using UnityEngine;
using System.Collections;

public class TestEditorPrefab : MonoBehaviour
{

    public string name;
    public int speed;
    public Color color;
    private MeshFilter mesh;
    // Use this for initialization
    void Start()
    {
       
    }

}

 

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;

public class SkillConfigTools : MonoBehaviour
{
    public static SkillConfigToolsWindows mSkillConfigToolsWindows;
    [MenuItem("ModelConfig/打开配置界面", false, 10)]
    static public void StartFindABInResources()
    {
        mSkillConfigToolsWindows = EditorWindow.GetWindow<SkillConfigToolsWindows>(false, "模型动作配置", true);
    }
}

 

using UnityEditor;
using UnityEngine;
using System.Collections.Generic;

public class SkillConfigToolsWindows : EditorWindow
{
    private GameObject prefab = null;
    private TestEditorPrefab mTestEditor = null;
    /// <summary> 刷新窗口. </summary>
    void OnSelectionChange() { Repaint(); }
    /// <summary>UI绘制区域.</summary>
    void OnGUI()
    {
        if (mTestEditor == null) FindObj();
        else
        {
            mTestEditor.name = EditorGUILayout.TextField("名称", mTestEditor.name);
            mTestEditor.speed = EditorGUILayout.IntField("速度", mTestEditor.speed);
            mTestEditor.color = EditorGUILayout.ColorField("速度", mTestEditor.color);
            //skill.powerLevel = EditorGUILayout.IntField("攻击强度", skill.powerLevel);
            if (GUILayout.Button("保存预设"))
            {
                //标记预设为修改状态 这步很重要,不执行这步操作。关闭Unity后。预设并不会保存。
                EditorUtility.SetDirty(prefab);
                Debug.LogError("保存成功");
            }
        }
    }

    void FindObj()
    {
        prefab = Resources.Load<GameObject>("Cube") as GameObject;
        mTestEditor = prefab.GetComponent<TestEditorPrefab>();
    }
}

 工程下载

链接:http://pan.baidu.com/s/1jGMlUmi 密码:fyid

 

本文链接:

https://bobsong.cn/939.html
1 + 2 =
快来做第一个评论的人吧~