Unity 中 C# 的基础语法 以及 常用功能

来源:互联网 发布:时代光华网络商学院 编辑:程序博客网 时间:2024/06/16 00:39

1 [HideInInspector]和 [SerializeField]
变量的序列化:再次读取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 菜单
0 0
原创粉丝点击