Unity 中 C# 的基础语法 以及 常用功能
2016-01-20 10:38
1301 查看
1 [HideInInspector]和 [SerializeField]
变量的序列化:再次读取Unity时序列化的变量是有值的,不需要再次去复制,因为它已经被保存下来。
[HideInInspector] 表示原本已经在面板上显示的序列化值隐藏起来
[SerializeField] 表示将原本显示在面板上的序列化的私有变量可以序列化,在下次读取时就是上次赋值的值
2 get set 方法
3 传递引用 ref
4 传递引用 out
5 ref 与 out 相同点
6 常用的脚本API
7 协同程序
8 增加unity编辑器菜单
变量的序列化:再次读取Unity时序列化的变量是有值的,不需要再次去复制,因为它已经被保存下来。
[HideInInspector] 表示原本已经在面板上显示的序列化值隐藏起来
[SerializeField] 表示将原本显示在面板上的序列化的私有变量可以序列化,在下次读取时就是上次赋值的值
1 [HideInIspector] public int x; 这样可以在程序中将代码复制,但是不能在面板中看到并手动设置赋值 2 [SerializeField] perivate int x; 在面板中可以看到并且赋值 3 如果a是私有的序列化变量,你想在面板中读取,但是不保存,那么用:-------------网上说可以,但是验证时会报错 [HideInInspector][SerializedField] private int a; public int b{ get{return a;} } 报错??: error CS0246: The type or namespace name `SerializedField' could not be found. Are you missing a using directive or an assembly reference? error CS0246: The type or namespace name `SerializedFieldAttribute' could not be found. Are you missing a using directive or an assembly reference? 4 如果a是私有序列化变量,你不想在面板中做任何操作(不想看到,也不想写),但是想要在程序中给它赋值,那么用。-------------网上说可以,但是验证时会报错 [HideInInspector] [SerializedField] private int a; public int b{ get { return a; } set { a = value; } } 报错同3
2 get set 方法
private int miX public int x{ set { miX = value; } get { return miX; }} 注意是public,也可以限定只读或者只能写入
3 传递引用 ref
class RefExample { static void Method(ref int i) { i = 44; } static void Main() { int val = 0;------------------------ref 需要在调用方法之前赋值 Method(ref val); // val is now 44 } }
4 传递引用 out
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value;--------------------------out 不需要在调用方法之前赋值 Method(out value); // value is now 44 } }
5 ref 与 out 相同点
ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的,因此将不会编译以下代码: class Example { public void SampleMethod(out int i) { } public void SampleMethod(ref int i) { } } 但是,如果一个方法采用 ref 或 out 参数,而另一个方法不采用这两类参数,则可以进行重载,如下所示: class RefOutOverloadExample { public void SampleMethod(int i) { } public void SampleMethod(out int i) { } }
6 常用的脚本API
Trandform 游戏对象的位置、方向、缩放比例 Time 游戏时间 Random 随机数、随机点--球上点球内点。。。、旋转 Mathf 数学运算
7 协同程序
协同程序与多线程类似,但是在任一指定时刻都只会有一个协同程序在运行,别的协同程序则会挂起。 可以起到一段程序在等待一段时间后继续执行的效果 1 开启一个协同程序 使用MonoBehavior.StartCoroutine可以开启一个协同程序,所以该方法需要在继承Monobehaviour的类中调用 StartCoroutine(String methodName) startCoroutine(IEnumerator routine) a. 使用字符串作为参数可以开启线程并在线程结束之前终止线程,开启线程最多只能传递一个参数 b. 使用IEnumeraotor开启的的线程不能随时终止(除非使用StopAllCoroutines()方法),没有参数个数的限制 2 终止协同程序 a. Unity使用StopCoroutine(String methodName)来终止一个协同程序,使用StopAllCoroutine来终止所有协同程序,但是这两个方法都只能终止该MonoBehaviour中的协同程序 b. 将协同程序所在的gameObject的acitve属性设置为false,当再次设置active为true的时候,协同程序不会再开启,而设置enable和false则不会生效,因为协同程序开启后是以一个线程在运行的,它与MonoBehavior是互不干扰的模式在运行,此后除非代码调用,他们共同作用于同一个对象,只有当对象不可见的时候才能够同时终止这两个线程。
8 增加unity编辑器菜单
[MenuItem("new Menu/new/new new/new item")] public static void testMenu(){ Debug.Log("menu"); } 编译之后编辑器中就会出现 Menu 菜单
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程