用C#和Boo书写脚本
C#和Boo在脚本方面上还是有点区别的1. 都继承自MonoBehaviour类 所有动作行为脚本必须继承自MonoBehaviour(直接或间接)。虽然这在JavaScript中是自动发生的,但是在C#和Boo脚本中必须显示声明。如果你创建脚本是通过Unity的 Asset -> Create -> C Sharp/Boo Script 按钮,那么创建出来的模板就已经包含了必要的声明定义的,也就是说已经给你继承了MonoBehaviour类。 例1: public class NewBehaviourScript : MonoBehaviour {...} // C# class NewBehaviourScript (MonoBehaviour): ... # Boo 2. 使用Awake或Start函数去初始化. 当你在用JavaScript写脚本时,位于函数体外部的初始化代码,则需转移到C#和Boo下的Awake和Start函数中。 Awake和start的区别是,Awake是在场景加载时被调用,而Start仅仅是在Update和FixedUpdate第一次被调用前执行,所youAwake的调用均早于所有Start的调用。 3.,文件名必须与类名匹配(PS:像 Java class) 在JavaScript中类名隐式作为文件名的,当然不包括后缀。但是在C#和Boo中必须手动设置。 4. C#的协同语法是不一样的. 协同必须有类型为IEnumerator 的返回,用yield时要这样用yield return替代仅仅写个yield 例2 using System.Collections; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // C# coroutine IEnumerator SomeCoroutine () { // Wait for one frame yield return 0; // Wait for two seconds yield return new WaitForSeconds (2); } } 5. 不要使用命名空间. Unity当前不支持命名空间,不过这个规定在未来会被移除的。 6. 只有公共且序列化的成员变量可以在Inspector中可见. 私有的保护的成员变量只能在Debug模式下才能看的见,属性不会被序列化或显示在Inspector 7.禁止使用构造函数初始化 绝不要在构造函数中初始化任何变量,应该在Awake或Start中实现这种目的。 在编辑模式下,Unity会自动调用构造函数。这经常在一个脚本编写完时立刻发生,因为构造函数被调用以便检索默认变量的值,不仅仅是在不可预知的时候上被调用,这样可能会调用可动或不动的游戏对象。一个继承自MonoBehaviour的类的构造函数,将会在不可预知的情况下被调用,大多数这种情况下会导致Unity崩溃。只有继承自ScriptableObject可以使用构造函数。例如在单例模式下使用构造函数可能会产生严重后果并且导致类似于随机空指针引用错误。所以当你想使用单例模式时,不要用构造函数而是使用。事实上继承自MonoBehaviour的类也不会有哪些代码必须要放到构造函数里才行。 |
Shark出品:Unity3D API 翻译1
最新推荐文章于 2023-03-06 10:59:54 发布