在unity脚本中控制Inspector⾯板的参数操作在编写脚本的过程中我们会遇到⼀些⼩问题
⽐如⼀个的变量为了在其他脚本中可以调⽤我们需要写成public类型的
这样的话在Inspector⾯板中会出现此变量这篇博客会给⼤家介绍⼀些⽅法去避免这些⼩问题
1.[Header(" ")]
这个的作⽤是给它下⾯的所有变量⼀个总标题
2.[Tooltip("")]
这个的作⽤是给下⾯的第⼀⾏(紧邻的语句)注释
这个注释和双斜杠的注释不同
这个注释的效果是在unity中⿏标拖到变量的名字上他会出现注释(括号的双引号中的注释)
在这⾥我给⼤家⼀个例⼦让⼤家可以明⽩⼀点
[Header("GameObject")]
[Tooltip("⼿")]
private GameObject SmallGunPlayer;
[Tooltip ("AK47"), SerializeField]
private  GameObject BiglGunPlayer;
它的效果是
然后把⿏标拖到变量上边的时候是
⼤家对照脚本中的语句可以很轻易的理解了
3.[HideInInspector]
这个的⽤法是和在这篇博客开头的差不多
就是我们在⼀个不想出现在Inspector⾯板上出现的public变量
我们就在这个语句上添加[HideInInspector]即可
在unity的Inspector⾯板上就不会出现了
因为这个⽐较好理解就不给例⼦了
4.[SerializeField]
这个和上⾯的语句相反这个是private的变量
添加上这个语句之后的话
在unity的Inspector⾯板上可以改变其值相当于public变量
不过private 具有⼀定的保护级别这是和直接⽤public的区别
在这⾥最后提⼀下,以上语句可以⼀起⽤效果可以重叠
具体效果在上⾯给出的代码和图⽚中可以发现
5.[Range( , )]
这个的⽤法是写在⼀个变量的前边(上边)
然后在unity的Inspector⾯板上就是⼀个类似于Slider的效果
[Range(2, 25)]
public int maxRandomValue = 5;
6.[Serializable]
这个的作⽤是我们在脚本中声明⼀个类的时候
我们可以把它其中的变量改成⼀个可以展开折叠的变量
可能上⾯的描述不太准确下⾯给⼤家⼀个例⼦
public Mydate date;
[Serializable]
public class Mydate
{
public  float q;
public  float w;
public  float m;
public  float r;
}
它的效果是
很容易就看懂了吧
在上边提到了类,在这⾥给⼀些⼩⽩朋友们介绍⼀下最简单的类在unity中的⽤法[Serializable ]
public class prefebs
{
public GameObject Bullet;
public GameObject Robot;
public Transform Position;
}
public prefebs Prefebs;
private void Update
{
ansform.Translate(transform.up*Time.deltatime*10);
}
在上边很容易可以知道在创建类之后在没在update start等中调⽤
通过上边介绍的所有⽅法可以制作出很多让你意想不到的效果
并且可以让你感觉这个真的好⽤
补充:Unity编辑器——Inspector ⾯板扩展
将EditorGUI 扩展在 Inspector ⾯板上
EditorGUI 和 GUI 的⽤法⼏乎完全⼀致,⽬前来说前者多⽤于编辑器开发,后者多⽤于发布后调试编辑器。总之,它们都是起辅助作⽤的。 EditorGUI 提供的组件⾮常丰富,常⽤的绘制元素包括⽂本、按钮、图⽚和滚动框等。做⼀个好的编辑器,是离不开 EditorGUI 的。如图:我们将 EditorGUI 拓展在 Inspector ⾯板上了,相关代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class Script_03_23 : MonoBehaviour
{
public Vector3 scrollPos;
public int myId;
public string myName;
public GameObject prefab;
public MyEnum myEnum = MyEnum.One;
public bool toogle1;
public bool toogle2;
typeof的用法public enum MyEnum
{
One=1,
Two,
}
#if UNITY_EDITOR
[CustomEditor(typeof(Script_03_23))]
public class ScriptEditor_03_23 : Editor
{
private bool m_EnableToogle;
public override void OnInspectorGUI()
{
//获取脚本对象
Script_03_23 script = target as Script_03_23;
//绘制滚动条
script.scrollPos =
EditorGUILayout.BeginScrollView(script.scrollPos, false, true);
script.prefab = EditorGUILayout.ObjectField("GameObject", script.prefab,
typeof(GameObject), true) as GameObject;
//绘制按钮
EditorGUILayout.BeginHorizontal();
GUILayout.Button("1");
GUILayout.Button("2");
EditorGUILayout.EndHorizontal();
//Toogle 组件
m_EnableToogle = EditorGUILayout.BeginToggleGroup("EnableToogle",
m_EnableToogle);
EditorGUILayout.EndToggleGroup();
EditorGUILayout.EndScrollView();
}
}
}
#endif
EditorGUILayout —— 是EditorGUI ⾃动布局版本。
EditorGUILayout.BeginScrollView —— 函数原型: public static Vector2 BeginScrollView( Vector2 scrollPosition, bool alwaysShowHorizontal, bool alwaysShowVertical, params GUILayoutOption[] options);
scrollPosition参数:显式使⽤的位置
alwaysShowHorizontal —— 表⽰可选的参数,始终显⽰⽔平滚动条。如果为false或省略,那么则仅当ScrollView中的内容⽐ScrollView本⾝更宽时才会显⽰。
alwayShowVertical —— 表⽰可选的参数,始终显⽰垂直滚动条。如果为false或省略,那么只有当ScrollView中的内容⽐ScrollView本⾝⾼时才会显⽰。
EditorWindows 窗⼝
Unity 提供编辑器窗⼝,开发者可以⾃由拓展⾃⼰的窗⼝。 Unity 编辑器系统⾃带的视图窗⼝其实也是⽤ EditorWindows 实现的。如图所⽰,我们来制作⼀个简单的编辑窗⼝,它绘制元素时同样使⽤ EditorGUI 代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_03_24Window : EditorWindow
{
[MenuItem("Window/Open My Window")]
static void Init()
{
Script_03_24Window window = (Script_03_24Window)EditorWindow.GetWindow(typeof(Script_03_24Window));
window.Show();
}
private Texture m_MyTexture = null;
private float m_MyFloat = 0.5f;
void Awake()
{
Debug.LogFormat("窗⼝初始化时调⽤");
m_MyTexture = AssetDatabase.LoadAssetAtPath<Texture>("Assets/unity1.png");
}
void OnGUI()
{
GUILayout.Label("Hello World!!", EditorStyles.boldLabel);
m_MyFloat = EditorGUILayout.Slider("Slider", m_MyFloat, -5, 5);
GUI.DrawTexture(new Rect(0, 30, 100, 100), m_MyTexture);
}
void OnDestroy()
{
Debug.LogFormat("窗⼝销毁时调⽤");
}
void OnFocus()
{
Debug.LogFormat("窗⼝拥有焦点时调⽤");
}
void OnHierarchyChange()
{
Debug.LogFormat("Hierarchy视图发⽣改变时调⽤");
}
void OnInspectorUpdate()
{
//Debug.LogFormat ("Inspector每帧更新");
}
void OnLostFocus()
{
Debug.LogFormat("失去焦点");
}
void OnProjectChange()
{
Debug.LogFormat("Project视图发⽣改变时调⽤");
}
void OnSelectionChange()
{
Debug.LogFormat("Hierarchy或者Project视图中选择⼀个对象时调⽤");
}
void Update()
{
//Debug.LogFormat ("每帧更新");
}
}
EditorWindows 下拉菜单
如图所⽰,在 EditorWindows 编辑窗⼝的右上⾓,有个下拉菜单,我们也可以对该菜单中的选项进⾏拓展,不过这⾥需要实现 IHasCustomMenu 接⼝。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。