unity脚本

Mono技术注意事项

  • Unity中C#脚本的运行环境使用了Mono技术,Mono是指由Novell公司领导的,一个致力于.NET开源的工程。可以在Unity脚本中使用.NET所有的相关类。但Unity中C#的使用和传统的C#有一些不同,下面将是初学者在学习Unity时C#脚本开发中需要特别注意的事项。

继承自MonoBehaviour类

  • Unity中所有挂载到游戏对象上的脚本中包含的类都继承自MonoBehaviour类(直接地或间接地)。MonoBehaviour类中定义了各种回调方法,例如Start、Update和FixedUpdate等。通过Asset→Create→C# Script创建的脚本,系统模板就已经包含了必要的定义。

使用Awake或Start函数初始化

  • C#中用于初始化脚本的代码必须置于Awake或Start方法中。Awake和Start的不同之处在于,Awake方法是在加载场景时运行,Start方法是在第一次调用Update或FixedUpdate方法之前调用,Awake方法在所有Start方法之前运行。

类名字必须匹配文件名

  • C#脚本中类名需要手动编写,而且类名还必须和文件名相同,否则当脚本挂载到游戏对象时,控制台会报错。

Unity脚本中协同程序有不同的语法规则

  • Unity脚本中协同程序(Coroutines)必须是IEnumerator返回类型,并且yield用yield return替代。具体可以使用如下的C#代码片段来实现。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class NewBehaviourScript : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            
        }

        // Update is called once per frame
        void Update()
        {
            
        }

        IEnumerator SomeCoroutine()                 // C#协同程序
        {
            yield return 0;                         // 等待一帧
            yield return new WaitForSeconds(2);     // 等待2s
        }
    }

只有满足特定情况变量才能显示在属性查看器中

  • 只有序列化的成员变量才能显示在属性查看器中,而private和protected类型的成员变量只能在专家模式中显示,而且,其属性不被序列化或显示在属性查看器,如果属性想在属性查看器中显示,必须是public类型的

  • 序列化是指将对象实例的状态存储到存储媒体的过程。序列化的成员变量一般就是指public类型的成员变量,相反static、private和protected等类型就不符合此类情况。

尽量避免使用构造函数

  • 不要在构造函数中初始化任何变量,而是使用Awake或Start方法来实现。

  • 并且在单一模式下使用构造函数可能会导致严重后果,会引发类似随机的空引用异常。因此,一般情况下尽量避免使用构造函数。

  • 事实上,没必要在继承自MonoBehaviour的类的构造函数中写任何代码。

unity脚本基本语法

最后更新于