1.语法结构:
2.编译过程:
CLS->Mono RunTime->机器码
3.关于修改和创建脚本:
创建脚本:
一般我们会在项目中添加scripts文件夹,并在此文件夹中编写脚本,当然这些脚本可以根据个人喜好分配到不同类的子文件夹中。
需要注意的是:我们每次创建脚本文件时,系统会自动生成一个C#脚本,如下:
如果脚本生成了一定要查看,类名和文件名是否相同。这个很重要!!!
4.开发工具:
MonoDevelop:
5.脚本的生命周期
在学习之前,我们先要搞明白一些,脚本的基础知识。
首先我们先学习一下什么是特性。如下:
public class LiseCycle : MonoBehaviour
{
[SerializeField]//序列化字段,用于在编辑器中显示私有变量
private int a;
[HideInInspector]//用于隐藏字段
public int b;
[Range(0,100)]//用于限定数值范围
public int c;
}
这些中括号中的字段就是不同的特性。
而且我们会发现,在unity脚本中,我们一般不会去写属性和构造方法。因为属性不会调用,构造方法可能出错。
//另外当我们学习玩C#后,我们会发现有一点特别不适应就是在写脚本的时候不能写属性
//public int A
//{
// get { return this.a; }
// set { this.a = value; }
//}
//public LifeCycle()
//{
// b = (int)Time.time;
//}
至于为什么,简单来说就是不能在子线程中调用主线程事件,现在不明白也不碍事,后面我们会说。
6.初始阶段
Awake在创建游戏对象时立即执行,早于start。Start在创建游戏对象时,启动脚本,后才会执行。这里我们需要注意的是就算我们在Unity中禁用了脚本,只要物品挂在了脚本,都会运行Awake。
所以,以后我们如果想要初始化一些对象的参量,可以写在awake和start中,两者区别不大,主要是顺序不同,Awake永远快于Start执行。
代码实例:
private void Awake()
{
Debug.Log("初始方法:" + Time.time + ",对象:" + this.name);
if (false)
{
this.enabled = false;
}
}
private void OnEnable()
{
Debug.Log("对象:" + this.name+",调用了脚本!");
}
private void Start()
{
Debug.Log("开始方法:" + Time.time + ",对象:" + this.name);
}
其中this.enabled是用于满足某些条件下,是否执行当前对象的脚本。