oppotunity发音 oppotunity发音editor 脚本怎么添加到物体上

Unity 经典教程 Editor扩展之Selection的使用_百度经验
&&&&&&&&&在职工作Unity 经典教程 Editor扩展之Selection的使用<div class="audio-wp audio-wp-1" data-text='Unity 经典教程 Editor扩展之Selection的使用Unity 经典教程 Editor扩展之Selection的使用。主要介绍使用Selection对于选择的物体进行操作,本节简单通过使用Selection设计一个实现删除选中物体的案例,具体如下:' data-for=''>听语音1234567
百度经验:jingyan.baidu.comUnity 经典教程 Editor扩展之Selection的使用。主要介绍使用Selection对于选择的物体进行操作,本节简单通过使用Selection设计一个实现删除选中物体的案例,具体如下:百度经验:jingyan.baidu.comUnityUnity Editor百度经验:jingyan.baidu.com1Selection:Access to the selection in the editor.2Selection.objects:The actual unfiltered selection from the Scene.END百度经验:jingyan.baidu.com1打开Unity,并且新建一个空工程,创建之后Unity的界面如下图2在工程里新建一个文件夹,并且命名“Editor”,在“Editor”文件夹下新建一个脚本“SelectionTest”,然后选中脚本右键“Open C# Project”或者双击打开脚本,如下图3在脚本编辑区域,引入“UnityEditor”,使用“MenuItem”新建个删除命令,并且完成对应的静态函数,其中使用“Selection.objects”来收集鼠标选中的物体,然后完成点单删除选中物体的Demo操作,如下图4编译正确之后,回到Unity界面,新建一个“Cube”用以删除,然后选中该“Cube”,再单击菜单栏“MyTools”下拉菜单“MyDelete”删除选中的“Cube”,具体如下图5使用“GameObject.DestroyImmediate&()”函数的弊端就是删除后不能撤销回退上一操作,在“Edit”菜单下,我们看到的回退操作还是上一步骤的新建物体操作,如下图6回到脚本,新建一个删除函数,使用可以回退的“Undo.DestroyObjectImmediate&()”函数进行删除动作,代码以及代码说明如下图7编译正确后,回到Unity界面,选中“Cube”,执行“MyTools”-“MyUndoDelete”进行删除操作,然后在“Edit”就可以回退上一步骤的删除动作,具体如下图 & & & & & & & & & & & & & & & & & & & & & & & & & & & &8到此,Unity 经典教程 Editor扩展之Selection的使用讲解结束,更多资料可参见 Unity Manul 手册,谢谢END百度经验:jingyan.baidu.com注意一定要引入命名空间“UnityEditor”若帮到您,还请帮忙投票以帮助到更多的人;若有疑问,请留言经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(15)已投票(15)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00000热门杂志第3期人生知识达人职场秘诀1042次分享第1期实现创业梦想1512次分享第1期轻松理财手册693次分享第2期晋升攻坚战454次分享第1期如何用互联网理财530次分享◆请扫描分享到朋友圈程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之拓展自定义编辑器窗口(二)
Unity3D研究院之拓展自定义编辑器窗口(二)
围观86388次
编辑日期: 字体:
Unity支持自行创建窗口,也支持自定义窗口布局。在Project视图中创建一个Editor文件夹,在文件夹中在创建一条脚本。
自定义窗口需要让脚本继承EditorWindow在设置MenuItem,此时在Unity导航菜单栏中GameObjec-&window就可创建一个自定义窗口。
123456789101112131415
using UnityEngine;using UnityEditor;public class MyEditor : EditorWindow {&&&&&[MenuItem ("GameObject/window")]&&&&static void AddWindow () {&&&&&&
//创建窗口
Rect&&wr = new Rect (0,0,500,500);&&&&&&&&MyEditor window = (MyEditor)EditorWindow.GetWindowWithRect (typeof (MyEditor),wr,true,"widow name");
window.Show();&&&&&}}
EditorWindow.GetWindowWithRect() 和 EditorWindow.GetWindow()都可以创建一个窗口。前者可以规定窗口的区域,后者可通过鼠标动态的延伸窗口。参数1表示窗口的对象,参数2表示窗口的区域,参数3表示窗口类型true表示窗口不会被别的窗口覆盖,参数4表示窗口的名称。
然后我们在扩充一下自定义窗口,仔细看看窗口的生命周期。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
using UnityEngine;using UnityEditor;public class MyEditor : EditorWindow {&&&&&[MenuItem ("GameObject/window")]&&&&static void AddWindow () {&&&&&&
//创建窗口
Rect&&wr = new Rect (0,0,500,500);&&&&&&&&MyEditor window = (MyEditor)EditorWindow.GetWindowWithRect (typeof (MyEditor),wr,true,"widow name");
window.Show();&&&&&}& //输入文字的内容 private string text; //选择贴图的对象 private Texture texture;& public void Awake ()
//在资源中读取一张贴图
texture = Resources.Load("1") as Texture; }& //绘制窗口时调用&&&&void OnGUI ()
//输入框控件
text = EditorGUILayout.TextField("输入文字:",text);&
if(GUILayout.Button("打开通知",GUILayout.Width(200)))
//打开一个通知栏
this.ShowNotification(new GUIContent("This is a Notification"));
if(GUILayout.Button("关闭通知",GUILayout.Width(200)))
//关闭通知栏
this.RemoveNotification();
//文本框显示鼠标在窗口的位置
EditorGUILayout.LabelField ("鼠标在窗口的位置", Event.current.mousePosition.ToString ());&
//选择贴图
texture =&&EditorGUILayout.ObjectField("添加贴图",texture,typeof(Texture),true) as Texture;&
if(GUILayout.Button("关闭窗口",GUILayout.Width(200)))
//关闭窗口
this.Close();
}&&&&&}& //更新 void Update() {& }& void OnFocus() {
Debug.Log("当窗口获得焦点时调用一次"); }& void OnLostFocus() {
Debug.Log("当窗口丢失焦点时调用一次"); }& void OnHierarchyChange() {
Debug.Log("当Hierarchy视图中的任何对象发生改变时调用一次"); }& void OnProjectChange() {
Debug.Log("当Project视图中的资源发生改变时调用一次"); }& void OnInspectorUpdate() { && //Debug.Log("窗口面板的更新"); && //这里开启窗口的重绘,不然窗口信息不会刷新 && this.Repaint(); }& void OnSelectionChange() {
//当窗口出去开启状态,并且在Hierarchy视图中选择某游戏对象时调用
foreach(Transform t in Selection.transforms)
//有可能是多选,这里开启一个循环打印选中游戏对象的名称
Debug.Log("OnSelectionChange" + t.name);
} }& void OnDestroy() {
Debug.Log("当窗口关闭时调用"); }}
下载内容:
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!程序的世界很单纯!
unity如何查找某个脚本挂在了哪些物体上
在开发中往往会遇到一个问题:不知道整个场景中究竟有哪些物体挂载了某一个脚本。如果挨个查找太麻烦了,下面有一种方法可以快速找到解决这个问题。
在unity的Window里有一项Editor tests runner 选择这个会出现一个窗口:如下图:
然后点击创建脚本会有脚本自动创建在project里的Editor下。之后我们要写两个脚本(如下图)
这两个脚本代码,一个是用来盛放要被找的那些物体另个是盛放你要来查找被物体挂载的脚本:
盛放物体的代码:
using UnityE
using UnityE
public class FindMissingScriptsRecursively : EditorWindow
static int go_count = 0, components_count = 0, missing_count = 0;
[MenuItem("Window/FindMissingScriptsRecursively")]
public static void ShowWindow()
EditorWindow.GetWindow(typeof(FindMissingScriptsRecursively));
public void OnGUI()
if (GUILayout.Button("Find Missing Scripts in selected GameObjects"))
FindInSelected();
private static void FindInSelected()
GameObject[] go = Selection.gameO
go_count = 0;
components_count = 0;
missing_count = 0;
foreach (GameObject g in go)
FindInGO(g);
Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count));
private static void FindInGO(GameObject g)
go_count++;
Component[] components = g.GetComponents&Component&();
for (int i = 0; i & components.L i++)
components_count++;
if (components[i] == null)
missing_count++;
string s = g.
Transform t = g.
while (t.parent != null)
s = t.parent.name + "/" +
Debug.Log(s + " has an empty script attached in position: " + i, g);
// Now recurse through each child GO (if there are any):
foreach (Transform childT in g.transform)
//Debug.Log("Searching " + childT.name
FindInGO(childT.gameObject);
盛放脚本的代码:
using UnityE
using System.C
using System.Collections.G
using UnityE
/////////////////////////////////////////////////////////////////////////////
//查找节点及所有子节点中,是否有指定的脚本组件
/////////////////////////////////////////////////////////////////////////////
public class MonoFinder : EditorWindow
Transform root =
MonoScript scriptObj =
int loopCount = 0;
List&Transform& results = new List&Transform&();
[MenuItem("Level4/Finder/MonoFinder")]
static void Init()
EditorWindow.GetWindow(typeof(MonoFinder));
void OnGUI()
GUILayout.Label("节点:");
root = (Transform)EditorGUILayout.ObjectField(root, typeof(Transform), true);
GUILayout.Label("脚本类型:");
scriptObj = (MonoScript)EditorGUILayout.ObjectField(scriptObj, typeof(MonoScript), true);
if (GUILayout.Button("Find"))
results.Clear();
loopCount = 0;
Debug.Log("开始查找.");
FindScript(root);
if (results.Count & 0)
foreach (Transform t in results)
EditorGUILayout.ObjectField(t, typeof(Transform), false);
GUILayout.Label("无数据");
void FindScript(Transform root)
if (root != null && scriptObj != null)
loopCount++;
Debug.Log(".." + loopCount + ":" + root.gameObject.name);
if (root.GetComponent(scriptObj.GetClass()) != null)
results.Add(root);
foreach (Transform t in root)
FindScript(t);
}有了这两个脚本,会发现unity的菜单里会多出一个level4(如图)的选项,然后点击它,会出现一个弹窗。上面那个节点(如图)就是盛放物体的,下面那个脚本类型(如图)就是放脚本的。
例如下面的案例中,我要查找一个名字叫AsyncImageDownloader的脚本在panoramic这个物体里有多少被挂载了。直接把对应的东西拖进去,然后点击find就会发现在userhead_portrait这个子物体里有这个脚本。
这种方法可以找到所有父物体下的子物体中所有的挂载。它会遍历整个父物体中个的子物体;
从下图中可以看出在panoramic这个父物体中有575个子物体,它们都被查找了一遍。可见刚才查到只有userhead_portrait上挂载了刚才要找的脚本。
Unity3d中搜索脚本挂载到了哪些物体上
Unity3D查找丢失材质和脚本工具
Unity通过脚本实现给一个物体添加子物体
【Unity教程】找到对象的脚本的几种方法
Unity查找脚本被哪些Perfab或场景引用
Unity 使用备忘(四) 游戏物体不挂在脚本文件上直接实现Button(Script)脚本文件的Onclick方法
快速找出挂载有特定脚本的对象的方法
没有更多推荐了,}

我要回帖

更多关于 unityeditor插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信