关于Unity中如何制作简单的编辑器工具

在Unity中,编辑器的相关操作,需要添加UnityEditor这个引用,里面是一些编辑器操作方式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;//编辑器需要添加的引用
using UnityEditor.SceneManagement;//编辑器中的场景管理

//通过编辑器工具类,来实现编辑器的工具修改场景内容
public class One_clickModification : EditorWindow
{
    [MenuItem("Tools/添加组件")]//这个是将内容添加到tools里面
    public static void Open()
    {
        /*第一个参数窗口类型,决定窗口操作逻辑
         * 第二个参数确定是否为浮动窗口,选择false可有停靠效果
         * 第三个参数 显示窗口的标题
         * 第四个 目前不知道什么意思
         */
        EditorWindow.GetWindow(typeof(One_clickModification), true);
    }

    //这个是静态变量,用于赋值使用
    static string toInteractiveObject;
    static string toInteractedObject;
    static string toRayInspection;

    //这里添加的是常规GUI方式,用来动态输入获取数值,并赋值给上面的静态变量
    public GUIContent gUI = new GUIContent();
    public GUIContent gUI1 = new GUIContent();
    public GUIContent gUI2 = new GUIContent();

    void OnGUI()
    {
        
        
        gUI.text = EditorGUILayout.TextField("交互物体",gUI.text, GUILayout.MinWidth(100));
        gUI1.text = EditorGUILayout.TextField("被交互物体", gUI1.text, GUILayout.MinWidth(100));
        gUI2.text = EditorGUILayout.TextField("射线检测", gUI2.text, GUILayout.MinWidth(100));

        toInteractiveObject = gUI.text;
        toInteractedObject = gUI1.text; 
        toRayInspection = gUI2.text; 


        if (GUILayout.Button("确认更换"))
        {
            Change();
        }
    }

    public static void Change()
    {
        string[] Interactive = toInteractiveObject.Split('|');
        string[] Interacted = toInteractedObject.Split('|');
        string[] Ray = toRayInspection.Split('|');

        //给交互物体修改内容
        for (int i = 0; i < Interactive.Length; i++)
        {
            GameObject game = GameObject.Find(Interactive[i]);
            if (game != null)
            {
                if (game.transform.GetComponent<MyGameObject>() == null)
                {
                    game.AddComponent<MyGameObject>();
                }
                if (game.transform.GetComponent<BoxCollider>() == null)
                {
                    game.AddComponent<BoxCollider>();
                }
                if (game.transform.GetComponent<Rigidbody>() == null)
                {
                    game.AddComponent<Rigidbody>();
                    game.transform.GetComponent<Rigidbody>().useGravity = false;
                    game.transform.GetComponent<Rigidbody>().isKinematic = true;
                }
                if (game.transform.GetComponent<GrabableObject>() == null)
                {
                    game.AddComponent<GrabableObject>();
                }
            }
        }
        for (int i = 0; i < Interacted.Length; i++)
        {
            GameObject game = GameObject.Find(Interacted[i]);
            if (game != null)
            {
                if (game.transform.GetComponent<MyGameObject>() == null)
                {
                    game.AddComponent<MyGameObject>();
                }
                if (game.transform.GetComponent<BoxCollider>() == null)
                {
                    game.AddComponent<BoxCollider>();
                    game.transform.GetComponent<BoxCollider>().isTrigger = true;
                }
            }
             
            
           
        }
        for (int i = 0; i < Ray.Length; i++)
        {
            GameObject game = GameObject.Find(Ray[i]);
            if(game!=null)
            {
                if (game.transform.GetComponent<MyGameObject>() == null)
                {
                    game.AddComponent<MyGameObject>();
                }
                if (game.transform.GetComponent<BoxCollider>() == null)
                {
                    game.AddComponent<BoxCollider>();
                }
            }
           

        }
        //这个和在编辑器模式下按ctrl+S是一个道理,即保存当前场景改动
        EditorSceneManager.SaveScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene());
    }
    
}

在这里插入图片描述
这个是效果图

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值