【Unity3D日常开发】(一)编辑器扩展

举报
恬静的小魔龙 发表于 2021/10/24 18:19:51 2021/10/24
【摘要】 推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言今天分享一下编辑器扩展系列。 二、正文 1、RequireComponent的使用语法:[RequireComponent(typeof (XXXXXX))]其中XXXX为依赖的脚本,或者Unity组件这样,当你挂这个脚本时,XXXX脚本也被挂上去了当你添加的一个用了Req...

推荐阅读

一、前言

今天分享一下编辑器扩展系列。

二、正文

1、RequireComponent的使用

语法:
[RequireComponent(typeof (XXXXXX))]

其中XXXX为依赖的脚本,或者Unity组件
这样,当你挂这个脚本时,XXXX脚本也被挂上去了

当你添加的一个用了RequireComponent组件的脚本
需要的组件将会自动被添加到game object(游戏物体)
这个可以有效的避免组装错误

举个例子一个脚本可能需要刚体总是被添加在相同的game object(游戏物体)上

用RequireComponent属性的话,这个过程将被自动完成,因此你可以永远不会犯组装错误。

2、AddComponentMenu的使用

用法:[AddComponentMenu(“NGUI/Examples/cubSpin”)]

AddComponentMenu属性允许你在"Component"菜单中放置一个无论在哪的脚本,而不是仅仅在"Component->Scripts"菜单中。
这里写图片描述

3、MenuItem的使用

MenuItem的使用:在工具栏上增加新的一列

用法:如图[MenuItem(“Test/Test”)] 后面必须跟一个static的方法,需要引用头文件 using UnityEditor;

这里写图片描述

4、ContextMenu的使用

ContextMenu的使用:属性允许你去添加命令给上下文菜单
用法:
[ContextMenu(“Test”)]
public void Test ()
右键点击:会出现如图所示
这里写图片描述

5、HideInInspector的使用

用法:

[HideInInspector]
public Vector3 rotationsPerSecond = new Vector3(0f,0.1f,0f);

HideInInspector的作用:在Inspector面板中隐藏public变量

使用前:

在这里插入图片描述
使用后:
这里写图片描述

6、Serializable的使用

用法:

// myScale将能在Inspector中编辑  
[SerializeField]  
private float myScale;  

7、ExecuteInEditMode的使用

ExecuteInEditMode属性的作用是在EditMode下也可以执行脚本。Unity中默认情况下,脚本只有在运行的时候才被执行,加上此属性后,不运行程序,也能执行脚本。

与PlayMode不同的是,函数并不会不停的执行。

  • Update : 只有当场景中的某个物体发生变化时,才调用。
  • OnGUI : 当GameView接收到一个Event时才调用。

OnRenderObject 和其他的渲染回调函数 : SceneVidw或者GameView重绘时,调用。

Awake与Start调用规则:

  • Awake:加载时调用。
  • Start:第一次激活时调用。
    这个与运行模式下的调用规则一致。参见《unity-----函数执行顺序》。

需要注意的是,由于在两种模式下都可以运行,所有,切换模式的那一刻,得我们留意一下。

不管是从编辑模式进入运行模式,还是从运行模式进入编辑模式,unity都会重新加载资源,所以:

  • 当该MonoBehavior在编辑器中被赋于给GameObject的时候,Awake, Start 将被执行。
  • 当Play按钮被按下游戏开始以后,Awake, Start 将被执行。
  • 当Play按钮停止后,Awake, Start将再次被执行。
  • 当在编辑器中打开包含有该MonoBehavior的场景的时候,Awake, Start将被执行。

使用方法:

using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class Example : MonoBehaviour {
    public Transform target;
    void Update() {
        if (target)
            transform.LookAt(target);
    }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。