学习目标
- 了解Unity编辑器的开发思路
- 检视器属性控制
- 监视器扩展显示开发
- 顶部菜单栏开发
- 学习弹窗开发
- 学习场景编辑器开发
一、什么是编辑器开发?
编辑器开发:对Unity编辑器实现功能的扩展,一般会使用它开发项目工具或者实现Unity插件。
C#特性:[System.Serializable] 用于在C#运行时,传递程序中的各种元素(类,结构体,变量,方法,枚举,组件)的行为信息的声明标签,一个声明标签是通过放置在它所在的应用元素的前面的方括号[]中来描述的。
二、编辑器基础知识及检视器属性
编辑器中的特殊目录: 1、Plugins:需要跨语言调用的代码逻辑代码存储目录,手机SDK接入; 2、Resources:存储跟随游戏包的资源目录; 3、StreamingAssets:只读,存储跟随游戏包的资源目录; 4、编辑器目录:Editor存放编辑器相关的逻辑和资源; 在打包生成时不会生成到项目中,玩家不会用到编辑器中的内容,Editor目录下的脚本,无法挂载到场景对象下。 5、Unity代码的逻辑命名空间:UnityEngine,Unity编辑器命名空间:UnityEditor,此命名空间不要出现在代码中,否则会导致打包失败。 检视器面板简单扩展: 检视器属性控制: [HideInInspector] 特性:隐藏公共的成员变量,防止Inspector的值影响到它,同时保证脚本中变量的可访问度。 [SerializeField] 特性:私有变量,检视面板可见,Unity会将对象序列化存储,所有即使是私有的,那么标记为可序列化之后,就会显示,共有的默认是可序列化的; [Serializable] 特性:对象如果不标记为可序列化的,则Unity在存储的时候,会认为他不可以被序列化,那么也就无法显示,Unity中的内置Json工具运行原理与之类似 [Space(int)]:当前成员变量上方留多少像素空白区域 [Header(string)]:当前成员变量上方加入一个标题文字 [Tooltip(string)] 特性:添加变量悬浮提示文字,一个成员变量可以添加多个特性 [Range(n,m)] 特性:给数值设定范围(最小n,最大m) [Multiline(int)] 特性:指定输入框,拥有多少行 [TextArea(min,max)] 特性:默认显示min行,最多显示max行,再多就会有个滑动条. [ContextMenu(string)] :给小齿轮添加一个回调函数 [ContextMenuIteam(string,function)] : 给成员变量添加右键菜单,第一个参数是菜单的名称,第二个参数是右键点击的回调函数
检视器高级显示控制: [RequireComponent(typeof(BoxCollider))] 特性:当前组件依赖于盒子碰撞体,当前组件挂载在对象上时,盒子碰撞体会一起被添加上去,当Player组件没有被移除时,盒子碰撞体不能被移除。
[ExecuteInEditMode] 特性:使生命周期函数,在编辑器状态下可以执行,游戏中也可以正常使用,Update()在场景中对象发生改变或者项目组织发生变化时会在编辑器下执行。
[AddComponentMenu(“自定义控制器/玩家控制器”,1)] 特性:将脚本组件添加在AddComponent上,第一个参数:“分类名/组件名”;第二个参数:在列表中的显示顺序。 单选,多选按钮:多选使用二进制理解,即不同的位代表不同的选项,使用或运算可以使用多选
public enum PlayerLikeColor{
Green = 1,
Red =2,
Pink =4,
}
检视器高级修改(外挂式编程) 项目中建立Editor目录 Editor目录下建立外挂式脚本,外挂脚本因为存储在Editor目录下,所以不会被打入最终的游戏包。
[MenuItem("增强版功能/创建窗口")]:顶部菜单类,在顶部显示“工具菜单”
MenuItem声明周期函数:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class PopWindow:EditorWindow
{
[MenuItem("增强版功能/创建窗口")]
static void OpenWindow()
{
PopWindow window = GetWindow<PopWindow>(false, "弹窗标题",true);
window.minSize = new Vector2(400, 300);
window.maxSize = new Vector2(800, 600);
}
private void OnEnable()
{
Debug.Log("开窗口调用");
}
private void OnDisable()
{
Debug.Log("关窗口调用");
}
private void Update()
{
Debug.Log("update");
}
private void OnGUI()
{
Debug.Log("OnGUI");
}
private void OnHierarchyChange()
{
Debug.Log("场景发生变化");
}
private void OnProjectChange()
{
Debug.Log("项目结构发生变化的时候,执行的回调函数");
}
private void OnSelectionChange()
{
Debug.Log("物体变化的时候,执行的回调函数");
}
}
三、编辑器小Demo,实现在平台上生产点击物体
一、效果演示
二、实现步骤
1、实现右侧小窗
三、AB包,热更新
提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
|