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

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

LevelScript.cs内容如下:

 using UnityEngine;
using System.Collections; public class LevelScript : MonoBehaviour { public int experience; public int Level
{
get{return experience/;}
}
}

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

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

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

 using UnityEngine;
using System.Collections;
using UnityEditor; [CustomEditor(typeof(LevelScript))]
public class LevelScriptEditor : Editor {
public override void OnInspectorGUI(){
LevelScript myLevelScript = (LevelScript)target;
myLevelScript.experience = EditorGUILayout.IntField ("Experience", myLevelScript.experience);
EditorGUILayout.LabelField("Level",(myLevelScript.Level.ToString()));
}
}

第五行声明这是一个对象类型为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())){this.ShowNotification(new GUIContent("This is a Notification"));}
if (GUILayout.Button("关闭通知", GUILayout.Width())){this.RemoveNotification();}
if (GUILayout.Button("关闭窗口", GUILayout.Width())){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的第一篇学习笔记。

第一个Unity3D脚本的更多相关文章

  1. Unity3d 脚本相互调用

    unity中三种调用其他脚本函数的方法 第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用…… 第二种,GameObject.Find("脚本所在物体名& ...

  2. [转]unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  3. Unity3D脚本调用Objective C代码实现游戏内购买

    0.开篇吐槽: 一年之内从WP转到iOS,又从iOS转到U3D,真心伤不起. 1.Unity3D脚本调用OC代码的原理: 其实也没啥神秘的,因为OC是和C互通的 ,C#又可以通过DllImport的形 ...

  4. Unity3D脚本语言UnityScript初探

    译者注: Unity3D中支持三种语言:JavaScript.C#.Boo,很多人不知道如何选择,通过这篇译文,我们可以搞清楚这三者语言的来龙去脉,对选择主语言有一定的借鉴意义. 首先,Unity是基 ...

  5. Unity3D脚本中文系列教程(十六)

    Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆  function OnPostprocess ...

  6. Unity3D脚本中文系列教程(十五)

    http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...

  7. Unity3D脚本中文系列教程(十四)

    http://dong2008hong.blog.163.com/blog/static/469688272014032134394/ WWWFrom 类Unity3D脚本中文系列教程(十三)辅助类. ...

  8. Unity3D脚本中文系列教程(十三)

    http://dong2008hong.blog.163.com/blog/static/469688272014032334486/ Unity3D脚本中文系列教程(十二) ◆ function G ...

  9. Unity3D脚本中文系列教程(十)

    http://dong2008hong.blog.163.com/blog/static/4696882720140312627682/?suggestedreading&wumii Unit ...

随机推荐

  1. LeetCode--015--三元之和(java)

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  2. java去除表达符号的正则表达式

    java 去标点符号正则表达式 博客分类: 小功能 正则表达式标点符号  public static void main(String[] args) {String s = "哈哈!@#W ...

  3. grpc(三)之grpc客户端使用连接池

    本文使用commons-pool2来实现连接池应用 1.定义一个产生连接池的工厂,需要继承BasePooledObjectFactory,其用处是生产和销毁连接池中保存的对象.根据需求,现在池子里保存 ...

  4. .NET:bin 与 obj,Debug 与 Release ,区别与选择

    bin 与 obj bin 目录:用来存放编译的结果. ( bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件 ) 编译的结果,有 Debug 和 Release 两个版本 ...

  5. Oracle单机Rman笔记[0]---环境准备

    A. 安装操作系统rhel6.6,关闭防火墙,修改网卡配置IP(略)PS:1.默认分区选项(第二项,默认为LVM),然后进行调整2.安装类型选择“桌面”3.安装后 分配IP.调整防火墙.测试SSH B ...

  6. Php基本类型学习

    1.8种基本的数据类型 1)四种基本类型 boolean (布尔类型) integer(整形类型) double  (双精度类型) string  (字符串类型) 2)两种复合类型 array (数组 ...

  7. 微信小程序中对于变量的定义

    在页面对应的js文件中: page顶部使用let定义变量,这是定义的全局变量,在当前脚本页面,任何函数中都可以直接使用变量名调用.如果做修改,就直接使用变量等于要更改的值. 使用const定义变量,就 ...

  8. [BZOJ2427]软件安装

    Problem 每个软件都要安装某些软件才能安装,而且都有体积和价值,求安装的价值最大值 Solution 对于每个环,我们可以知道必须全部一起取或者不取,因此我们先用Tarjan缩点 然后我们用一个 ...

  9. Saiku调用WS接口(十四)

    Saiku调用WS接口 关于saiku集成系统单点登录告一段落,始终没想好怎么去做,主要是因为saiku有自己的权限定义,一直没想好关于saiku本身的权限信息以及用户信息怎么处理(在这里笔者希望已实 ...

  10. OC关于项目里面的代码统计次数

    备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! 1.打开终端 2.cd 进入项目根目录 3.输入命令 find . "(" ...