unity

【Unity】Unity中的枚举和标志

对着背影说爱祢 提交于 2019-12-03 15:11:47
原文链接 :http://unity3d.9tech.cn/news/2014/0410/40176.html 枚举和标志 今天的主题是枚举,它是C#语言中的一个很有帮助的工具,可以增强代码的清晰度以及准确性。 枚举一系列值 C#中最经常使用枚举的地方就是用来定义一系列可能值的时候。例如在制作一个角色类游戏中,角色有多个不同的状态效果。可以用一些基本的方式来定义玩家可能的状态效果: using UnityEngine; public class Player : MonoBehaviour { public string status; void Update() { if (status == "Poison") { //Apply poison effect } else if (status == "Slow") { //Apply slow effect } else if (status == "Mute") { //Apply mute effect } } } 此处我们用一个简单的if-else检测来查看应用的是哪个状态效果,哪个运行良好。但是如果你想应用一个状态效果,但是突然写成这样: //Oops, I spelled "Poison" wrong! status = "Pioson"; 突然,就不会有什么状态效果了。我们会利用if

Unity3D 监控面板显示数据(Inspector)

给你一囗甜甜゛ 提交于 2019-12-03 15:10:54
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Serialization; [AddComponentMenu("Sample/TestCode")] //Component上会增加一个Sample/TestCode选项 选择这个选项就会将此脚本挂在您当前选择的物体身上 [RequireComponent(typeof(Rigidbody))] //把此行代码写在类的上方, 将脚本拖到物体上会自动添加Rigidbody组件 public class InspectorTest : MonoBehaviour { [SerializeField] // 加上SerializeField关键字 虽然是private,但是可以在Inspector面板上来调整数值 private int SerializeField; [HideInInspector] public int HideInInspector; //HideInInspector public,但是可以在Inspector面板上依然不显示 和上方相反 [Range(0, 100)] //滑动条来控制数值, 最小值0,最大值100 看自己需求调整 public float

Unity inspector 编辑器

*爱你&永不变心* 提交于 2019-12-03 15:10:44
因为要处理很多模型, 所以写了个脚本, using UnityEngine; using UnityEditor; [CustomEditor(typeof(ModelInfo))] //这句的意思是, 这个编辑器是为Modelinfo的脚本而设置的. 物体挂了这个脚本之后, 就会有这个编辑界面显示 public class PlayerMaker : Editor { public override void OnInspectorGUI () { var maker= (ModelInfo)target; //获取这个物体的ModelInfo脚本 if (GUILayout.Button ("设置模型")) { maker.MakeModel (); //绘制一个按钮点击之后执行, ModelInfo的一个方法. } } } 注意的是, 在编辑器模式下, 一样是可以获取物体的tag, 修改tag, 一样可以获取脚本之类的, 可以删除脚本, 增加脚本, 都是可以的, 不过删除脚本用的是DestroyImmidiate() 这样才可以, 用GameObject.Destroy 是不可以的. 不过测试了一下发现在4.7.1 的时候, 编辑器下GameObject.DestroyImmediate(gameobject) 这样, 删掉之后, 编辑器会报错. 虽然确实是删除了 来源:

Unity Editor编辑器实用扩展

为君一笑 提交于 2019-12-03 15:10:35
1.编辑器实用方法汇总 //1.编辑器内物体查找(指定路径下搜索类型是scene/object.. ,并且名字中包含unity的文件) var mlist = new List<string>(AssetDatabase.FindAssets("unity t:scene", new string[] { "Assets/path" })); //2. 定位 EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath("filePath",typeof(UnityEngine.Object))); //3.搜集编辑器引用 AssetDatabase.GetDependencies("pathName"); EditorUtility.CollectDependencies("Objects[]"); //4.选中查找 只有Object类型好使 UnityEditor.Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets) //持续更新中... ... 2.Inspector_PopList:将指定文件目录内资源条目已pop类型展示在inspector面板中 using System; using System.Collections; using

Unity 枚举值在Inspector面板显示中文

浪尽此生 提交于 2019-12-03 15:10:24
Unity 枚举值在Inspector面板显示中文 一般给策划写编辑器时便于策划查看选择类型,将枚举值显示为中文,如下所示 代码如下 using UnityEngine; using System; #if UNITY_EDITOR using UnityEditor; using System.Reflection; using System.Text.RegularExpressions; #endif /// <summary> /// 设置枚举名称 /// </summary> #if UNITY_EDITOR [AttributeUsage(AttributeTargets.Field)] #endif public class EnumAttirbute : PropertyAttribute { /// <summary> /// 枚举名称 /// </summary> public string name; public EnumAttirbute(string name) { this.name = name; } } #if UNITY_EDITOR [CustomPropertyDrawer(typeof(EnumAttirbute))] public class EnumNameDrawer : PropertyDrawer { public

Unity中InSpector重写问题

送分小仙女□ 提交于 2019-12-03 15:09:52
unity中使用inspector的重写问题 1.在InSpector的重写要保存数据,这就要使用一下方法 方法名 使用说明 EditorUtility.SetDirty() 在5.3以后,标记场景的更改,不能再标记修改场景中的对象EditorUtility.SetDirty(target) Undo.RecordObject() 标记场景中的对象所做的任何更改,这段代码要放在更改之前Undo.RecordObject(target,”string name”) SerializedObject.Update(), EditorGUILayout.PropertyField(), and SerializedObject.ApplyModifiedProperties(). 更改可序列化组件或者资源的属性 EditorSceneManager.MarkSceneDirty() 标记场景中的文件并不想要有撤销功能 2.在InSpector中使用GUILayout.BeginHorizontal()和GUILayout.EndHorizontal()达到横板排列的功能。 3.为了能够InSpector面板中将GameObject[]拖拽到属性栏里面,则要可以使用以下两种方法。 1) mp.game[i] = (GameObject)EditorGUILayout.ObjectField

在Unity Inspector中显示class变量

左心房为你撑大大i 提交于 2019-12-03 15:09:39
通过Unity Inspector,我们能够很方便的给脚本中变量赋值。变量要在Inspector中显示,需要满足下面两个条件: 1. 变量是内置类型的,比如float, string, int, double类型的变量 2. 变量访问限制为public 例如如下脚本: [csharp] view plain copy using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public float f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } } 在Inspector中显示为这样: 如果我们想要显示在Inspector中一个custom class 类型的变量呢?比如: [csharp] view plain copy using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public float f; public Person person; public class Person { public

Unity编辑器实现枚举多选

[亡魂溺海] 提交于 2019-12-03 15:09:23
简介: 在编辑器中,可以很简单的实现枚举的多选。 在脚本中自定义枚举属性 /// <summary> /// 定义多选属性 /// </summary> public class EnumMultiAttribute : PropertyAttribute { } /// <summary> /// 绘制多选属性 /// </summary> [CustomPropertyDrawer(typeof(EnumMultiAttribute))] public class EnumMultiAttributeDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { property.intValue = EditorGUI.MaskField(position, label, property.intValue , property.enumNames); } } 此时再需要多选的枚举上加上属性标签 /// <summary> /// 测试枚举 /// </summary> public enum EnumType { One, Two, Three, Four } [Header("测试枚举")]

Unity使用技巧

只愿长相守 提交于 2019-12-03 15:08:59
Unity使用技巧 参考文献: https://unity3d.com/cn/learn/tutorials/s/tips Scene界面中的对齐操作 单位对齐(Unit snapping) 选中要操作的对象,按住 Ctrl 键后,可以按照指定的步长对目标进行移动、旋转和缩放。在 Edit-Snap Settings 窗口中可以设置每次在X/Y/Z轴上移动的距离、每次缩放的倍数和每次旋转的角度,也可以在该窗口中将对象对齐到离其最近的坐标网格处。 表面对齐(Surface snapping) 选中要操作的对象,切换到Move工具,按住 Ctrl+Shift 后拖动移动工具的中心(注意,是中心而不是单个坐标轴),可以将对象对齐到其他对象的碰撞器表面。 朝向旋转(Look-at rotation) 选中要操作的对象,切换到Rotate工具,按住 Ctrl+Shift 后拖动旋转工具的中心(注意,是中心而不是单个旋转轴),可以使对象的forward朝向鼠标所指的其他对象的碰撞器表面位置。 顶点对齐(Vertex snapping) 选中要操作的对象,切换到Move工具。按住 V 键或者按下 Ctrl+Shift+V 进入顶点对齐模式。松开 V 键或再次按下 Ctrl+Shift+V 退出顶点对齐模式。 在顶点对齐模式下,将鼠标移动到对象的要进行对其的那个Mesh顶点上