纳金网

标题: Unity3D脚本中文教程1.7 [打印本页]

作者: 奔跑的小兔    时间: 2012-5-14 14:33
标题: Unity3D脚本中文教程1.7
概览:用C#编写脚本

除了语法,使用C#或者Boo编写脚本还有一些不同。最需要注意的是:

1.从MonoBehaviour继承

所有的行为脚本必须从MonoBehaviour继承(直接或间接)。在Javascript中这自动完成,但是必须在C#或Boo脚本中显示申明。如果你在Unity内部使用Asset -> Create -> C Sharp/Boo Script菜单创建脚本,创建模板已经包含了必需的定义。

public class NewBehaviourScript : MonoBehaviour {...} // C#

class NewBehaviourScript (MonoBehaviour): ... # Boo

2.使用Awake或Start函数来初始化

Javascript中放置在函数之外的代码,在C#或Boo中要放置在Awake或Start中。

Awake和Start的不同是Awake在场景被加载时候运行,而Start在第一次调用Update或FixedUpdate函数之前被调用,所有Awake函数在任何Start函数调用之前被调用。

3.类名必须与文件名相同

Javascript中,类名被隐式地设置为脚本的文件名(不包含文件扩展名)。在c#和Boo中必须手工做。

4.在C#中Coroutines有不同语法。

Coroutines必有一个IEnumerator返回类型,并且yield使用yield return… 而不是yield…

using System.Collections;

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour {

// C# coroutine

IEnumerator SomeCoroutine ()

{

// 等一帧

yield return 0;

//等两秒

yield return new WaitForSeconds (2);

}

}

5.不要使用命名空间

目前Unity还不支持将代码放置在一个命名空间中,这个需要将会出在未来的版本中。

6.只有序列化的成员变量会显示在检视面板中

私有和保护成员变量只在专家模式中显示,属性不被序列化或显示在检视面板中。

7.避免使用构造函数

不要在构造函数中初始化任何变量,使用Awake或Start实现这个目的。即使是在编辑模式中Unity也自动调用构造函数,这通常发生在一个脚本被编译之后,因为需要调用构造函数来取向一个脚本的默认值。构造函数不仅会在无法预料的时刻被调用,它也会为预设或未激活的游戏物体调用。

单件模式使用构造函数可能会导致严重的后果,带来类似随机null引用异常。

因此如果你想实现,如,一个单件模式,不要使用构造函数,而是使用Awake。其实上,没有理由一定要在继续自MononBehaviour类的构造函数中写任何代码。

概览:最重要的类

Javascript中可访问的全局函数或C#中的基类

移动/旋转物体

动画系统

刚体

FPS或第二人称角色控制器




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5