之前一直想做个copy对象的transform属性,每次都点那个小齿轮真是太麻烦了,于是有了如下:
using UnityEngine; using System.Collections; using UnityEditor; public class ChangeAudioClip : MonoBehaviour { [MenuItem("Terrain/CustomTool")] //添加一个命令按钮到菜单栏[MenuItem("Terrain/CustomTool _g")]加上‘ _g’为定义一个快捷键 public static void CreatTool() { EditorWindow.GetWindow<AudioClip_Tool>(false,"AudioClip_Tool",true).Show(); //执行 } } public class AudioClip_Tool : EditorWindow { void OnGUI() { GUILayout.Space(20); GUILayout.BeginHorizontal(); if (GUILayout.Button("SelectedChangePosition",GUILayout.Width(230))) //创建一个button? { SelectedChangePosition(); } GUILayout.EndHorizontal(); } private void SelectedChangePosition() { Transform[] trans = Selection.GetTransforms(SelectionMode.DeepAssets); //选中之后返回的模式,API一共有八种,也没看出来有什么区别,这个deepassets是这么介绍的:若选择的是文件夹,则包含文件夹在内的所有资产 if (trans.Length > 2) //因为我想要的功能是单选,再加上物体本身,所以要排除的是二个 return; CopyTrans copy = FindObjectOfType<CopyTrans>(); //自己写的一个脚本,用来加载一些预制什么的,因为我没找到或者那个函数不稳定?Resources .FindObjectsOfTypeAll 就是这货,刚开始测试好好的,我这个项目最初检测出2600+,测试了几次就只有20+,只有删除再创建放到Assets下才有效,有时候只有在Resources下才有效=_=,或许是我没有搞清楚吧 Transform tr = null; for (int i = 0; i < copy.chat.Length; i++) // 这是我自己需要用到的一些,其他的修改也差不多,只要得到了object想干嘛就干嘛了 { if (copy.chat[i] && copy.chat[i].name == trans[0].name) { Debug.Log(copy.chat[i].name); copy.chat[i].position = trans[0].position; copy.chat[i].rotation = trans[0].rotation; copy.chat[i].localScale = trans[0].localScale; return; } } for (int i = 0; i < copy.record.Length; i++) { if (copy.record[i] && copy.record[i].name == trans[0].name) { Debug.Log(copy.record[i].name); copy.record[i].position = trans[0].position; copy.record[i].rotation = trans[0].rotation; copy.record[i].localScale = trans[0].localScale; return; } } for (int i = 0; i < copy.cameraPoint.Length; i++) { if (copy.cameraPoint[i] && copy.cameraPoint[i].name == trans[0].name) { Debug.Log(copy.cameraPoint[i].name); copy.cameraPoint[i].position = trans[0].position; copy.cameraPoint[i].rotation = trans[0].rotation; copy.cameraPoint[i].localScale = trans[0].localScale; return; } } } void OnInspectorUpdate() //在编辑器状态下,只要inspector面板有更改就会调用这个函数,然后必须得写个repaint()才会刷新 { Repaint(); } }
using UnityEngine; public class CopyTrans : MonoBehaviour { public Transform[] chat; public Transform[] record; void Start() { Transform[] all = Resources.FindObjectsOfTypeAll<Transform>(); Debug.Log(all.Length); for (int i = 0; i < all.Length; i++) { if (all[i].name == "ChatPoint") { chat = all[i].GetComponentsInChildren<Transform>(); } else if (all[i].name == "RecordPoint") { record = all[i].GetComponentsInChildren<Transform>(); } } } public void SaveXML() { Debug.Log("Data already save at xml."); } void OnApplicationQuit() { Debug.Log("Object Not Found."); } }
一直想在unity里定义个快捷键来操作某些东西,一直找不到,在写这个东西的时候恰巧看到了,引用如下:http://blog.csdn.net/zw514159799/article/details/50775502
精华如下:
为了使超级用户和喜欢使用键盘的用户工作的更快捷,我们可以为新的菜单项关联一个快捷键-使用快捷键的组合将自动的启动他们菜单项。 下面是被指定的键(它们也可以组合起来使用):
- %-CTRL 在Windows / CMD在OSX
- # -Shift
- & -Alt
- LEFT/RIGHT/UP/DOWN-光标键
- F1…F12
- HOME,END,PGUP,PDDN
字母键不是key-sequence的一部分,要让字母键被添加到key-sequence中必须在前面加上下划线(例如:_g对应于快捷键”G”)。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|