• 第一个Unity3D脚本


    学习就该简单粗暴,看了一天Unity3d的教程加文档,尝试一个小练习,再快速写个博客加深印象。

    一:首先建立一个空白工程,创建一个空GameObject,在Assets Pannel中创建一个名为LevelScript的c#文件,构建一个inspector属性相关的类。

    LevelScript.cs内容如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class LevelScript : MonoBehaviour {
     5 
     6     public int experience;
     7 
     8     public int Level
     9     {
    10         get{return experience/750;}
    11     }
    12 }

    第二行创建了一个属性类,该类继承自MonoBehaviour基类,属性类中包含了一个名为experience的属性,和一个名为Level的方法。

    在LevelScript类初始化的时候会生成一个名为experience的属性变量吧,这是我初步的认识。

    二:再在Assets文件夹下创建一个Editor文件夹,在Editor文件夹中创建一个名为LevelScriptEditor的c#文件,内容如下:

     1 using UnityEngine;
     2 using System.Collections;
     3 using UnityEditor;
     4 
     5 [CustomEditor(typeof(LevelScript))]
     6 public class LevelScriptEditor : Editor {
     8     public override void OnInspectorGUI(){
     9         LevelScript myLevelScript = (LevelScript)target;
    10         myLevelScript.experience = EditorGUILayout.IntField ("Experience", myLevelScript.experience);
    11         EditorGUILayout.LabelField("Level",(myLevelScript.Level.ToString()));
    12     }
    13 }

    第五行声明这是一个对象类型为LevelScript的自定义的编辑器。

    第六行定义一个名为LevelScriptEditor的编辑器类,该编辑器类的对象类型为LevelScript。

    Editor基类绘制图形面板是用EditorGUILayout类来实现的。

    需要注意的是

    CustomEditor 即自定义编辑器
    
    描述了用于编辑器实时运行类型的一个编辑器类。
    
    注意:这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。编辑器类在UnityEditor命名空间下。
    所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。 当你为一个组件制作一个自定义编辑器时,你需要带上这个属性编辑器类。

    第八行开始重新绘制inspector属性面板。第九行声明一个名为myLevelScript的变量

    第十行生成一个Experience属性,并将值传递给myLevelScript对象。

    第十一行建立一个Label属性,名为Level,显示myLevelScript对象中的Level值。

    三:总结一些Unity3D中的常用控件及方法,详细内容得参考开发文档。伪代码如下:

    //帮助消息框控件
    EditorGUILayout.HelpBox("This is a help box", MessageType.Info);
    
    //按钮控件及事件用法
    if(GUILayout.Button("Build Object")){
        ScriptObject.function();
    }
    
    //绘制默认属性面板
    DrawDefaultInspector();
    
    //勾选控件
    EditorGUILayout.Toggle("是否选中", ScriptObject.myBool);  
    
    //文本输入控件
    EditorGUILayout.TextField("输入文本",ScriptObject.myString);
    //EditorWindow的事件函数
    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();} if (GUILayout.Button("关闭窗口", GUILayout.Width(200))){this.Close();} } 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("关闭时调用");}

    以上便是Unity3D的第一篇学习笔记。

  • 相关阅读:
    BZOJ1093: [ZJOI2007]最大半连通子图
    BZOJ4033: [HAOI2015]树上染色
    BZOJ1977: [BeiJing2010组队]次小生成树 Tree
    BZOJ4944: [Noi2017]泳池
    BZOJ1269: [AHOI2006]文本编辑器editor
    BZOJ4596: [Shoi2016]黑暗前的幻想乡
    BZOJ1815: [Shoi2006]color 有色图
    BZOJ1488: [HNOI2009]图的同构
    BZOJ3527: [Zjoi2014]力
    Salazar Slytherin's Locket CodeForces
  • 原文地址:https://www.cnblogs.com/hksac/p/6086548.html
Copyright © 2020-2023  润新知