Unity 自己的一些编辑功能
Unity Scene 自带了2D和3D模式下的坐标、旋转、缩放的编辑,甚至坐标可以选择全局(Global)和本地(Local)编辑,基本的功能都有,如一些组件也会有自带的Scene编辑和绘制功能,比如:
- 碰撞盒的碰撞区域。
- 粒子的发射区域。
- 摄像机的覆盖区域。
- ……
Unity 的 Handles
class in UnityEditor , Custom 3D GUI controls and drawing in the scene view.
BeginGUI / EndGUI pair within the //OnSceneGUI// function.关键这句
方法OnSceneGUI,以我放荡不羁的性格,会进行以下几步
- 进行代码封装,以后有其它地方用到随时都可调用
- 建一个Demo场景,场景里教你怎么调用方法以及效果展示
Editor 文件夹下新建脚本 KMSceneEditor ,无继承,并引用 UnityEditor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
public static void DrawAxis(params Transform[] trans) { if (trans == null) return; foreach (Transform target in trans) { if (target == null) continue; Vector3 newPosition = target.position; float handlesize = HandleUtility.GetHandleSize(newPosition) * 0.6f; Handles.color = new Color(0.99f, 0.50f, 0.35f); newPosition = Handles.Slider(newPosition, Vector3.right, handlesize, Handles.ArrowCap, 1); Handles.color = new Color(0.30f, 0.85f, 0.99f); newPosition = Handles.Slider(newPosition, Vector3.forward, handlesize, Handles.ArrowCap, 1); Handles.color = new Color(168/255.0f, 242/255.0f, 77/255.0f); newPosition = Handles.Slider(newPosition, Vector3.up, handlesize, Handles.ArrowCap, 1); if (newPosition != target.position) { target.position = newPosition; EditorUtility.SetDirty(target); } } } public static void DrawName(params Transform[] trans) { if (trans == null) return; foreach (Transform target in trans) { if (target == null) continue; Vector3 newPosition = target.position; string handleName = target.name; float center = HandleUtility.GetHandleSize(newPosition); GUIStyle style = new GUIStyle(); style.active.textColor = Color.gray; style.normal.textColor = Color.green; style.onNormal.textColor = Color.yellow; style.alignment = TextAnchor.MiddleCenter; Handles.Label(target.position + Vector3.up * center, handleName, style); } } |
如图所示,一个是画坐标编辑,一个是画名字。两个方法就完毕了,开始介绍用法:
脚本内容:
1 2 3 4 5 6 7 8 9 |
using UnityEngine; using System.Collections; public class Demo_KMSceneEditor : MonoBehaviour { public Transform[] objs; public Transform center; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using UnityEngine; using UnityEditor; using System.Collections; [CustomEditor(typeof(Demo_KMSceneEditor),true)] public class Ins_Demo_KMSceneEditor : Editor { Demo_KMSceneEditor script; void OnEnable() { script = target as Demo_KMSceneEditor; } //这个不写上,编辑器一直报提示,所以我写,让我们清除这些污垢 public override void OnInspectorGUI() { base.OnInspectorGUI(); } void OnSceneGUI() { //如果你想始终绘制,那么就把这个判断注掉 if (Selection.activeGameObject == script.gameObject) { KMSceneEditor.DrawAxis(script.objs); KMSceneEditor.DrawName(script.center); } } } |
拖入引用,让SceneView花枝招展起来。
风骚的效果图:
这篇文章的技术就介绍到这里
现在已经快凌晨1点,自从上班后,时间就像涨了翅膀一样,流逝飞快,转眼间,接触Unity都第5个年头了,这些年来,我坚持记了两年英语单词和语法,最后慢慢的就放弃了,我坚持看书,但也是荒废半年,然后一次性看好几本,也算是半坚持半放弃状态。
能一直让我坚持的,是对游戏的爱好,是要求自己对技术成长,至少这几年,我没有停下过。
最近把《明朝那些事儿》看完了,这本十年前的作品,有点相读恨晚的感觉,作者在后面写了一些后记,很适合我此刻的心情,在此我抄录下来:
几年来,我每天都写,没有一天敢疏忽,不惹事,不闹事,即使所谓盛名之下,我也从未懈怠。
人生并非如某些人所说,很短暂,事实上,有时候,它很漫长,特别是对苦难中的人,漫长得想死。
但我坚持,无论有多绝望,无论有多悲哀,每天早上起来,都要对自己说,这个世界很好、很强大。
这句话,不是在满怀希望光明时说的,很绝望、很痛苦、很迷茫的时候,说这句话。
要坚信,你是一个勇敢的人。
因为你还活着,活着,就要继续前进。
书的最后,还落下了这么一个结论:
在这本台历上,写着一句连名人是谁都没说明白的名人名文
是的,这就是我想说的,这就是我想通过徐霞客所表达的,足以藐视所有王候将相,最完美的结束语:
成功只有一个——按照自己的方式,去度过人生。
行了,终于写完,有时间得谈谈对手机游戏市场的看法,最近和同事聊,觉得有些东西、有些看法很值得探讨。